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

太絲滑了!了解一下原生的視圖轉換動畫 View Transitions API

開發 前端
Android 里一般稱之為共享元素(shareElement)動畫,也就是動畫前后有一個(或多個)相同的元素,起到前后過渡的效果,可以很清楚的看到元素的變化過程,而并不是簡單的消失和出現。

在原生 APP 中,我們經常會看到那種絲滑又舒適的頁面切換動畫,比如這樣的

Android 里一般稱之為共享元素(shareElement)動畫,也就是動畫前后有一個(或多個)相同的元素,起到前后過渡的效果,可以很清楚的看到元素的變化過程,而并不是簡單的消失和出現。

現在,web 中(Chrome 111+)也迎來了這樣一個特性,叫做視圖轉換動畫 View Transitions[1],又稱“轉場動畫”,也能很輕松的實現這類效果,一起了解一下吧!

一、快速認識 View Transition

先從一個簡單的例子來認識一下。

比如,下面有一個網格列表:

<div class="list" id="list">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
  <div class="item">10</div>
</div>

簡單修飾后如下:

然后我們實現一個簡單交互,點擊每個元素,元素就會被刪除。

list.addEventListener('click', function(ev){
  if (ev.target.className === 'item') {
    ev.target.remove()
  }
})

可以得到這樣的效果。

功能正常,就是有點太過生硬了。

現在輪到 View Transitions 出場了!我們只需要在改變狀態的地方添加document.startViewTransition,如下:

list.addEventListener('click', function(ev){
  if (ev.target.className === 'item') {
    document.startViewTransition(() => { // 開始視圖變換
      ev.target.remove()
    });
  }
})

當然為了兼容不支持的瀏覽器,可以做一下判斷。

list.addEventListener('click', function(ev){
  if (document.startViewTransition) { // 如果支持就視圖變換
    document.startViewTransition(() => { // 開始視圖變換
      ev.target.remove()
    });
  } else { // 不支持就執行原來的邏輯
    ev.target.remove()
  }
})

現在效果如下:

刪除前后現在有一個淡入淡出的效果了,也就是默認的動畫效果,我們可以把這個動畫時長設置大一點,如下:

::view-transition-old(root), /* 舊視圖*/
::view-transition-new(root) { /* 新視圖*/
  animation-duration: 2s;
}

這兩個偽元素我們后面再做介紹,先看效果:

是不是明顯感覺過渡變慢了許多?

但是這種動畫還是不夠舒服,是一種整體的變化,看不出刪除前后元素的位置變化。

接下來我們給每個元素指定一個標識,用來標記變化前后的狀態,為了方便控制,可以借助 CSS 變量。

<div class="list" id="list">
  <div class="item" style="--i: a1">1</div>
  <div class="item" style="--i: a2">2</div>
  <div class="item" style="--i: a3">3</div>
  <div class="item" style="--i: a4">4</div>
  <div class="item" style="--i: a5">5</div>
  <div class="item" style="--i: a6">6</div>
  <div class="item" style="--i: a7">7</div>
  <div class="item" style="--i: a8">8</div>
  <div class="item" style="--i: a9">9</div>
  <div class="item" style="--i: a10">10</div>
</div>

這里通過view-transition-name來設置名稱。

.item{
  view-transition-name: var(--i);
}

然后可以得到這樣的效果,每個元素在變化前后會自動找到之前的位置,并且平滑的移動過去,如下:

完整代碼可以查看

  • view-transition sort (juejin.cn)[2]
  • view-transition sort (codepen.io)[3]

是不是非常絲滑?這就是 View Transitions 的魅力!

二、View Transition 的核心概念

為啥僅僅加了一點點代碼就是實現了如此順暢的動畫呢?為啥瀏覽器可以知道前后的元素位置關系呢?這里簡單介紹一下變化原理。

整個 JS 部分只有一行核心代碼,也就是document.startViewTransition,表示開始視圖變換。

document.startViewTransition(() => {
  // 變化操作
});

整個過程包括 3 部分

  • 調用document.startViewTransition,瀏覽器會捕捉當前頁面的狀態,類似于實時截圖,或者“快照”。
  • 執行實際的 dom 變化,再次記錄變化后的頁面狀態(截圖)。
  • 觸發兩者的過渡動畫,包括透明度、位移等變化,也可以自定義 CSS 動畫。

下面是一個示意圖:

在動畫執行的過程中,還會在頁面根節點自動創建以下偽元素。

::view-transition
└─ ::view-transition-group(root)
   └─ ::view-transition-image-pair(root)
      ├─ ::view-transition-old(root)
      └─ ::view-transition-new(root)

下面是控制臺的截圖。

其中,::view-transition-old表示「舊視圖」的狀態,也就是變化之前的截圖,::view-transition-new表示「新視圖」的狀態,也就是變化之后的截圖。

默認情況下,整個頁面root都會作為一個狀態,也就是上面的::view-transition-group(root),在切換前后會執行淡入淡出動畫,如下:

:root::view-transition-new(root) {
  animation-name: -ua-view-transition-fade-in; /*淡入動畫*/
}
:root::view-transition-old(root) {
  animation-name: -ua-view-transition-fade-out; /*淡出動畫*/
}

這也是為什么在使用了document.startViewTransition后整個頁面會有淡入淡出的效果了。

為了讓每個元素都有自己的過渡狀態,這里需要給每個元素都指定名稱。

.item{
  view-transition-name: item-1;
}

這樣指定名稱后,每個名稱都會創建一個::view-transition-group,表示獨立的分組。

這樣在變化前后view-transition-name相同的部分就會一一自動執行過渡動畫了,以第4、5個元素為例(在3刪除以后)。

最后就會得到這樣的效果。

核心概念就這些了,下面再來看幾個例子。

三、不同元素之間的過渡

視圖變化其實和元素是否相同沒有關聯,有關聯的只有view-transition-name,瀏覽器是根據view-transition-name尋找的,也就是相同名稱的元素在前后會有一個過渡動畫。

比如下面這樣一個例子。

每個按鈕在打開彈窗時,都可以清楚的看到彈窗是從哪里出現的,如何實現這樣的效果呢?

從本質上看,其實就是「按鈕到彈窗的視圖變換」,按照前面講到的,可能會想到給前后加上相同的view-transition-name,下面是HTML結構。

<div class="bnt-group" id="group">
  <button>按鈕1</button>
  <button>按鈕2</button>
  <button>按鈕3</button>
</div>
<dialog id="dialog">
  <form method="dialog">
    我是彈窗
    <button>關閉</button>
  </form>
</dialog>

嘗試一下。

button,dialog{
  view-transition-name: dialog;
}

然后添加點擊打開彈窗事件。

group.addEventListener('click', function(ev){
  if (ev.target.tagName === 'BUTTON') {
    if (document.startViewTransition) {
      document.startViewTransition(() => {
        dialog.showModal()
      });
    } else {
      dialog.showModal()
    }
  }
})

這樣會有什么問題嗎?運行如下:

很明顯報錯了,意思就是一個頁面中不能有相同的view-transition-name。嚴格來講,是「不能同時出現」,如果其他元素都是隱藏的,只有一個是顯示的,也沒有問題。其實仔細想一下,也很好理解,如果同時有兩個相同的名稱,并且都可見,最后變換的時候該以哪一個為準呢?

所以,在這種情況下,正確的做法應該是動態設置view-transition-name,比如默認不給按鈕添加名稱,只有在點擊的時候才添加,然后在變換結束之后再移除按鈕的view-transition-name,實現如下:

group.addEventListener('click', function(ev){
  if (ev.target.tagName === 'BUTTON') {
    ev.target.style.viewTransitionName = 'dialog' // 動態添加 viewTransitionName
    if (document.startViewTransition) {
      document.startViewTransition(() => {
        ev.target.style.viewTransitionName = '' // 結束后移除 viewTransitionName
        dialog.showModal()
      });
    } else {
      dialog.showModal()
    }
  }
})

這樣就實現了動態縮放的效果:

大致已經實現想要的效果,不過還有一個小問題,我們把速度放慢一點(把動畫時長設置長一點)。

可以清楚的看到,原本的按鈕先放大到了彈窗大小,然后逐漸消失。這個過程是我們不需要的,有沒有辦法去掉呢?

當然也是可以的!原本的按鈕其實就是舊視圖,也就是點擊之前的截圖,我們只需要將這個視圖隱藏起來就行了。

::view-transition-old(dialog) {
  display: none;
}

這樣就完美實現了從哪里點擊就從哪里打開的效果:

完整代碼可以查看:

  • view-transition-dialog (juejin.cn)[4]
  • view-transition-dialog (codepen.io)[5]

四、自定義過渡動畫

通過前面的例子可以看出,默認情況下,視圖轉換動畫是一種淡入淡出的動畫,然后還有如果位置、大小不同,也會平滑過渡。

除此之外,我們還可以手動指定過渡動畫。比如下面這個例子。

這是一個黑暗模式的簡易模型,實現也非常簡單,準備兩套主題,這里用color-scheme實現。

.dark{
  color-scheme: dark;
}

然后通過點擊動態給html切換dark類名。

btn.addEventListener('click', function(ev){
  document.documentElement.classList.toggle('dark')
})

這樣就得到了主題切換效果:

接著,我們添加視圖轉換動畫。

btn.addEventListener('click', function(ev){
  if (document.startViewTransition) {
    document.startViewTransition(() => {
      document.documentElement.classList.toggle('dark')
    });
  } else {
    document.documentElement.classList.toggle('dark')
  }
})

這樣就得到了一個默認的淡入淡出的切換效果(為了方便觀察,將動畫時長延長了)。

圖片

你可以把前后變化想象成是兩張截圖的變化,如果要實現點擊出現圓形裁剪動畫,其實就是在新視圖上執行一個裁剪動畫,由于是完全重疊的,所以看著像是一種穿透擴散的效果:

動畫很簡單,就是一個clip-path動畫。

@keyframes clip {
  from {
    clip-path: circle(0%);
  }
  to{
    clip-path: circle(100%);
  }
}

我們把這個動畫放在::view-transition-new中。

::view-transition-new(root) {
  /* mix-blend-mode: normal; */
  animation: clip .5s ease-in;
  /* animation-duration: 2s; */
}

效果如下:

是不是還有點奇怪?這是因為默認的一些樣式導致,包括原有的淡出效果,還有混合模式。

所以還需要去除這些影響。

::view-transition-old(root) {
  animation: none;
}
::view-transition-new(root) {
  mix-blend-mode: normal;
  animation: clip .5s ease-in;
}

當然你可以把鼠標點擊的位置傳遞到頁面根節點。

btn.addEventListener('click', function(ev){
  document.documentElement.style.setProperty('--x', ev.clientX + 'px')
  document.documentElement.style.setProperty('--y', ev.clientY + 'px')
  if (document.startViewTransition) {
    document.startViewTransition(() => {
      document.documentElement.classList.toggle('dark')
    });
  } else {
    document.documentElement.classList.toggle('dark')
  }
})

動畫里直接通過CSS 變量獲取。

@keyframes clip {
  from {
    clip-path: circle(0% at var(--x) var(--y));
  }
  to{
    clip-path: circle(100% at var(--x) var(--y));
  }
}

這樣就實現了完美的擴散切換效果:

完整代碼可以查看:

  • view transition theme change - (juejin.cn)[6]
  • view transition theme change (codepen.io)[7]

五、其他案例

找了幾個有趣的例子。

只要涉及到前后過渡變化的,都可以考慮用這個特性,例如下面的拖拽排序。

Android https://mp.weixin.qq.com/s/v8XwlqLAtCxxYG2FOvatFw。

https://codepen.io/argyleink/pen/rNQZbLr。

再比如這樣一個數字過渡動畫。

https://mp.weixin.qq.com/s/v8XwlqLAtCxxYG2FOvatFw

https://codepen.io/argyleink/pen/jOQKdeW

還有類似于 APP 的轉場動畫(多頁面跳轉)

https://simple-set-demos.glitch.me/6-expanding-image/。

五、總結和說明

總的來說,原生的視圖轉換動畫可以很輕松的實現兩種狀態的過渡,讓 web 也能實現媲美原生 APP 的動畫體驗,下面再來回顧一下整個變化過程:

  • 調用document.startViewTransition,瀏覽器會捕捉當前頁面的狀態,類似于實時截圖,或者“快照”。
  • 執行實際的 dom 變化,再次記錄變化后的頁面狀態(截圖)。
  • 觸發兩者的過渡動畫,包括透明度、位移等變化,也可以自定義 CSS 動畫。
  • 默認情況下是整個頁面的淡入淡出變化。
  • ::view-transition-old表示「舊視圖」的狀態,也就是變化之前的截圖,::view-transition-new表示「新視圖」的狀態,也就是變化之后的截圖。
  • 如果需要指定具體元素的變化,可以給該元素指定view-transition-name。
  • 前后變化不一定要同一元素,瀏覽器是根據view-transition-name尋找的。
  • 同一時間頁面上不能出現兩個相同view-transition-name的元素,不然視圖變化會失效。

另外,視圖轉換動畫應該作為一種「體驗增強」的功能,而非必要功能,在使用動畫時其實拖慢了頁面打開或者更新的速度,并且在動畫過程中,頁面是完全“凍結”的,做不了任何事情,因此需要衡量好動畫的時間,如果頁面本身就很慢就更不要使用這些動畫了。

[1]View Transitions: https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API

[2]view-transition sort (juejin.cn): https://code.juejin.cn/pen/7268263402853072931

[3]view-transition sort (codepen.io): https://codepen.io/xboxyan/pen/BavBevP

[4]view-transition-dialog (juejin.cn): https://code.juejin.cn/pen/7268262983178911779

[5]view-transition-dialog (codepen.io): https://codepen.io/xboxyan/pen/WNLeBgY

[6]view transition theme change - (juejin.cn): https://code.juejin.cn/pen/7268257573277532219

[7]view transition theme change (codepen.io): https://codepen.io/xboxyan/pen/poqzmLY

責任編輯:姜華 來源: 前端偵探
相關推薦

2023-09-27 08:50:57

Serverles編寫運維

2025-03-12 14:09:56

2020-12-21 05:56:54

Clipboard A復制圖像開發技術

2023-04-24 09:23:31

CSS動畫合成

2023-04-23 09:01:43

CSS動畫合成

2020-02-10 14:26:10

GitHub代碼倉庫

2020-12-10 08:44:35

WebSocket輪詢Comet

2022-03-24 13:36:18

Java悲觀鎖樂觀鎖

2020-03-01 17:53:38

Excel大數據微軟

2019-02-20 14:16:43

2024-04-11 12:19:01

Rust數據類型

2018-06-05 17:40:36

人工智能語音識別

2018-04-25 06:46:52

2023-03-02 08:00:55

包管理工具pnpm 包

2019-03-11 14:33:21

Redis內存模型數據庫

2022-03-07 06:34:22

CQRS數據庫數據模型

2024-02-28 18:22:13

AI處理器

2018-07-17 14:42:50

2023-11-18 09:09:08

GNUBSD協議
點贊
收藏

51CTO技術棧公眾號

欧美顶级毛片在线播放| 色黄网站在线观看| 久久97超碰色| 欧美激情aaaa| 亚洲码无人客一区二区三区| 国产精品66| 亚洲a一区二区| 日韩资源av在线| 午夜精品久久久久久久第一页按摩| 亚洲青色在线| 中文字幕无线精品亚洲乱码一区| 韩国三级与黑人| 免费亚洲电影| 一区二区三区在线视频观看58| 久久av一区二区三区亚洲| 夜夜躁狠狠躁日日躁av| 日韩av综合在线观看| 一级久久久久久久| 一本综合久久| 欧美理论片在线观看| 人妻体内射精一区二区| 亚洲国产一区二区三区网站| 色综合天天综合狠狠| 成人在线观看毛片| 最新av网站在线观看| av在线一区二区| 亚洲va久久久噜噜噜| 波多野结衣影片| 亚洲国产一区二区三区a毛片| 伊人久久五月天| 中文字幕精品视频在线| 激情综合婷婷| 欧美女孩性生活视频| 免费在线观看日韩视频| 菠萝蜜视频在线观看www入口| 国产精品乱码久久久久久| 久久天天狠狠| 乱精品一区字幕二区| 国产综合色在线| 国产在线精品播放| 国产精品sm调教免费专区| 亚洲欧美日韩国产综合精品二区| 欧美成人中文字幕在线| 麻豆视频免费在线播放| 精品久久成人| 亚洲性生活视频| 伊人网伊人影院| 欧美成人午夜77777| 欧美mv日韩mv国产| 图片区偷拍区小说区| 精品国产乱码一区二区三区| 欧美精品一二三| 亚洲视频一二三四| www一区二区三区| 337p亚洲精品色噜噜噜| 天天色天天综合网| 亚洲免费资源| 在线播放日韩导航| 青青草原国产在线视频| 国产精品天堂蜜av在线播放 | 国产精品区一区二区三在线播放| 一区二区三区精| 蜜臀久久99精品久久久画质超高清| 日韩av男人的天堂| 欧美亚洲另类小说| 七七婷婷婷婷精品国产| 国产精品中文字幕久久久| 中文字幕av免费观看| 麻豆视频观看网址久久| 国产区亚洲区欧美区| 一区二区日韩在线观看| 国产精品亚洲午夜一区二区三区| 91情侣偷在线精品国产| 性生活黄色大片| 成人性生交大合| 久久99欧美| av资源网站在线观看| 国产精品网站在线观看| 在线观看成人一级片| 91麻豆一二三四在线| 亚洲一区二区在线免费观看视频 | 亚洲午夜久久久久久久国产| 青青草91久久久久久久久| 精品国产一区二区在线| 私库av在线播放| 亚洲少妇诱惑| 国产欧美精品一区二区三区-老狼| 国产有码在线观看| 成人性色生活片免费看爆迷你毛片| 精品国产日本| yiren22亚洲综合伊人22| 亚洲图片激情小说| 日日摸日日碰夜夜爽无码| 日韩久久一区二区三区| 欧美高清一级片在线| 成人在线视频免费播放| 成人影视亚洲图片在线| 欧美激情高清视频| 亚洲中文字幕无码爆乳av| 国产精品18久久久久久vr| 久久精彩视频| 成人影院www在线观看| 精品久久久久久久久久| 最新国产黄色网址| 欧美a一欧美| 久久综合国产精品台湾中文娱乐网| 久久精品欧美视频| av免费观看不卡| 凹凸成人精品亚洲精品密奴| 欧美成人一二三| 欧美性受xxx黑人xyx性爽| 成人永久看片免费视频天堂| 日韩性感在线| 涩涩网在线视频| 日韩一级免费一区| 国产一二三av| 国产欧美在线| 亚洲最大福利网站| 午夜国产福利在线| 色av一区二区| 国产真实乱人偷精品| 91精品啪在线观看国产18 | 久久精品人妻一区二区三区| 麻豆91在线播放免费| 久久影院理伦片| 欧美激情成人动漫| 欧美一区日本一区韩国一区| www.av欧美| 一本久道综合久久精品| 风间由美久久久| 精产国品自在线www| 91高清在线观看| 一区二区国产在线观看| 一区二区三区视频免费在线观看| 久久成人免费网站| 久久天天狠狠| 激情视频网站在线播放色| 欧美一二三区精品| 亚洲视频重口味| 日本欧美一区二区| 日韩精品国内| 三上悠亚一区二区| 亚洲欧美国产一本综合首页| 69精品久久久| 成人国产精品免费观看| 日韩欧美精品免费| 粉嫩一区二区三区四区公司1| 欧美日韩ab片| 午夜精品久久久久久久99热黄桃| 亚洲男帅同性gay1069| 在线免费看污网站| 亚洲天堂免费| 91亚洲国产精品| 在线三级中文| 欧美xfplay| 国产精品黄色av| 国产在线免费视频| 高清不卡在线观看| 青青青在线视频播放| 18国产精品| 69国产精品成人在线播放| 午夜性色福利视频| 色婷婷久久久久swag精品| 一级黄色片网址| 精品一区二区三区免费毛片爱| 色撸撸在线观看| 美女国产精品久久久| 欧美精品第一页在线播放| 秋霞视频一区二区| 日韩欧美视频一区二区三区| 波多野结衣av在线观看| 欧美aaaaaa午夜精品| 中文视频一区视频二区视频三区| 国产精品一区二区精品视频观看| 欧美高清不卡在线| 青青草观看免费视频在线 | 日韩人妻精品中文字幕| 国内精品写真在线观看| 中文字幕第50页| 国产精品传媒| 国产精品激情av电影在线观看| 香港伦理在线| 精品国产凹凸成av人导航| 97久久久久久久| 国产精品美女www爽爽爽| 在线成人免费av| 免费一区视频| 国产卡一卡二在线| 亚洲欧美日本伦理| 91久久精品美女高潮| 九色porny丨国产首页在线| 中文字幕国产日韩| 日本xxxx人| 欧美日韩一区二区三区不卡| 久久国产在线视频| 国产精品欧美一区二区三区| 免费黄视频在线观看| 噜噜噜在线观看免费视频日韩 | 91日本在线视频| 麻豆理论在线观看| 久久久精品网站| 日韩电影在线观看完整版| 欧美一区国产二区| 日韩熟女一区二区| 亚洲成人黄色影院| 日韩亚洲欧美中文字幕| 91社区在线播放| 久久无码人妻一区二区三区| 成年人视频免费在线观看| 久久99热99| 午夜精品久久久久久久无码| 一区二区三区在线电影| 欧美性bbwbbwbbwhd| 草草视频在线一区二区| 成人精品在线视频| 日韩毛片一区| 欧美中文字幕视频| 波多野结衣精品| 久久亚洲精品成人| 国产福利小视频在线观看| 亚洲激情免费观看| 亚洲国产成人精品一区二区三区| 欧美午夜电影网| 日韩成人免费观看| 亚洲成av人影院| 五月天av网站| 国产精品每日更新| 欧美成人短视频| 国产日产欧美一区二区视频| 免费黄色三级网站| 成人免费视频免费观看| www.国产福利| 久久精品国产**网站演员| 黄色国产小视频| 久久人人超碰| 成年人视频在线免费| 99视频精品| 免费av手机在线观看| 亚洲国产一区二区精品专区| 无码人妻精品一区二区蜜桃网站| 久久久久久久久久久久久久| 一本久道久久综合狠狠爱亚洲精品| 九色精品91| 日韩欧美一区二区视频在线播放| 亚洲综合小说图片| 欧美一区二区在线视频观看| 日韩av网站在线免费观看| 精品国产91亚洲一区二区三区www| 成人福利一区| 久久精彩视频| 婷婷综合一区| 日韩av一级大片| 日韩一区自拍| 黄色小视频大全| 欧美深夜福利| 男女视频网站在线观看| 在线一区视频| av五月天在线| 激情六月婷婷久久| 黑人巨大猛交丰满少妇| 丁香天五香天堂综合| 亚洲精品第二页| 久久婷婷久久一区二区三区| 久久国产柳州莫菁门| 国产精品国产三级国产普通话99 | 亚洲午夜私人影院| 欧美日韩一区在线播放| 竹内纱里奈兽皇系列在线观看| 日韩美女福利视频| 日本成人一区二区| 超碰97人人人人人蜜桃| 欧美jizz19性欧美| 日韩欧美手机在线| 欧美日韩亚洲一区二区三区在线| 国产日本在线播放| 日本中文字幕不卡| 女王人厕视频2ⅴk| 久久亚洲精品国产精品紫薇| 五月天精品在线| 亚洲欧美一区二区久久| 国产做受高潮漫动| 欧美调教femdomvk| 亚洲成人av综合| 亚洲天堂av在线免费| a级影片在线观看| 欧美在线一区二区三区四| 精品女同一区二区三区在线观看| 亚洲伊人成综合成人网| 青青草原在线亚洲| 国产91av视频在线观看| 亚洲激情不卡| 亚洲黄色av片| 久久综合五月天婷婷伊人| 国产三级aaa| 岛国视频午夜一区免费在线观看 | 日韩二区三区四区| 台湾佬美性中文| 欧美激情在线一区二区三区| 九九视频免费看| 欧美日韩一卡二卡| 人妻偷人精品一区二区三区| 中文字幕在线看视频国产欧美在线看完整 | 粉嫩av一区二区三区在线播放| 男生草女生视频| 玉米视频成人免费看| 国产精品午夜一区二区| 欧美va亚洲va香蕉在线| 91短视频版在线观看www免费| 国模吧一区二区三区| 精品176极品一区| 免费在线成人av| 欧美日韩一区二区高清| 小明看看成人免费视频| 91蝌蚪porny| 久久久久国产精品夜夜夜夜夜| 欧美日韩亚洲综合在线| 视频在线不卡| 国a精品视频大全| 欧美高清一级片| 一区二区三区观看| 久久综合图片| yy1111111| 一区二区三区日韩欧美精品| 自拍偷拍第八页| 国产午夜精品一区二区三区| 成av人片在线观看www| 91精品久久久久久蜜桃| 真实国产乱子伦精品一区二区三区| 欧美日韩亚洲一二三| 天天操天天摸天天干| 午夜精品福利久久久| 成人av无码一区二区三区| 日韩视频一区在线| 精品亚洲a∨| 日韩欧美精品久久| 日韩综合在线视频| 全黄一级裸体片| 日韩欧美亚洲成人| 欧美大片aaa| 欧洲美女免费图片一区| 欧美精品国产白浆久久久久| 中国丰满熟妇xxxx性| 国产精品夜夜嗨| 久久一二三四区| 亚洲第一精品夜夜躁人人躁| 蜜乳av一区| 国产一区精品视频| 亚洲日本激情| 男生裸体视频网站| 欧美性猛交xxxx免费看漫画| 香蕉视频免费看| 欧美在线播放视频| japanese国产精品| 久久久精品麻豆| 亚洲人成精品久久久久| 国产美女精品视频国产| 久久影视电视剧免费网站清宫辞电视 | 中文字幕第三区| 亚洲一区二区视频| 蜜臀av午夜精品| 98精品国产高清在线xxxx天堂| 日韩av黄色在线| 日本新janpanese乱熟| 国产精品丝袜黑色高跟| 国产精品免费无遮挡| 欧美老女人xx| 免费萌白酱国产一区二区三区| 日本不卡在线观看视频| 国产婷婷一区二区| 在线观看av大片| 久久综合五月天| 久久久久高潮毛片免费全部播放| 欧美 日韩 国产一区| 国产精品色在线观看| 亚洲成人77777| 国产999精品| 国产精品久久久久蜜臀 | 欧美s码亚洲码精品m码| 久久久久久9999| 国产精品久久久久久久免费| 午夜欧美大片免费观看| 美女亚洲一区| 欧美性猛交xx| 黑人巨大精品欧美一区二区免费| 国产免费av高清在线| 亚洲va男人天堂| 国产亚洲午夜| 99热这里只有精品4| 亚洲国产精品久久91精品| 四虎4545www精品视频| 亚洲小视频在线播放| 久久五月婷婷丁香社区| av免费在线不卡| 国产精品aaa| 亚洲高清电影| 来吧亚洲综合网| 亚洲精品电影网在线观看| 人妻在线日韩免费视频| www日韩大片| 国产黄色av网站|