日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Navigation常見場景的解決方案

來源: 責編: 時間:2024-05-09 09:27:24 229觀看
導讀想了解更多關于開源的內容,請訪問:51CTO 鴻蒙開發者社區https://ost.51cto.com路由跳轉場景頁面跳轉是路由最常用的能力,Navigation通過NavPathStack提供了諸多方法,下文以pushDestination方法為例,介紹Navigation的路由跳

rT028資訊網——每日最新資訊28at.com

想了解更多關于開源的內容,請訪問:rT028資訊網——每日最新資訊28at.com

51CTO 鴻蒙開發者社區rT028資訊網——每日最新資訊28at.com

https://ost.51cto.comrT028資訊網——每日最新資訊28at.com

路由跳轉場景

頁面跳轉是路由最常用的能力,Navigation通過NavPathStack提供了諸多方法,下文以pushDestination方法為例,介紹Navigation的路由跳轉相關能力。rT028資訊網——每日最新資訊28at.com

頁面間跳轉

NavPathStack提供了路由管理的能力,通過NavPathStack進行頁面跳轉,主要適用于頁面較多的應用。rT028資訊網——每日最新資訊28at.com

Step1:創建NavPathStack對象pageStack,通常使用@Provide進行修飾,方便后續子組件通過@Comsumer獲取,以實現子頁面的路由跳轉。rT028資訊網——每日最新資訊28at.com

也可以將pageStack傳入路由框架,以實現路由框架開發(后續路由框架章節會介紹)的開發。rT028資訊網——每日最新資訊28at.com

@Entry @Component struct mainPageView {   @Provide('pageStack') pageStack: NavPathStack = new NavPathStack()   ...   build() {     ...   } }

Step2:構建路由表pageMap,該方法通過@Builder進行修飾,通過傳入的pageName屬性,返回不同頁面。rT028資訊網——每日最新資訊28at.com

@Entry @Component struct mainPageView {   @Provide('pageStack') pageStack: NavPathStack = new NavPathStack()   @Builder   PageMap(pageName: string) {     if (pageName === 'loginPage') {       loginPageView()     } else if (pageName === 'mainPage') {       mainPageView()     }   }   build() {     ...   } }

Step3:在build創建Navigation組件(需要傳入pageStack參數),通過navDestination屬性傳入路由表pageMap,并通過pageStack.pushPath()實現頁面跳轉。rT028資訊網——每日最新資訊28at.com

@Entry @Component struct mainPageView {   @Provide('pageStack') pageStack: NavPathStack = new NavPathStack()   @Builder   pageMap(pageName: string) {     if (pageName === 'loginPage') {       loginPageView()     } else if (pageName === 'mainPage') {       mainPageView()     }   }   build() {     Navigation(this.pageStack){       ...       Button('login').onClick( ent => {         let pathInfo : NavPathInfo = new NavPathInfo('loginPage', null)         this.pageStack.pushDestination(pathInfo, true);       })     }.navDestination(this.pageMap)     ...   } }

頁面間參數傳遞

Navigation的頁面間,通過NavPathInfo對象中的params屬性,實現從發起頁到目標頁的數據傳遞;通過onPop回調參數,實現處理目標頁面的返回。rT028資訊網——每日最新資訊28at.com

Step1:構建NavPathInfo對象,輸入需要傳遞給目標頁面的參數。rT028資訊網——每日最新資訊28at.com

params參數:將需要傳遞的數據封裝起來進行傳遞,無法傳遞對象里面的函數。具體的支持參數可以參考指南()rT028資訊網——每日最新資訊28at.com

onPop參數:目標頁面觸發pop時的返回,在回調中通過PopInfo.info.param獲取到返回的對象。rT028資訊網——每日最新資訊28at.com

// 發起頁 mainPage let loginParam : LoginParam = new LoginParam() // 構建pathInfo對象 let pathInfo : NavPathInfo = new NavPathInfo('loginPage', loginParam   , (popInfo: PopInfo) => {     let loginParam : LoginParam = popInfo.info.param as LoginParam;     ...   }) // 講參數傳遞到目標頁 this.pageStack.pushDestination(pathInfo, true);  

Step2:目標頁通過“NavPathStack.getParamByIndex(0)”獲取到發起頁傳遞過來的參數rT028資訊網——每日最新資訊28at.com

@Component export struct loginPageView {   @Consume('pageInfo') pageStack : NavPathStack;    aboutToAppear(): void {     this.loginParam = this.pageStack.getParamByIndex(0) as LoginParam;   }   ... }

Step3:目標頁通過NavPathStack.pop方法返回起始頁,其result參數用來傳遞需要返回給起始頁的對象。rT028資訊網——每日最新資訊28at.com

@Component export struct loginPageView {   @Consume('pageInfo') pageStack : NavPathStack;   // 頁面構建的對象   private loginParam! : LoginParam;   ...   build() {     NavDestination(){       ...       Button('login').onClick( ent => {         // 將對象返回給起始頁         this.pageStack.pop(this.loginParam, true)       })     }   } }

跨模塊頁面跳轉

當應用模塊較多,需要使用HSP(HAR)進行多模塊開發,比如登錄模塊是一個獨立團隊開發,以HSP(HAR)的形式交付。此時主頁應當從mainPage跳轉到HSP(HAR)中的頁面,需要先導入模塊的自定義組件,將組件添加到pageMap中,再通過pushDestination進行跳轉。rT028資訊網——每日最新資訊28at.com

Step1:從HSP(HAR)中完成自定義組件(需要跳轉的目標頁面)開發,講自定義組件申明為export。rT028資訊網——每日最新資訊28at.com

@Component export struct loginPageInHSP {   @Consume('pageStack') pageStack: NavPathStack;   ...   build() {     NavDestination() {       ...     }   } }

Step2:在HSP(HAR)的index.ets中導出組件。rT028資訊網——每日最新資訊28at.com

export { loginPageInHSP } from "./src/main/ets/pages/loginPageInHSP"

Step3:配置好HSP(HAR)的項目依賴后,在mainPage中導入自定義組件,并添加到pageMap中,即可正常調用。// 導入模塊目標頁自定義組件。rT028資訊網——每日最新資訊28at.com

import { loginPageInHSP } from 'library/src/main/ets/pages/loginPageInHSP' @Entry @Component struct mainPage {   @Provide('pageStack') pageStack: NavPathStack = new NavPathStack()   @Builder pageMap(name: string) {     if (name === 'loginPageInHSP') {       // 路由到hsp包中的登錄頁面       loginPageInHSP()     }   }   build() {     Navigation(this.pageStack) {       Button("login With HSP module")         .onClick(() => {           let loginParam : LoginParamInHSP = new LoginParamInHSP()           let pathInfo : NavPathInfo = new NavPathInfo('loginPageInHSP', loginParam, (popInfo: PopInfo) => {})           this.pageStack.pushDestination(pathInfo, true);         })     }     .navDestination(this.pageMap)   } }

頁面轉場

默認轉場動畫

Navigation的pushXXX和pop方法中都帶有一個參數animated,將animated設置成false則會取消轉場動畫,路由到Dialog模式頁面或者路由出Dialog模式頁面是,均無轉場動畫,如果需要轉場動畫,可以通過自定義轉場動畫實現。rT028資訊網——每日最新資訊28at.com

自定義轉場動畫

Navigation通過customNavContentTransition事件提供自定義轉場動畫的能力,當轉場開始時,通過回調函數告知開發者,告知此次動畫from(從哪來)、to(到哪去)、是Push、Pop亦或是Repalce。這里需要注意當為根視圖時,NavContentInfo的name值為undefined。rT028資訊網——每日最新資訊28at.com

開發者可以在customNavContentTransition的回調函數中進行動畫處理,返回NavigationAnimatedTransition自定義轉場協議已實現自定義轉場。rT028資訊網——每日最新資訊28at.com

NavigationAnimatedTransition對象中包含三個參數,timeout(動畫超時結束時間),transition(自定義動畫執行回調),onTransitionEnd(轉場完成回調),需要在transition方法中實現具體動畫邏輯。rT028資訊網——每日最新資訊28at.com

由于自定義轉場參數是在Navigation層級,但是每個頁面都會有其特定的自定義轉場效果,因此需要定義一套轉場動畫框架,已實現在Navigation層面對框架進行統一管理,各個頁面通過實現框架提供的回調函數,將其特定的動畫效果傳遞給Navigation。rT028資訊網——每日最新資訊28at.com

Step1:構建動畫框架,通過一個Map管理各個頁面自定義自定義動畫對象CustomTransition,CustomTransition對象提供了Push、Pop、Replace各個動畫階段的回調函數給各個頁面進行補充,此處將各個階段細分為In和Out,從而實現頁面進入和退出時不同的轉場效果。rT028資訊網——每日最新資訊28at.com

// 自定義動畫對象,定義了Push、Pop、Replace各個動畫階段的回調函數。rT028資訊網——每日最新資訊28at.com

export class CustomTransition {   pageID : number = -1;   onPushInStart: () => void = () => {};   onPushInEnd: () => void = () => {};   onPushInFinish: () => void = () => {};   onPopInStart: () => void = () => {};   onPopInEnd: () => void = () => {};   onPopInFinish: () => void = () => {};   onReplaceInStart: () => void = () => {};   onReplaceInEnd: () => void = () => {};   onReplaceInFinish: () => void = () => {};   onPushOutStart: () => void = () => {};   onPushOutEnd: () => void = () => {};   onPushOutFinish: () => void = () => {};   onPopOutStart: () => void = () => {};   onPopOutEnd: () => void = () => {};   onPopOutFinish: () => void = () => {};   onReplaceOutStart: () => void = () => {};   onReplaceOutEnd: () => void = () => {};   onReplaceOutFinish: () => void = () => {};   ...    // 獲取啟動階段參數回調   public getStart(operation : NavigationOperation, isInPage : boolean) : () => void {     if (operation == NavigationOperation.PUSH) {       if (isInPage) {         return this.onPushInStart;       } else {         return this.onPushOutStart;       }     } else if (operation == NavigationOperation.POP) {       if (isInPage) {         return this.onPopInStart;       } else {         return this.onPopOutStart;       }     } else {       if (isInPage) {         return this.onReplaceInStart;       } else {         return this.onReplaceOutStart;       }     }   }   // 獲取動畫結束階段參數回調   public getEnd(operation : NavigationOperation, isInPage : boolean) : () => void {     ...   }   // 獲取動畫結束后參數回調   public getFinished(operation : NavigationOperation, isInPage : boolean) : () => void {     ...   } }  // 自定義動畫對象框架 export class CustomTransitionFW {   // 各個頁面自定義動畫對象映射表   private customTransitionMap: Map<number, CustomTransition> = new Map<number, CustomTransition>()   ...   registerNavParam(ct : CustomTransition): void {     ...     this.customTransitionMap.set(ct.pageID, ct);   }    unRegisterNavParam(pageId: number): void {     ...     this.customTransitionMap.delete(pageId);   }    getAnimateParam(pageId: number): CustomTransition {     ...     return this.customTransitionMap.get(pageId) as CustomTransition;   } }

Step2:配置Navigation的customNavContentTransition屬性,當返回undefined時,使用系統默認動畫。rT028資訊網——每日最新資訊28at.com

build() {   Navigation(this.pageStack){     ...   }.hideTitleBar(true)   .hideToolBar(true)   .navDestination(this.pageMap)   .customNavContentTransition((from: NavContentInfo, to: NavContentInfo, operation: NavigationOperation) => {     // 對于Dialog型的頁面,此處統一做了自定義動畫的屏蔽,若需要動畫,可以不做此判斷。     if (from.mode == NavDestinationMode.DIALOG || to.mode == NavDestinationMode.DIALOG) {       console.error(`==== no transition because Dialog`);       return undefined;     }     let pageIn : CustomTransition | undefined;     let pageOut : CustomTransition | undefined;     pageIn = CustomTransitionFW.getInstance().getAnimateParam(to.index)     pageOut = CustomTransitionFW.getInstance().getAnimateParam(from.index)     // 業務首頁跳轉時若沒有自定義動畫訴求,此處可以通過判斷頁面id是否為-1(-1表示Navigation根視圖)進行跳出。     if (from.index === -1 || to.index === -1) {       return undefined;     }     // 創建自定義轉場協議,各個頁面都會根據協議中的配置進行轉場,當返回undefined時,使用系統默認動畫。     let customAnimation: NavigationAnimatedTransition = {       onTransitionEnd: (isSuccess: boolean)=>{         ...       },       transition: (transitionProxy: NavigationTransitionProxy)=>{         ...       },       timeout: 100,     };     return customAnimation;   }) }

Step3:customNavContentTransition事件需要返回NavigationAnimatedTransition對象,具體的動畫實現需要在NavigationAnimatedTransition的transition屬性中實現。transition中通過各個頁面在框架中注冊的回調函數,配置框架需要的動畫屬性。案例中各個頁面注冊了PUSH/POP/REPLACE的各個階段動畫參數。此處需要注意由于Navigation根頁面不在棧中,因此無法與NavDestination無法產生跳轉聯動,因此如果第一個入棧的頁面也需要自定義動畫,那么就需要判斷pageId是否為-1(-1及表示為根視圖),如果是-1則不就行動畫設置。rT028資訊網——每日最新資訊28at.com

let customAnimation: NavigationAnimatedTransition = {   ...   transition: (transitionProxy: NavigationTransitionProxy)=>{   // 配置起始參數   if (pageOut != undefined && pageOut.pageID != -1) {   pageOut.getStart(operation, false)(); } if (pageIn != undefined && pageIn.pageID != -1) {   pageIn.getStart(operation, true)(); } // 執行動畫 animateTo({   duration: 1000,   curve: Curve.EaseInOut,   onFinish: ()=>{     if (pageOut != undefined && pageOut.pageID != -1) {       pageOut.getFinished(operation, false)();     }     if (pageIn != undefined && pageIn.pageID != -1) {       pageIn.getFinished(operation, true)();     }     transitionProxy.finishTransition();   }}, ()=>{   if (pageOut != undefined && pageOut.pageID != -1) {     pageOut.getEnd(operation, false)();   }   if (pageIn != undefined && pageIn.pageID != -1) {     pageIn.getEnd(operation, true)();   } }) } }

Step4:在各個頁面中定義動畫回調,并往自定義動畫框架中注冊。并在組件onDisAppear生命周期中注銷框架中的頁面動畫回調。rT028資訊網——每日最新資訊28at.com

Step5:定義NavDestination的translate屬性,已實現動畫效果。rT028資訊網——每日最新資訊28at.com

@Component export struct loginPageView {   ...   private pageId: number = 0;   @State transX: number = 0;   @State transY: number = 0;    aboutToAppear(): void {     this.pageId = this.pageStack.getAllPathName().length - 1;     let ct : CustomTransition = new CustomTransition();     ct.pageID = this.pageId;     ct.onPushInStart = ct.onPushOutEnd = ct.onPopInStart = ct.onPopOutEnd = ct.onReplaceInStart = ct.onReplaceOutEnd = () => {       this.transX = -300;     }     ct.onPushInEnd = ct.onPushOutStart = ct.onPopInEnd = ct.onPopOutStart = ct.onReplaceInEnd = ct.onReplaceOutStart = () => {       this.transX = 0;     }     ct.onPushInFinish = ct.onPopInFinish  = ct.onReplaceInFinish = () => {       this.transX = 0;     }     ct.onPushOutFinish = ct.onPopOutFinish  = ct.onReplaceOutFinish = () => {       this.transX = -300;     }     // 將頁面的動畫效果注冊到動畫框架中     CustomTransitionFW.getInstance().registerNavParam(ct)   }    build() {     NavDestination(){       ...     }.hideTitleBar(true)     .onDisAppear(()=>{       // 組件銷毀的時候,需要將頁面的動畫效果從框架中刪除       CustomTransitionFW.getInstance().unRegisterNavParam(this.pageId)     })     // 定義translate,已實現動畫     .translate({x: this.transX, y: this.transY, z: 0})   } }

共享元素轉場

NavDestination之間可以通過geometryTransition實現共享元素轉場。rT028資訊網——每日最新資訊28at.com

起始頁。rT028資訊網——每日最新資訊28at.com

Step1:為需要實現共享元素轉場的元素添加geometryTransition屬性,id參數必須在兩個NavDestination之間保持一致。rT028資訊網——每日最新資訊28at.com

起始頁代碼。rT028資訊網——每日最新資訊28at.com

Column() {   Image($r('app.media.startIcon'))     .geometryTransition('1')   Text("起始頁共享的圖片") } .width(100) .height(100)

目的頁代碼。rT028資訊網——每日最新資訊28at.com

Column() {   Image($r('app.media.startIcon'))     .geometryTransition('1')   Text("目的頁共享的圖片") } .width(200) .height(200)

Step2:animateTo方法發起頁面跳轉(push 或者 pop),觸發共享元素轉場動畫執行。注意此處需要關閉頁面默認的跳轉動畫。rT028資訊網——每日最新資訊28at.com

Button('跳轉目的頁')   .width('80%')   .height(40)   .margin(20)   .onClick(() => {     animateTo({ duration: 1000 }, () => {       this.pageInfos.pushPath({ name: 'DestinationPage' }, false)     })   })

想了解更多關于開源的內容,請訪問:rT028資訊網——每日最新資訊28at.com

51CTO 鴻蒙開發者社區rT028資訊網——每日最新資訊28at.com

https://ost.51cto.comrT028資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-87498-0.htmlNavigation常見場景的解決方案

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 基于設置應用的應用權限、通知設置跳轉

下一篇: 時間序列數據處理,不再使用Pandas

標簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 為什么你不應該使用Div作為可點擊元素

    按鈕是為任何網絡應用程序提供交互性的最常見方式。但我們經常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內置瀏覽器的功能。
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,&ldquo;7
  • 蘋果公司要求三星和LG Display生產「無邊框」OLED iPhone顯示屏

    據 The Elec 報道,蘋果已要求其供應商為未來的 iPhone 型號開發「無邊框」OLED 顯示面板。蘋果顯然已要求三星和 LG Display 開發新的 OLED 顯示面
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • 最薄的14英寸游戲筆記本電腦 Alienware X14已可以購買

    2022年1月份在國際消費電子展(CES2022)上首次亮相的Alienware新品——Alienware X14現在已經可以購買了,這款筆記本電腦被譽為世界上最薄的 14 英寸游戲筆
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品ⅴa在线观看h| 欧美高清hd18日本| 亚洲午夜在线| 亚洲影院在线| 欧美在线综合| 免费观看久久久4p| 欧美午夜精品一区二区三区| 国产精品色网| 一区二区亚洲| 一级成人国产| 午夜精品福利一区二区蜜股av| 久久九九久久九九| 欧美精品久久久久a| 国产精自产拍久久久久久蜜| 精品999在线播放| 亚洲视频 欧洲视频| 久久精品一区二区三区不卡牛牛 | 亚洲天堂成人| 久久国产精品一区二区三区四区| 欧美成人影音| 国产精品中文在线| 亚洲国产精品一区制服丝袜| 亚洲桃色在线一区| 快she精品国产999| 国产精品日韩精品| 亚洲日本一区二区三区| 欧美在线免费视屏| 欧美理论在线| 国产一区二区视频在线观看| 亚洲精选一区二区| 久久久久看片| 国产精品久久久久久av福利软件| 亚洲第一黄网| 欧美一区二区三区在线观看视频| 欧美激情在线狂野欧美精品| 黄色一区三区| 午夜精品久久久久久久| 欧美精品一区二区久久婷婷| 国内成+人亚洲+欧美+综合在线| 在线视频精品一| 欧美不卡激情三级在线观看| 国产视频一区三区| 亚洲图中文字幕| 欧美激情视频免费观看| 国内精品久久久久国产盗摄免费观看完整版 | 日韩网站免费观看| 久久久久天天天天| 国产乱人伦精品一区二区| 99re6热只有精品免费观看 | 国产色综合久久| 中日韩午夜理伦电影免费| 美女脱光内衣内裤视频久久影院| 国产欧美日韩另类视频免费观看| 一区二区精品国产| 国产视频精品网| 亚洲网友自拍| 欧美日韩网站| 亚洲美女在线国产| 欧美国产精品v| 在线观看日韩一区| 久久久噜噜噜久噜久久| 国产一区二区三区久久悠悠色av| 亚洲一区二区三区在线| 欧美日韩国产成人在线免费| 亚洲国产一区二区三区青草影视| 久久久噜噜噜久噜久久| 国产色视频一区| 欧美影院午夜播放| 国产女人精品视频| 午夜国产精品视频免费体验区| 国产精品mv在线观看| 在线视频你懂得一区二区三区| 欧美伦理在线观看| 亚洲精品网站在线播放gif| 欧美96在线丨欧| 亚洲激情第一页| 欧美成人午夜剧场免费观看| 亚洲高清在线观看| 美女久久网站| 最新国产乱人伦偷精品免费网站| 牛牛国产精品| 亚洲精品乱码久久久久久蜜桃91 | 亚洲国产成人在线播放| 美女被久久久| 亚洲精品乱码| 欧美日韩亚洲系列| 亚洲一区二区精品在线| 国产精品欧美久久| 亚洲欧美日本国产有色| 国产欧美日韩在线观看| 久久大综合网| 伊人婷婷久久| 欧美高清视频一区| 亚洲最新中文字幕| 欧美午夜欧美| 香蕉精品999视频一区二区 | 极品裸体白嫩激情啪啪国产精品| 久久久青草婷婷精品综合日韩| 在线观看一区视频| 欧美极品影院| 亚洲一区在线观看免费观看电影高清| 国产精品日韩精品欧美在线| 欧美在线视频观看免费网站| 一区在线免费| 欧美精品国产精品| 亚洲欧美另类在线观看| 国产在线视频不卡二| 免费看黄裸体一级大秀欧美| 亚洲毛片av| 国产精品乱码久久久久久| 午夜精品久久久久| 亚洲电影视频在线| 欧美日韩精品国产| 亚洲欧美一区二区激情| 红桃视频亚洲| 欧美激情在线| 亚洲免费小视频| 在线免费观看视频一区| 欧美丝袜一区二区| 久久大综合网| 亚洲精品一区二区在线| 国产精品观看| 久热精品在线视频| 99精品久久久| 国产一区二区你懂的| 欧美国产91| 午夜在线不卡| 亚洲国产天堂久久国产91| 欧美午夜电影在线观看| 久久久国产精品一区| 日韩天天综合| 国产一区二区三区不卡在线观看| 嫩草影视亚洲| 欧美一区二区三区另类| 亚洲欧洲一区二区天堂久久| 国产精品中文字幕在线观看| 蜜臀久久99精品久久久久久9| 亚洲特色特黄| 亚洲国产另类久久精品| 国产乱码精品一区二区三| 奶水喷射视频一区| 亚洲欧美在线免费观看| 亚洲黄色影片| 国产视频一区在线观看| 欧美日韩激情网| 久久人人爽国产| 亚洲欧美国产高清va在线播| 91久久久亚洲精品| 国产婷婷一区二区| 夜夜嗨av一区二区三区网页| 国产日韩欧美综合一区| 欧美日韩国产高清| 久久夜色撩人精品| 欧美一区二区三区视频在线 | 欧美在线视频日韩| 亚洲午夜久久久| 91久久久亚洲精品| 伊人久久亚洲热| 国产欧美视频一区二区三区| 欧美高清不卡| 久久精品日产第一区二区三区 | 欧美一区二区三区视频免费播放| 亚洲欧洲一区二区在线播放| 国产亚洲免费的视频看| 国产精品高清在线| 欧美日本簧片| 欧美xxxx在线观看| 久久久久久国产精品mv| 香蕉久久国产| 亚洲视频免费| 亚洲最新在线视频| 亚洲破处大片| 亚洲第一区在线| 狠狠爱www人成狠狠爱综合网| 国产精品久久久久久久久免费樱桃 | 亚洲人成人77777线观看| 国产一区二区三区在线播放免费观看| 国产精品久99| 欧美视频在线一区二区三区| 欧美国产精品| 欧美成人一区二免费视频软件| 久久影院午夜论| 久久久之久亚州精品露出| 欧美一区二视频在线免费观看| 亚洲永久精品大片| 亚洲深夜福利视频| 制服丝袜亚洲播放| 一本色道久久综合狠狠躁篇怎么玩 | 国产在线乱码一区二区三区| 国产精品视屏| 国产精品盗摄久久久| 欧美视频一区二区三区…| 欧美日韩另类丝袜其他| 欧美日本免费| 欧美日韩免费观看中文| 欧美精品一区二区蜜臀亚洲| 欧美精品99| 欧美精品在线观看一区二区| 欧美激情视频给我| 欧美日本精品| 国产精品www994| 国产精品人人做人人爽| 国产精品外国| 国产亚洲aⅴaaaaaa毛片|