精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人免费高清在线播放| 久久亚洲春色中文字幕| 欧美中文在线字幕| 爱情岛论坛亚洲首页入口章节| 亚洲女人毛茸茸高潮| 色www永久免费视频首页在线| 最新日韩欧美| 中文字幕中文在线不卡住| 色综合色综合网色综合| www.四虎成人| 精品国产区一区二| 日韩啪啪电影网| 福利一区福利二区微拍刺激| 成人免费观看a| 成人午夜福利一区二区| 欧美理论片在线播放| 久久精品国产一区二区三 | 久久久久久久久久久亚洲| 亚洲一级免费在线观看| 欧美白人做受xxxx视频| 亚洲视频中文| 日韩三级视频在线看| 天堂精品一区二区三区| 五月婷婷中文字幕| 国产精品极品国产中出| 亚洲视频在线观看三级| 国产精品久久久久久久9999| 国产精品无码一区二区三区免费 | 亚洲日本在线视频观看| 欧美精品亚洲| 亚洲免费在线观看av| 999久久久精品国产| 欧美日产国产精品| 色播亚洲婷婷| 亚州精品国产精品乱码不99按摩| 日韩香蕉视频| 欧美精品一区二区三区久久久 | 在线成人h网| 亚洲第一级黄色片| 久久久久久免费看| 亚洲AV无码成人片在线观看| 欧美日韩国产高清| 精品日韩一区二区三区| 男女视频网站在线观看| 五月天激情婷婷| 国产黄色精品网站| 久久久久久久久久久av| 国产美女高潮视频| 日韩一区二区三区精品| 亚洲一区视频在线观看视频| 成人羞羞视频免费| 黄网站免费在线| 欧美调教网站| 欧美日韩一级二级三级| 中文字幕一区二区中文字幕| 99久久精品国产色欲| 中文字幕一区二区av | 亚洲综合成人在线| 精品一区久久久久久| 中文字幕视频网| 日韩精品电影| 日韩在线欧美在线国产在线| 中文字幕avav| 性xxxxfreexxxxx欧美丶| 91麻豆精东视频| 国产精品久久久久久影视| 国产欧美一区二区三区在线观看视频 | 久久综合一区二区| 国产精品777| 中文字幕在线观看2018| 久久男人av| 欧美视频中文一区二区三区在线观看| 先锋影音男人资源| 国产 日韩 欧美 精品| 日韩制服丝袜先锋影音| 久久久91精品国产| 久久久亚洲av波多野结衣| 欧美综合影院| 亚洲v日本v欧美v久久精品| 亚洲一卡二卡区| 亚洲欧美日韩免费| 久久精品亚洲精品国产欧美kt∨ | 六月丁香婷婷激情| 69成人在线| 久久久久久久久一| 视频一区二区三区在线观看| 欧美成人三区| 91在线视频免费91| 亚洲综合色av| 久久久久久亚洲av无码专区| 欧美日韩国产探花| 韩国精品久久久999| 国产jizz18女人高潮| 天天影视欧美综合在线观看| 亚洲免费影视第一页| 男男受被啪到高潮自述| 成人一级视频| 日本韩国一区二区| 久久久久久人妻一区二区三区| 久久影院午夜精品| 亚洲线精品一区二区三区八戒| 18禁免费观看网站| 日韩国产大片| 亚洲国产一区二区三区在线观看| 99中文字幕在线| 日本综合视频| 91久久国产最好的精华液| 亚洲欧洲日本精品| 加勒比色老久久爱综合网| 国产香蕉一区二区三区在线视频 | 日韩网站在线免费观看| 性欧美1819sex性高清| 五月激情丁香一区二区三区| 91传媒免费视频| 日本激情视频在线观看| 中文字幕不卡在线播放| 蜜桃视频在线观看91| 熟妇人妻av无码一区二区三区| 粉嫩欧美一区二区三区高清影视| 91在线观看免费高清完整版在线观看| 中文字幕精品一区二区精| 免费精品视频| 欧美资源在线观看| 精品国产伦一区二区三区| 国产亚洲综合性久久久影院| 欧美日韩一区二区视频在线| 中文av资源在线| 日本久久精品电影| 中文字幕在线免费看线人| 雨宫琴音一区二区三区| 国产精品普通话| 日产精品久久久久久久性色| 91视频免费播放| 欧美少妇在线观看| 美女网站视频在线| 欧美狂野另类xxxxoooo| 久久久九九九热| 欧美日韩中文一区二区| 日韩中文字幕网站| 中文国语毛片高清视频| 美女精品在线| 国产精品视频中文字幕91| 无码人妻精品一区二区三区蜜桃91| 老司机亚洲精品| 成人在线观看视频网站| 国内在线精品| 最近中文字幕一区二区三区| www成人免费| 亚洲精品**中文毛片| 亚洲成色777777在线观看影院| 欧美日韩免费一区二区| 亚洲精品三级| 国产精品国模大尺度私拍| 日漫免费在线观看网站| 亚洲成人7777| 午夜宅男在线视频| 欧美在线观看视频一区| 欧美另类暴力丝袜| 国产www在线| 91蝌蚪porny九色| 欧美性大战久久久久xxx| 日韩三区视频| 久久国产精品电影| 久久综合色综合| 日本亚洲免费观看| 国产高清精品一区二区三区| 日本在线视频www鲁啊鲁| 欧美成人a视频| jizz国产免费| 精品在线你懂的| 国产在线播放一区二区| 午夜在线观看视频| 在线电影国产精品| 亚洲欧美一区二区三区四区五区| 国产成人精品亚洲午夜麻豆| 亚洲国产精品成人天堂| 亚洲人成网站77777在线观看| 日韩三级成人av网| 99久久亚洲精品日本无码| 成人av综合在线| 亚洲不卡中文字幕| 超碰最新在线| 精品视频一区 二区 三区| 极品蜜桃臀肥臀-x88av| 国产美女一区二区三区| 欧美日韩国产免费一区二区三区| 澳门av一区二区三区| 亚洲成人动漫在线播放| 免费的毛片视频| 成人精品免费网站| 久久国产色av免费观看| av日韩精品| 久久手机免费视频| 免费看日韩av| 夜夜嗨av一区二区三区中文字幕| 久久性爱视频网站| 你懂的一区二区| 91精品久久久久久久久| 你懂得在线网址| 制服丝袜亚洲播放| 国产一区第一页| 成人网在线播放| 欧美一级中文字幕| 精品中文字幕一区二区三区av| 97高清免费视频| 亚洲s色大片| 亚洲精品久久久久中文字幕欢迎你| 国产一二三av| 日本视频免费一区| 无码熟妇人妻av在线电影| 国产日韩一区二区三免费高清 | 9色在线视频| 欧美日韩中文字幕在线视频| 交换做爰国语对白| 久久久一二三| 男人天堂av片| 香港欧美日韩三级黄色一级电影网站| 国产精品日韩在线一区| 久久av色综合| 久久久精品999| 99视频在线观看地址| 亚洲精品成人久久电影| www.黄色av| 欧美日韩国产在线观看| 国产成人在线观看网站| 91欧美一区二区| 久久久精品视频国产| 热久久免费视频| 任你操这里只有精品| 夜夜嗨一区二区| 东北少妇不带套对白| 亚洲在线久久| 精品一区二区成人免费视频 | 精品伦精品一区二区三区视频密桃| 99久久综合色| 国产精品免费观看久久| 在线免费高清一区二区三区| 99精品一区二区三区的区别| 日韩综合一区| 亚洲一区二区免费视频软件合集| 蜜臀91精品国产高清在线观看| 精品国产区在线| 鲁大师精品99久久久| 国产精品v欧美精品∨日韩| 精品欧美视频| 午夜免费日韩视频| 国产丝袜精品丝袜| 亚洲欧美在线一区二区| 在线视频1卡二卡三卡| 亚洲免费在线播放| 日韩av手机在线播放| 首页欧美精品中文字幕| 欧美精品99久久| 99精品美女| 亚洲一一在线| 久久久久久久久99精品大| 宅男一区二区三区| 欧美一区激情| 日韩精品视频在线观看视频| 国语对白精品一区二区| 久久久亚洲国产精品| 亚洲一区二区免费看| 在线无限看免费粉色视频| 日韩毛片视频| 日本美女爱爱视频| 激情久久久久| 国产99久久九九精品无码| 久久精品官网| 在线观看国产一级片| 久久99国产精品免费| 可以看的av网址| av中文字幕亚洲| 国产精品亚洲无码| 国产精品短视频| 国产一级片久久| 欧美性猛交xxxx免费看漫画| 波多野结衣毛片| 欧美一区二区三区思思人| 手机在线看片1024| 欧美日韩亚洲丝袜制服| 国产999久久久| 日韩电影第一页| 亚洲成a人v欧美综合天堂麻豆| 精品中文字幕在线| 成人免费看黄| 国内精品久久久久久影视8| 午夜免费播放观看在线视频| 欧美成人合集magnet| 中文在线а√在线8| 成人国产在线视频| 欧美日韩破处| 最新精品视频| 亚洲综合精品四区| 色男人天堂av| 久久综合一区二区| 欧美成人精品欧美一| 色婷婷综合久久久中文字幕| 国产午夜福利片| 欧美性生活大片视频| 韩国av电影在线观看| 亚洲偷欧美偷国内偷| 免费毛片在线看片免费丝瓜视频| 国产97在线|亚洲| av资源亚洲| 亚洲一区二区三区777| 深爱激情综合网| 97在线国产视频| 国产伦精一区二区三区| 日本不卡一区二区在线观看| 日韩成人精品在线观看| 亚洲美女精品视频| 福利一区二区在线| 日本猛少妇色xxxxx免费网站| 亚洲第一成人在线| 国产精品一级视频| 日韩一区二区三区视频在线 | 中文字幕av网站| 日韩av有码在线| 欧美色图天堂| 91九色蝌蚪嫩草| 一区视频网站| 精品高清视频| 中文字幕一区二区三区欧美日韩| 精品视频无码一区二区三区| 99精品欧美一区| 日本免费在线播放| 日韩一区二区在线看片| 欧美成人视屏| 成人黄色中文字幕| 日本高清免费电影一区| 欧美日韩一区二区在线免费观看 | 日韩无一区二区| 蜜桃视频在线观看www社区| 国产极品精品在线观看| 国产欧美日韩精品高清二区综合区| 欧美男人的天堂| 亚洲精品裸体| 大地资源二中文在线影视观看| 亚洲图片欧美综合| 性色av蜜臀av| 欧美国产日韩二区| aaa国产精品| 日韩精品在线视频免费观看| 国产成人av一区二区三区在线 | 国产美女一区| 亚洲一区二区乱码| 国产精品三级av在线播放| 99视频只有精品| 色综合中文字幕国产| 五月天久久久久久| 亲爱的老师9免费观看全集电视剧| 精品国产一区二区三区不卡蜜臂| 人人干视频在线| 99re热视频这里只精品| 久久精品国产成人av| 亚洲欧美精品suv| 韩国精品主播一区二区在线观看| 日韩中文字幕一区| 欧美三级午夜理伦三级中文幕| 国产精品中文久久久久久| 亚洲精品国产精华液| 亚洲天堂五月天| 中文字幕亚洲欧美日韩2019| av手机在线观看| 成人网在线观看| 一区二区日韩欧美| 亚洲欧美综合视频| 精品国产精品自拍| 黄色电影免费在线看| 国产精品视频网址| 欧美 日韩 国产 一区| 国产精品成人无码专区| 一本一道波多野结衣一区二区| porn视频在线观看| 91精品国产一区二区三区动漫| 99视频一区| 欧美自拍偷拍网| 日韩欧美中文一区二区| zzzwww在线看片免费| 91精品综合久久久久久五月天| 欧美激情综合色综合啪啪| 少妇激情一区二区三区视频| 色噜噜狠狠一区二区三区果冻| 精品51国产黑色丝袜高跟鞋| 国产91精品青草社区| 欧美不卡在线观看| 免费观看美女裸体网站| 欧美激情一区不卡| 天堂网av手机版| 中文字幕欧美日韩va免费视频| 久久av网站| 成人小视频在线看| 亚洲三级在线看| 日韩国产福利| 91老司机在线| 日韩精品成人一区二区在线| 久草免费新视频| 欧美xingq一区二区| 国产高清不卡| 久青草视频在线播放|