精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

控制頁面刷新范圍(OpenHarmony)

系統 OpenHarmony
根據業務需要,有時我們需要觸發單個組件的狀態更新,有時需要觸發部分或全部組件的狀態更新。那么如何控制組件狀態刷新的范圍呢?本例將為大家提供一種參考方案。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

場景說明

在實現頁面UI時,業務方需要根據業務邏輯動態更新組件的狀態,常見的如在手機桌面長按某個App的圖標時,圖標背景色、大小等會發生變化。根據業務需要,有時我們需要觸發單個組件的狀態更新,有時需要觸發部分或全部組件的狀態更新。那么如何控制組件狀態刷新的范圍呢?本例將為大家提供一種參考方案。

效果呈現

本例最終效果如下:

控制頁面刷新范圍(OpenHarmony)-開源基礎軟件社區

運行環境

本例基于以下環境開發,開發者也可以基于其他適配的版本進行開發:

  • IDE: DevEco Studio 3.1 Release
  • SDK: Ohos_sdk_public 3.2.12.5(API Version 9 Release)

實現思路

ArkUI可以通過頁面的狀態數據驅動UI的更新,其UI更新機制可以通過如下表達式來體現:

UI=f(state)

用戶構建了UI模型,其中參數state代表頁面組件的運行時狀態。當state改變時,UI作為返回結果,也將進行對應的改變刷新。f作為狀態管理機制,維護組件運行時的狀態變化所帶來的UI重新渲染。組件的狀態改變可通過狀態變量進行控制。

基于上述理論,如果要控制頁面的更新范圍,我們必須要:定義準確狀態變量,并控制狀態變量影響的組件范圍。

本例中包含8個APP圖標,其中涉及5種狀態變化,按照局部刷新和全局刷新可分為:

  • 局部刷新(單個卡片變化)
  • 點擊卡片,卡片背景色變為紅色。
  • 點擊卡片,卡片進行縮放。
  • 拖拽卡片,卡片位置變化。
  • 全局刷新(全部卡片變化)
  • 長按某個卡片,為所有卡片添加刪除圖標。
  • 點擊刪除圖標外的任意地方,刪除圖標消失。

所以處理思路為,控制局部刷新的狀態變量在子組件中定義,綁定子組件,控制全局刷新的狀態變量在父組件中進行定義,并由父組件傳遞給所有子組件。如下圖:

控制頁面刷新范圍(OpenHarmony)-開源基礎軟件社區

開發步驟

由于本例重點講解刷新區域的控制,所以開發步驟會著重講解相關實現,不相關的內容不做介紹,全量代碼可參考完整代碼章節。

創建APP卡片組件作為子組件,每個卡片包含文本和刪除圖標。
具體代碼如下:

@Component
export struct AppItem {
  ...
  build() {
    Stack({ alignContent: Alignment.TopEnd }) {
      Image($r('app.media.ic_public_close'))
        .height(30)
        .width(30)
        .zIndex(2)
        .offset({
          x: -12,
          y: 12
        })
      Text(this.data.title)
        .width(100)
        .height(100)
        .fontSize(16)
        .margin(10)
        .textAlign(TextAlign.Center)
        .borderRadius(10)
    }   
  }
}

創建父組件,并在父組件中引用子組件。
具體代碼如下:

@Entry
@Component
struct Sample {
  ...
  build() {
    Stack({ alignContent: Alignment.Bottom }) {
      Flex({ wrap: FlexWrap.Wrap }) {
        // 通過循環渲染加載所有子組件
        ForEach(this.items, (item: ItemProps, index: number) => {
          // 引用App卡片子組件
          AppItem({data: this.items[index]})
        }, (item: ItemProps) => item.id.toString())
      }
      .width('100%')
      .height('100%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#ffffff')
    .margin({ top:50 })
  }
}

由于卡片背景色變化、卡片縮放、卡片拖拽在觸發時都是針對單個卡片的狀態變化,所以在卡片子組件中定義相應的狀態變量,用來控制單個卡片的狀態變化。
本例中定義狀態變量“data”用來控制卡片拖拽時位置的刷新;定義狀態變量”downFlag“用來監聽卡片是否被按下,從而控制卡片背景色及縮放狀態的更新。
具體代碼如下:

@Component
export struct AppItem {
  // 定義狀態變量data,用來控制卡片被拖拽時位置的刷新
  @State data: ItemProps = {};
  // 定義狀態變量downFlag用來監聽卡片是否被按下,從而控制卡片背景色及縮放狀態的更新
  @State downFlag: boolean = false;
  ...
  build() {
    Stack({ alignContent: Alignment.TopEnd }) {
      Image($r('app.media.ic_public_close'))
            .height(30)
            .width(30)
            .zIndex(2)
            .offset({
              x: -12,
              y: 12
            })
      Text(this.data.title)
        .width(100)
        .height(100)
        .fontSize(16)
        .margin(10)
        .textAlign(TextAlign.Center)
        .borderRadius(10)
        // 根據狀態變量downFlag的變化,更新背景色
        .backgroundColor(this.downFlag ? '#EEA8AB' : '#86C7CC')
        // 背景色更新時添加屬性動畫
        .animation({
          duration: 500,
          curve: Curve.Friction
        })
        // 綁定onTouch事件,監聽卡片是否被按下,根據不同狀態改變downFlag的值
        .onTouch((event: TouchEvent) => {
          if (event.type == TouchType.Down) {
            this.downFlag = true
          } else if (event.type == TouchType.Up) { 
            this.downFlag = false
          }
        })
    }
    // 根據狀態變量downFlag的變化,控制卡片的縮放
    .scale(this.downFlag ? { x: 0.8, y: 0.8 } : { x: 1, y: 1 })
    // 通過狀態變量data的變化,控制卡片位置的更新
    .offset({
      x: this.data.offsetX,
      y: this.data.offsetY
    })
    // 拖動觸發該手勢事件
    .gesture(
      GestureGroup(GestureMode.Parallel,
        ...
        PanGesture(this.panOption)
          .onActionStart((event: GestureEvent) => {
            console.info('Pan start')
          })
          // 拖動卡片時,改變狀態變量data的值
          .onActionUpdate((event: GestureEvent) => {
            this.data.offsetX = this.data.positionX + event.offsetX
            this.data.offsetY = this.data.positionY + event.offsetY
          })
          .onActionEnd(() => {
            this.data.positionX = this.data.offsetX
            this.data.positionY = this.data.offsetY
            console.info('Pan end')
          })
      )
    )
  }
}

長按卡片,卡片右上角會出現刪除圖標。

由于所有卡片右上角都會出現刪除圖標,所以這里需要做全局的刷新。本例在父組件中定義狀態變量“deleteVisibility”,在調用子組件時,將其作為參數傳遞給所有卡片子組件,并且通過@Link裝飾器與子組件進行雙向綁定,從而可以控制所有卡片子組件中刪除圖標的更新。

父組件代碼:

@Entry
@Component
struct Sample {
  ...
  // 定義狀態變量deleteVisibility,控制App卡片上刪除圖標的更新
  @State deleteVisibility: boolean = false
  ...
  build() {
    Stack({ alignContent: Alignment.Bottom }) {
      Flex({ wrap: FlexWrap.Wrap }) {
        // 通過循環渲染加載所有子組件
        ForEach(this.items, (item: ItemProps, index: number) => {
          // 將狀態變量deleteVisibility傳遞給每一個子組件,從而deleteVisibility變化時可以觸發所有子組件的更新
          AppItem({ deleteVisibility: $deleteVisibility, data: this.items[index], onDeleteClick: this.delete })
        }, (item: ItemProps) => item.id.toString())
      }
      .width('100%')
      .height('100%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#ffffff')
    .margin({ top:50 })
    .onClick(() => {
      this.deleteVisibility = false
    })
  }

子組件代碼:

@Component
export struct AppItem {
  ...
  // 定義deleteVisibility狀態變量,并通過@Link裝飾器與父組件中的同名變量雙向綁定,該變量值發生變化時父子組件可雙向同步
  @Link deleteVisibility: boolean;
  ...
  build() {
    Stack({ alignContent: Alignment.TopEnd }) {
      // 通過deleteVisibility控制刪除圖標的隱藏和顯示,當deleteVisibility值為true時顯示,為false時隱藏
      if(this.deleteVisibility){
        Image($r('app.media.ic_public_close'))
          .height(30)
          .width(30)
          .zIndex(2)
          // 控制刪除圖標的顯隱
          .visibility(Visibility.Visible)
          .offset({
            x: -12,
            y: 12
          })
          .onClick(() => this.onDeleteClick(this.data.id))
      }else{
        Image($r('app.media.ic_public_close'))
          .height(30)
          .width(30)
          .zIndex(2)
          .visibility(Visibility.Hidden)
          .offset({
            x: -12,
            y: 12
          })
          .onClick(() => this.onDeleteClick(this.data.id))
      }
    ...
    .gesture(
      GestureGroup(GestureMode.Parallel,
        // 識別長按手勢
        LongPressGesture({ repeat: true })
          .onAction((event: GestureEvent) => {
            if (event.repeat) {
              // 長按時改變deleteVisibility的值為true,從而更新刪除圖標為顯示狀態
              this.deleteVisibility = true
            }
            console.info('LongPress onAction')
          }),
        ...
      )
    )
  }
}

完整代碼

本例完整代碼如下:
data.ets文件(數據模型文件)

// data.ets
// AppItem組件接口信息
export interface ItemProps {
  id?: number,
  title?: string,
  offsetX?: number, // X偏移量
  offsetY?: number, // Y偏移量
  positionX?: number, // 在X的位置
  positionY?: number, // 在Y的位置
}

// AppItem初始數據
export const initItemsData: ItemProps[] = [
  {
    id: 1,
    title: 'APP1',
    offsetX: 0,
    offsetY: 0,
    positionX: 0,
    positionY: 0
  },
  {
    id: 2,
    title: 'APP2',
    offsetX: 0,
    offsetY: 0,
    positionX: 0,
    positionY: 0
  },
  {
    id: 3,
    title: 'APP3',
    offsetX: 0,
    offsetY: 0,
    positionX: 0,
    positionY: 0
  },
  {
    id: 4,
    title: 'APP4',
    offsetX: 0,
    offsetY: 0,
    positionX: 0,
    positionY: 0
  },
  {
    id: 5,
    title: 'APP5',
    offsetX: 0,
    offsetY: 0,
    positionX: 0,
    positionY: 0
  },
  {
    id: 6,
    title: 'APP6',
    offsetX: 0,
    offsetY: 0,
    positionX: 0,
    positionY: 0
  },
  {
    id: 7,
    title: 'APP7',
    offsetX: 0,
    offsetY: 0,
    positionX: 0,
    positionY: 0
  },
  {
    id: 8,
    title: 'APP8',
    offsetX: 0,
    offsetY: 0,
    positionX: 0,
    positionY: 0
  },
]

AppItem.ets文件(卡片子組件)

// AppItem.ets
import { ItemProps } from '../model/data';

@Component
export struct AppItem {
  // 定義狀態變量data,用來控制卡片被拖拽時位置的刷新
  @State data: ItemProps = {};
  // 定義狀態變量downFlag用來監聽卡片是否被按下,從而控制卡片背景色及縮放狀態的更新
  @State downFlag: boolean = false;
  // 定義deleteVisibility狀態變量,并通過@Link裝飾器與父組件中的同名變量雙向綁定,該變量值發生變化時父子組件可雙向同步
  @Link deleteVisibility: boolean;

  private onDeleteClick: (id: number) => void;
  private panOption: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.All });
  build() {
    Stack({ alignContent: Alignment.TopEnd }) {
      // 通過deleteVisibility控制刪除圖標的隱藏和顯示,當deleteVisibility值為true時顯示,為false時隱藏
      if(this.deleteVisibility){
        Image($r('app.media.ic_public_close'))
          .height(30)
          .width(30)
          .zIndex(2)
          // 控制刪除圖標的顯隱
          .visibility(Visibility.Visible)
          .offset({
            x: -12,
            y: 12
          })
          .onClick(() => this.onDeleteClick(this.data.id))
      }else{
        Image($r('app.media.ic_public_close'))
          .height(30)
          .width(30)
          .zIndex(2)
          .visibility(Visibility.Hidden)
          .offset({
            x: -12,
            y: 12
          })
          .onClick(() => this.onDeleteClick(this.data.id))
      }

      Text(this.data.title)
        .width(100)
        .height(100)
        .fontSize(16)
        .margin(10)
        .textAlign(TextAlign.Center)
        .borderRadius(10)
        // 根據狀態變量downFlag的變化,更新背景色
        .backgroundColor(this.downFlag ? '#EEA8AB' : '#86C7CC')
        // 背景色更新時添加屬性動畫
        .animation({
          duration: 500,
          curve: Curve.Friction
        })
        // 綁定onTouch事件,監聽卡片是否被按下,根據不同狀態改變downFlag的值
        .onTouch((event: TouchEvent) => {
          if (event.type == TouchType.Down) {
            this.downFlag = true
          } else if (event.type == TouchType.Up) { // 手指抬起
            this.downFlag = false
          }
        })
    }
    // 根據狀態變量downFlag的變化,控制卡片的縮放
    .scale(this.downFlag ? { x: 0.8, y: 0.8 } : { x: 1, y: 1 })
    // 通過狀態變量data的變化,控制卡片位置的更新
    .offset({
      x: this.data.offsetX,
      y: this.data.offsetY
    })
    // 拖動觸發該手勢事件
    .gesture(
      GestureGroup(GestureMode.Parallel,
        // 識別長按手勢
        LongPressGesture({ repeat: true })
          .onAction((event: GestureEvent) => {
            if (event.repeat) {
              // 長按時改變deleteVisibility的值為true,從而更新刪除圖標為顯示狀態
              this.deleteVisibility = true
            }
            console.info('LongPress onAction')
          }),
        PanGesture(this.panOption)
          .onActionStart((event: GestureEvent) => {
            console.info('Pan start')
          })
          // 拖動卡片時,改變狀態變量data的值
          .onActionUpdate((event: GestureEvent) => {
            this.data.offsetX = this.data.positionX + event.offsetX
            this.data.offsetY = this.data.positionY + event.offsetY
          })
          .onActionEnd(() => {
            this.data.positionX = this.data.offsetX
            this.data.positionY = this.data.offsetY
            console.info('Pan end')
          })
      )
    )
  }
}

Index.ets文件(父組件)

// Index.ets
import { AppItem } from '../components/MyItem';
import { initItemsData } from '../model/data';
import { ItemProps } from '../model/data';

@Entry
@Component
struct Sample {
  @State items: ItemProps[] = [];
  // 定義狀態變量deleteVisibility,控制App卡片上刪除圖標的更新
  @State deleteVisibility: boolean = false

  // 刪除指定id組件
  private delete = (id: number) => {
    const index = this.items.findIndex(item => item.id === id);
    this.items.splice(index, 1);
  }

  // 生命周期函數:組件即將出現時調用
  aboutToAppear() {
    this.items = [...initItemsData];
  }

  build() {
    Stack({ alignContent: Alignment.Bottom }) {
      Flex({ wrap: FlexWrap.Wrap }) {
        // 通過循環渲染加載所有子組件
        ForEach(this.items, (item: ItemProps, index: number) => {
          // 將狀態變量deleteVisibility傳遞給每一個子組件,從而deleteVisibility變化時可以觸發所有子組件的更新
          AppItem({ deleteVisibility: $deleteVisibility, data: this.items[index], onDeleteClick: this.delete })
        }, (item: ItemProps) => item.id.toString())
      }
      .width('100%')
      .height('100%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#ffffff')
    .margin({ top:50 })
    .onClick(() => {
      // 點擊組件,deleteVisibility值變為false,從而隱藏所有卡片的刪除圖標
      this.deleteVisibility = false
    })
  }
}

總結

刷新范圍一般通過狀態變量進行控制,需要厘清狀態變量影響的范圍,從而當狀態變量發生改變時可同步刷新相關的UI區域。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2021-03-12 16:25:17

技巧vue頁面刷新

2012-05-22 11:15:37

jQuery

2023-09-14 15:49:42

PWM鴻蒙

2023-09-06 15:35:14

2012-08-14 14:00:21

JavaScript

2017-10-17 15:40:25

javascript刷新頁面

2023-08-07 15:23:28

鴻蒙首次啟動申請授權

2015-03-26 13:14:53

javascriptjs callback實現調用

2015-05-13 09:36:18

js模擬手機下拉刷新

2009-07-31 08:56:59

ASP.NET頁面刷新

2018-07-16 15:17:49

2023-08-09 14:43:42

應用開發ArkTS

2023-07-31 17:35:31

ArkTS鴻蒙

2024-11-26 11:59:06

2022-06-01 22:35:25

滑桿組件鴻蒙

2022-01-07 09:56:16

鴻蒙HarmonyOS應用

2022-08-05 19:37:59

鴻蒙Api框架

2023-09-13 15:33:57

I2C鴻蒙

2012-03-02 09:37:53

Ajax

2023-08-04 15:00:43

ArkTS語言鴻蒙
點贊
收藏

51CTO技術棧公眾號

欧美极品少妇xxxxⅹ高跟鞋| 欧美私人啪啪vps| 在线观看亚洲a| 亚洲国产日韩欧美| www.久久成人| 玖玖玖国产精品| 久久最新资源网| 亚洲成人网在线播放| 95精品视频| 色天天综合色天天久久| 午夜久久久久久久久久久| 天堂视频中文在线| 麻豆freexxxx性91精品| 午夜精品久久17c| 在线观看天堂av| 国产三级精品三级在线观看国产| 欧美系列在线观看| 亚洲国产成人精品无码区99| www 日韩| 波多野结衣中文字幕一区二区三区| 国产精品免费电影| 久草国产精品视频| 大尺度做爰床戏呻吟舒畅| 成人日韩欧美| 国产亚洲一区二区三区| 国产精品一 二 三| 国产精品女同一区二区| 久久国产日韩| 韩国精品久久久999| www.5588.com毛片| 欧美日韩伦理| 日韩高清a**址| av天堂一区二区| 国产精品美女久久久久人| 色婷婷av一区二区三区之一色屋| 成人短视频在线观看免费| 午夜免费视频在线国产| 久久久蜜桃精品| 国产一区二区久久久| 精品免费久久久| 国产在线看一区| 国产精品视频男人的天堂| 无码人妻熟妇av又粗又大| 在线精品在线| 高清一区二区三区日本久| 欧美人妻精品一区二区免费看| 日韩在线中文| 久久精品成人动漫| 久久综合伊人77777| 免费av观看网址| 久久亚洲资源| 亚洲国产成人91porn| 久久久久久久久久久综合| 含羞草www国产在线视频| 亚洲婷婷综合久久一本伊一区| 日韩av电影免费播放| 黄网在线观看| 国产欧美日韩在线看| 日本在线播放不卡| h网站视频在线观看| 亚洲国产精品v| 一区不卡字幕| 羞羞的视频在线观看| 亚洲综合无码一区二区| 国产男女免费视频| 成人av免费电影网站| 色噜噜狠狠成人中文综合| 九色91popny| 成人国产激情| 宅男噜噜噜66一区二区66| 日韩欧美中文视频| 一区二区亚洲视频| 日韩电影视频免费| 午夜时刻免费入口| 亚洲成人精品| 午夜精品久久17c| 91精品国产乱码久久久久久久久 | 欧美视频在线观看网站| 韩国精品一区| 欧美色成人综合| 日本一二三区在线| 欧美人妖在线观看| 一区二区三区四区视频| 欧美精品久久久久久久久46p| 欧美日韩三级电影在线| 91精品国产电影| 中文字幕一区二区三区四区免费看 | a天堂中文在线观看| 白白色亚洲国产精品| 色一情一区二区三区四区| 91香蕉在线观看| 欧美视频不卡中文| 日韩视频在线观看一区二区三区| 粉嫩一区二区三区四区公司1| 亚洲少妇激情视频| 国产盗摄x88av| 天堂一区二区在线| 欧美一区二区三区在| 亚洲在线免费看| 无套内谢的新婚少妇国语播放| 国产清纯白嫩初高生在线观看91| 女同性恋一区二区| 欧美人与性动交xxⅹxx| 欧美成人vr18sexvr| 91视频在线网站| 国产精品激情| 国产精品亚洲片夜色在线| 黄色片一区二区| 日本一区二区三区高清不卡| 国产精品久久久久9999爆乳| 日韩欧美精品电影| 精品国产91亚洲一区二区三区婷婷| 日韩福利在线视频| 亚洲在线黄色| 国产成人精品免费视频大全最热 | 一级黄色大毛片| 97精品电影院| 成人区一区二区| 羞羞视频在线观看一区二区| 精品亚洲国产成av人片传媒 | 91天堂在线观看| 熟女少妇a性色生活片毛片| 中日韩高清电影网| 欧美色大人视频| 最新中文字幕视频| 亚洲大胆av| 91在线在线观看| 午夜毛片在线| 欧美日精品一区视频| 久久久久久久久久久久| 国产精品日本欧美一区二区三区| 91视频最新| 成人毛片av在线| 91成人看片片| 免费观看av网站| 国产精品综合色区在线观看| 国产视频在线观看一区| 免费不卡av| 日韩免费观看高清完整版 | 亚洲成av人影院在线观看网| 亚洲色图欧美自拍| 午夜av一区| 国产欧美日韩视频| 日韩伦理在线观看| 欧美日韩精品二区第二页| 性の欲びの女javhd| 首页综合国产亚洲丝袜| 欧美色图亚洲自拍| 成人全视频免费观看在线看| 正在播放国产一区| 国产精品高潮呻吟久久av无限| 精品无码av在线| 国产成人免费视频网站高清观看视频| 法国空姐在线观看免费| 日韩精品视频中文字幕| 欧美另类xxx| 成人av一区二区三区在线观看| 亚洲精品美腿丝袜| 岛国精品一区二区三区| 99精品视频免费| 欧美大香线蕉线伊人久久| 丝袜美腿一区| 中文字幕国产亚洲2019| a网站在线观看| 亚洲一区二区不卡免费| 黄色国产在线观看| 日韩国产精品91| 9l视频自拍9l视频自拍| 国产精品欧美大片| 欧美在线xxx| av资源种子在线观看| 欧美日韩国产高清一区二区三区| 午夜激情视频在线播放| 国产高清在线精品| 国产成人精品视频免费看| 国产精品欧美日韩一区| 国产精品日韩在线播放| 亚洲综合图区| 日韩精品亚洲视频| 色婷婷久久综合中文久久蜜桃av| 日韩一区欧美一区| 久久午夜夜伦鲁鲁片| 日韩中文字幕不卡| 男人天堂网站在线| 奇米777国产一区国产二区| 国产精品色视频| 日本资源在线| 亚洲性日韩精品一区二区| av高清一区二区| 91福利社在线观看| 三级影片在线看| 日色在线视频| 色视频一区二区| 青娱乐免费在线视频| 久久久综合激的五月天| 日本高清免费在线视频| 免费精品视频| 51xx午夜影福利| 欧洲福利电影| 激情视频一区二区| 91国产一区| 日韩美女在线看| 精品日韩av| 色99之美女主播在线视频| 色呦呦免费观看| 欧美一区二区在线看| 日本熟女毛茸茸| 一区2区3区在线看| 国产中文av在线| av一区二区三区| 午夜免费视频网站| 秋霞午夜鲁丝一区二区老狼| 国产在线播放观看| 欧美在线91| 亚洲精品一区二区三区av| 日韩福利视频一区| 999在线免费观看视频| www.久久.com| 日本久久久久久| 密臀av在线播放| 欧美国产精品va在线观看| 麻豆网站视频在线观看| 一本大道亚洲视频| 日本视频在线观看一区二区三区| 日韩手机在线导航| 国产又爽又黄免费软件| 亚洲区欧洲区| 一区二区三区高清国产| 色综合久久网女同蕾丝边| 精品美女一区二区| 国产成人精品av在线观| 欧美色大人视频| 国产精品午夜一区二区| 日韩欧美国产成人| 欧美一级视频免费观看| 亚洲va国产va欧美va观看| 久久免费播放视频| 夜夜操天天操亚洲| 精品无码久久久久| 亚洲一区二区在线播放相泽| 九九热视频精品| 亚洲午夜久久久久久久久久久| 亚洲欧美一区二区三区四区五区| 亚洲视频一区在线观看| 欧美一级片在线视频| 亚洲三级久久久| tube国产麻豆| 一区二区三区在线视频免费| 成人黄色短视频| 亚洲视频一区二区免费在线观看| 日韩一卡二卡在线观看| 1区2区3区欧美| 九九热最新地址| 一区二区免费在线播放| 国产无码精品一区二区| 天天色综合成人网| 日韩中文字幕在线观看视频| 色综合一个色综合亚洲| 成人毛片一区二区三区| 欧美日韩日本视频| 国产精品一级二级| 日韩欧美高清在线| 亚洲欧美日韩精品久久久| 99亚洲伊人久久精品影院| 国产精品欧美激情| 国产亚洲高清一区| 成人动漫视频在线观看完整版| 久久久久久久久久久久久久久久久久久久| 国产精品香蕉视屏| 国产欧美日韩精品一区二区三区| 日韩精品一区二区三区外面| 91精品国产91久久综合| 久久久亚洲国产精品| 久久av最新网址| 亚洲精品第三页| 成人免费的视频| 日本xxxxxxxxx18| 亚洲视频一区在线观看| 中文字幕一区二区三区手机版| 日韩欧美a级成人黄色| 在线视频免费观看一区| 日韩三级中文字幕| 欧美女v视频| 久久国产精品久久精品| 国产在线精彩视频| 国产日本欧美一区二区三区| ady日本映画久久精品一区二区| 久久久久久艹| 久久久人成影片免费观看| 亚洲国产精品无码观看久久| 日本不卡免费在线视频| 亚洲精品久久一区二区三区777 | 欧美精品日韩精品| 天堂av资源在线| 日韩少妇与小伙激情| 爱啪啪综合导航| 成人写真视频福利网| 亚洲资源网你懂的| 最新av网址在线观看| 中文字幕人成人乱码亚洲电影| 91精品久久久久久久久99蜜臂| 亚洲 欧美 激情 另类| 久久中文字幕在线视频| 自拍网站在线观看| 91蜜桃网站免费观看| 欧美在线电影| 免费看一级大黄情大片| 国产精品主播直播| 调教驯服丰满美艳麻麻在线视频| 亚洲午夜激情av| 999av视频| www.欧美精品一二三区| 日本欧美日韩| 国产在线欧美日韩| 欧美成人国产| 蜜臀一区二区三区精品免费视频 | 国产综合色一区二区三区| 99久久99热这里只有精品| 国产精品动漫网站| 成人av网在线| 免费毛片在线播放免费| 91精品国产91久久久久久一区二区 | 日韩经典一区二区| 女同性恋一区二区三区| 亚洲乱码日产精品bd| 亚洲网站在线免费观看| 亚洲最新中文字幕| av综合电影网站| 国产一区不卡在线观看| 极品中文字幕一区| 俄罗斯黄色录像| 亚洲综合一区二区| xxxwww在线观看| 欧美另类极品videosbest最新版本 | 96国产粉嫩美女| 91精品国产自产在线观看永久∴| 一区二区三区网址| 国产精品国产馆在线真实露脸| 免费在线不卡av| 中文字幕国产精品久久| 国产精品99| 国产日本欧美在线| 国产老女人精品毛片久久| 91麻豆精品成人一区二区| 在线播放91灌醉迷j高跟美女| 日韩免费网站| 亚洲一区二区在线| 国产精品九九| 天堂久久久久久| 色综合色狠狠天天综合色| 精品99又大又爽又硬少妇毛片 | 久久久久在线视频| 亚洲精品日韩欧美| 国产精品高清乱码在线观看| 日韩激情久久| 美国毛片一区二区| 在线免费观看亚洲视频| 欧美一区二区性放荡片| 人妖欧美1区| 精品国产乱码久久久久| 久久久久国产精品一区二区| 免费一级黄色录像| 欧美一区二区三区四区久久| 免费在线看电影| 欧美高清性xxxxhd| 美女国产一区二区| 永久免费看黄网站| 日韩成人黄色av| av成人免费看| 97免费视频观看| 国产欧美日韩在线| a毛片在线免费观看| 97国产精品久久| 青青草成人影院| 日本在线视频播放| 欧美日韩综合视频| 嫩草香蕉在线91一二三区| y111111国产精品久久婷婷| 亚洲欧美日本视频在线观看| 亚洲激情图片网| 亚洲精品一线二线三线无人区| 色是在线视频| 99热这里只有精品7| 不卡在线观看av| 日韩精选在线观看| 欧美福利小视频| 国产一区不卡| 久久久高清视频| 欧美在线色视频| wwwwxxxx在线观看| 欧美日韩中文国产一区发布| 韩国欧美国产1区| 天堂中文字幕在线观看| 久久夜精品va视频免费观看| 欧美福利在线播放网址导航| 中文字幕在线综合| 午夜精品久久久久| 成人短视频在线| 日产精品一线二线三线芒果| 国产成人av一区二区三区在线|