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

當(dāng)前位置:首頁 > 科技  > 軟件

dom 獲取不到?試試 CSS 動畫監(jiān)聽元素渲染吧

來源: 責(zé)編: 時間:2024-01-15 17:11:59 277觀看
導(dǎo)讀在數(shù)據(jù)驅(qū)動視圖的框架下,你最頭疼的事情是什么?沒錯,就是獲取dom。大部分業(yè)務(wù)邏輯都可以在數(shù)據(jù)層面進行處理,但有些情況就不得不去獲取真實的dom,比如獲取元素的寬高dom.offsetHeight或者調(diào)用某些dom方法等dom.scrollTop =

在數(shù)據(jù)驅(qū)動視圖的框架下,你最頭疼的事情是什么?沒錯,就是獲取dom。大部分業(yè)務(wù)邏輯都可以在數(shù)據(jù)層面進行處理,但有些情況就不得不去獲取真實的dom,比如獲取元素的寬高9qt28資訊網(wǎng)——每日最新資訊28at.com

dom.offsetHeight

或者調(diào)用某些dom方法等9qt28資訊網(wǎng)——每日最新資訊28at.com

dom.scrollTop = 100

通常在框架里,比如說vue中,會如何獲取真實 dom 呢?我想大家可能都用過這樣一個方法nextTick,用于在數(shù)據(jù)更新后獲取 dom,如下9qt28資訊網(wǎng)——每日最新資訊28at.com

this.show = truethis.$nextTick(() => (  document.getElementById('xx').scrollTop = 100))

用過的都知道,這個方式非常不靠譜,經(jīng)常會出現(xiàn)諸如類似這樣的錯誤9qt28資訊網(wǎng)——每日最新資訊28at.com

Cannot read property 'scrollTo' of undefined

碰到這種情況,很多同學(xué)可能會用定時器,如果500不行,那就換1000,只要延時夠長,總能獲取到真實dom的。9qt28資訊網(wǎng)——每日最新資訊28at.com

this.show = truesettimeout(() => (  document.getElementById('xx').scrollTop = 0),500)

或許這些框架底層有其他解決方式,不過我并不精通這些,那么,從原生角度,有什么比較好的方式去解決這些問題呢?換句話說,如何確保元素渲染時機呢?9qt28資訊網(wǎng)——每日最新資訊28at.com

一、如何監(jiān)聽元素渲染?

元素監(jiān)聽最官方的方式是MutationObserver,這個API天生就是為了 dom變化檢測而生的。9qt28資訊網(wǎng)——每日最新資訊28at.com

https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver9qt28資訊網(wǎng)——每日最新資訊28at.com

9qt28資訊網(wǎng)——每日最新資訊28at.com

功能非常強大,幾乎能監(jiān)聽到 dom的所有變化,包括上面提到的元素渲染成功。9qt28資訊網(wǎng)——每日最新資訊28at.com

但是,正是因為過于強大,所以它的api就變得極其繁瑣,下面是MDN里的一段例子9qt28資訊網(wǎng)——每日最新資訊28at.com

// 選擇需要觀察變動的節(jié)點const targetNode = document.getElementById("some-id");// 觀察器的配置(需要觀察什么變動)const config = { attributes: true, childList: true, subtree: true };// 當(dāng)觀察到變動時執(zhí)行的回調(diào)函數(shù)const callback = function (mutationsList, observer) {  // Use traditional 'for loops' for IE 11  for (let mutation of mutationsList) {    if (mutation.type === "childList") {      console.log("A child node has been added or removed.");    } else if (mutation.type === "attributes") {      console.log("The " + mutation.attributeName + " attribute was modified.");    }  }};// 創(chuàng)建一個觀察器實例并傳入回調(diào)函數(shù)const observer = new MutationObserver(callback);// 以上述配置開始觀察目標(biāo)節(jié)點observer.observe(targetNode, config);// 之后,可停止觀察observer.disconnect();

我相信,除非特殊需求,沒人會愿意寫上這樣一堆代碼吧,定時器不比這個“香”多了?9qt28資訊網(wǎng)——每日最新資訊28at.com

那么,有沒有一些簡潔的、靠譜的監(jiān)聽方法呢?9qt28資訊網(wǎng)——每日最新資訊28at.com

其實,文章標(biāo)題已經(jīng)暴露了,沒錯,我們可以用 CSS 動畫來監(jiān)聽元素渲染。9qt28資訊網(wǎng)——每日最新資訊28at.com

原理其實很簡單,給元素一個動畫,動畫會在元素添加到頁面時自動播放,進而觸發(fā)animation*相關(guān)事件。9qt28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9qt28資訊網(wǎng)——每日最新資訊28at.com

代碼也很簡單,先定義一個無關(guān)緊要的 CSS 動畫,不能影響視覺效果,比如9qt28資訊網(wǎng)——每日最新資訊28at.com

@keyframes appear{  to {    opacity: .99;  }}

然后給需要監(jiān)聽的元素上添加這個動畫9qt28資訊網(wǎng)——每日最新資訊28at.com

div{  animation: appear .1s;}

最后,只需要在這個元素或者及其父級上監(jiān)聽動畫開始時機就行了,如果有多個元素,建議放在共同父級上9qt28資訊網(wǎng)——每日最新資訊28at.com

parent.addEventListener('animationstart', (ev) => {  if (ev.animationName == 'appear') {    // 元素出現(xiàn)了,可以獲取dom信息了  }})

下面來看幾個實際例子9qt28資訊網(wǎng)——每日最新資訊28at.com

二、多行文本展開收起

沒錯,又是這個例子。9qt28資訊網(wǎng)——每日最新資訊28at.com

前不久,嘗試用 CSS 容器實現(xiàn)了這個效果,有興趣的可以參考這篇文章:9qt28資訊網(wǎng)——每日最新資訊28at.com

嘗試借助CSS @container實現(xiàn)多行文本展開收起9qt28資訊網(wǎng)——每日最新資訊28at.com

9qt28資訊網(wǎng)——每日最新資訊28at.com

雖然最后實現(xiàn)了,但是dom結(jié)構(gòu)及其復(fù)雜,如下9qt28資訊網(wǎng)——每日最新資訊28at.com

<div class="text-wrap">  <div class="text" title="歡迎關(guān)注前端偵探,這里有一些有趣的、你可能不知道的HTML、CSS、JS小技巧技巧。">    <div class="text-size">      <div class="text-flex">        <div class="text-content">          <label class="expand"><input type="checkbox" hidden></label>          歡迎關(guān)注前端偵探,這里有一些有趣的、你可能不知道的HTML、CSS、JS小技巧技巧。        </div>      </div>    </div>  </div>  <div class="text-content text-place">    歡迎關(guān)注前端偵探,這里有一些有趣的、你可能不知道的HTML、CSS、JS小技巧技巧。  </div></div>

很多重復(fù)的文本和多余的標(biāo)簽,這些都是為了配合容器查詢添加的。9qt28資訊網(wǎng)——每日最新資訊28at.com

其實說到底,只是為了判斷一下尺寸,其實 JS 是更好的選擇,麻煩的只是獲取尺寸的時機。如果通過 CSS 動畫來監(jiān)聽,一切就都好辦了。9qt28資訊網(wǎng)——每日最新資訊28at.com

我們先回到最基礎(chǔ)的HTML結(jié)構(gòu)9qt28資訊網(wǎng)——每日最新資訊28at.com

<div class="text-wrap">  <div class="text-content">    <label class="expand"><input type="checkbox" hidden></label>    歡迎關(guān)注前端偵探,這里有一些有趣的、你可能不知道的HTML、CSS、JS小技巧技巧。  </div></div>

這些結(jié)構(gòu)是為了實現(xiàn)右下角的“展開”按鈕必不可少的,如果不太清楚是如何布局的,可以回顧一下之前這篇文章:9qt28資訊網(wǎng)——每日最新資訊28at.com

CSS 實現(xiàn)多行文本“展開收起”9qt28資訊網(wǎng)——每日最新資訊28at.com

9qt28資訊網(wǎng)——每日最新資訊28at.com

相關(guān) CSS 如下9qt28資訊網(wǎng)——每日最新資訊28at.com

.text-wrap{  display: flex;  position: relative;  width: 300px;  padding: 8px;  outline: 1px dashed #9747FF;  border-radius: 4px;  line-height: 1.5;  text-align: justify;  font-family: cursive;}.expand{  font-size: 80%;  padding: .2em .5em;  background-color: #9747FF;  color: #fff;  border-radius: 4px;  cursor: pointer;  float: right;  clear: both;}.expand::after{  content: '展開';}.text-content{  display: -webkit-box;  -webkit-box-orient: vertical;  -webkit-line-clamp: 3;  overflow: hidden;}.text-content::before{  content: '';  float: right;  height: calc(100% - 24px);}.text-wrap:has(:checked) .text-content{  -webkit-line-clamp: 999;}.text-wrap:has(:checked) .expand::after{  content: '收起';}

效果如下9qt28資訊網(wǎng)——每日最新資訊28at.com

通過前一節(jié)的原理,我們給文本容器添加一個無關(guān)緊要的動畫9qt28資訊網(wǎng)——每日最新資訊28at.com

.text-content{  /**/  animation: appear .1s;}@keyframes appear {  to {    opacity: .99;  }}

然后,我們在父級上監(jiān)聽這個動畫,我這里直接監(jiān)聽document,這里做的事情很簡單,判斷一下容器的滾動高度和實際高度,如果滾動高度超過實際高度,說明文本較多,超出了指定行數(shù),這種情況就給容器添加一個特殊的屬性9qt28資訊網(wǎng)——每日最新資訊28at.com

document.addEventListener('animationstart', (ev) => {  if (ev.animationName == 'appear') {    ev.target.dataset.mul = ev.target.scrollHeight > ev.target.offsetHeight;  }})

然后根據(jù)這個屬性,判斷“展開”按鈕隱藏或者顯示9qt28資訊網(wǎng)——每日最新資訊28at.com

.expand{  /**/  visibility: hidden;}.text-content[data-mul="true"] .expand{  visibility: visible;}

這樣只有在文本較多時,“展開”按鈕才會出現(xiàn),效果如下9qt28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9qt28資訊網(wǎng)——每日最新資訊28at.com

是不是要簡單很多?完整代碼可以參考以下鏈接9qt28資訊網(wǎng)——每日最新資訊28at.com

  • CSS els with animation (juejin.cn)[1]
  • CSS els with animation (codepen.io)[2]

三、文本超長時自動滾動

再來看一個例子,相信大家都碰到過。9qt28資訊網(wǎng)——每日最新資訊28at.com

先看效果吧,就是一個無限滾動的效果,類似與以前的marquee標(biāo)簽9qt28資訊網(wǎng)——每日最新資訊28at.com

首先來看HTML,并沒有什么特別之處9qt28資訊網(wǎng)——每日最新資訊28at.com

<div class="marqee">  <span class="text" title="這是一段可以自動滾動的文本">這是一段可以自動滾動的文本</span></div>

這里是首尾無縫銜接,所以需要兩份文本,我這里用偽元素生成9qt28資訊網(wǎng)——每日最新資訊28at.com

.text::after{  content: attr(title);  padding: 0 20px;}

單純的滾動其實很容易,就一行 CSS,如下9qt28資訊網(wǎng)——每日最新資訊28at.com

.text{  animation: move 2s linear infinite;}@keyframes move{  to {    transform: translateX(-50%);  }}

這樣實現(xiàn)會有兩個問題,效果如下9qt28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9qt28資訊網(wǎng)——每日最新資訊28at.com

一是較少的文本也發(fā)生的滾動,二是滾動速度不一致。9qt28資訊網(wǎng)——每日最新資訊28at.com

所以,有必要借助 JS來修正一下。9qt28資訊網(wǎng)——每日最新資訊28at.com

還是上面的方式,我們直接用CSS動畫來監(jiān)聽元素渲染9qt28資訊網(wǎng)——每日最新資訊28at.com

.marqee{  /**/  animation: appear .1s;}@keyframes appear {  to {    opacity: .99;  }}

然后監(jiān)聽動畫開始事件,這里要做兩件事,也就是為了修正前面提到的兩個問題,一個是判斷文本的真實寬度和容器寬度的關(guān)系,還有一個是獲取判斷文本寬度和容器寬度的比例關(guān)系,因為文本越長,需要滾動的時間也越長9qt28資訊網(wǎng)——每日最新資訊28at.com

document.addEventListener('animationstart', (ev) => {  if (ev.animationName == 'appear') {    ev.target.dataset.mul = ev.target.scrollWidth > ev.target.offsetWidth;    ev.target.style.setProperty('--speed', ev.target.scrollWidth / ev.target.offsetWidth);  }})

拿到這些狀態(tài)后,我們改一下前面的動畫。9qt28資訊網(wǎng)——每日最新資訊28at.com

只有data-mul為true的情況下,才執(zhí)行動畫,并且動畫時長是和--speed成比例的,這樣可以保證所有文本的速度是一致的9qt28資訊網(wǎng)——每日最新資訊28at.com

.marqee[data-mul="true"] .text{  display: inline-block;  animation: move calc(var(--speed) * 3s) linear infinite;}

還有就是只有data-mul為true的情況下才會生成雙份文本9qt28資訊網(wǎng)——每日最新資訊28at.com

.marqee[data-mul="true"] .text::after{  content: attr(title);  padding: 0 20px;}

這樣判斷以后,就能得到我們想要的效果了9qt28資訊網(wǎng)——每日最新資訊28at.com

完整代碼可以參考以下鏈接9qt28資訊網(wǎng)——每日最新資訊28at.com

  • CSS marquee width animation (juejin.cn)[3]
  • CSS marquee width animation (codepen.io)[4]

四、元素錨定定位

最后再來一個例子,其實這個方式我平時用的很多了,一個任務(wù)列表頁面,我們有時候會遇到這樣的需求,在地址欄上傳入一個 id,例如9qt28資訊網(wǎng)——每日最新資訊28at.com

https://xxx.com?id=5

然后,根據(jù)這個id自動錨定到這個任務(wù)上(讓這個任務(wù)滾動到屏幕中間)9qt28資訊網(wǎng)——每日最新資訊28at.com

由于這個任務(wù)是通過接口返回渲染的,所以必須等待 dom渲染完全才能獲取到。9qt28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9qt28資訊網(wǎng)——每日最新資訊28at.com

傳統(tǒng)的方式可能又要通過定時器了,這時可以考慮用動畫監(jiān)聽的方式。9qt28資訊網(wǎng)——每日最新資訊28at.com

.item{  /**/  animation: appear .1s;}@keyframes appear {  to {    opacity: .99;  }}

然后我們只需要監(jiān)聽動畫開始事件,判斷一下元素的 id 是否和我們傳入的一致,如果是一致就直接錨定就行了9qt28資訊網(wǎng)——每日最新資訊28at.com

const current_id = 'item_5';// 假設(shè)這個是url傳進來的document.addEventListener('animationstart', (ev) => {  if (ev.animationName == 'appear' && ev.target.id === current_id) {    ev.target.scrollIntoView({      block: 'center'    })  }})

這樣就能準(zhǔn)確無誤的獲取到錨定元素并且滾動定位了,效果如下9qt28資訊網(wǎng)——每日最新資訊28at.com

完整代碼可以參考以下鏈接9qt28資訊網(wǎng)——每日最新資訊28at.com

  • CSS scrollIntoView with animation (juejin.cn)[5]
  • CSS scrollIntoView with animation (codepen.io)[6]

五、其他注意事項

在實際使用中,有一些要注意一下。9qt28資訊網(wǎng)——每日最新資訊28at.com

比如,在vue中也可以將這個監(jiān)聽直接綁定在父級模板上,這樣會更方便9qt28資訊網(wǎng)——每日最新資訊28at.com

<div @animationstart="apear">  </div>

還有一點比較重要,很多時候我們用的的可能是CSS scoped,比如9qt28資訊網(wǎng)——每日最新資訊28at.com

<style scoped>.item{  /**/  animation: appear .1s;}@keyframes appear {  to {    opacity: .99;  }}</style>

如果是這種寫法就需要注意了,因為在編譯過程中,這個動畫名稱會加一些哈希后綴,類似于這樣9qt28資訊網(wǎng)——每日最新資訊28at.com

所以,我們在animationstart判斷時要改動一下,比如用startsWith9qt28資訊網(wǎng)——每日最新資訊28at.com

document.addEventListener('animationstart', (ev) => {  if (ev.animationName.startsWith('appear')) {    //   }})

這個需要額外注意一下9qt28資訊網(wǎng)——每日最新資訊28at.com

六、總結(jié)一下

是不是從來沒有用過這些方式,趕緊試一試吧,相信會有不一樣的感受,下面總結(jié)一下9qt28資訊網(wǎng)——每日最新資訊28at.com

  1. 在數(shù)據(jù)驅(qū)動視圖的框架下,獲取dom是一件比較頭疼的事情
  2. 很多時候數(shù)據(jù)更新了,dom還沒來得及更新,這時獲取就出錯了
  3. 元素監(jiān)聽最官方的方式是MutationObserver,但是比較復(fù)雜,一般情況下不會有人用
  4. 另辟蹊徑,我們可以用 CSS 動畫來監(jiān)聽元素渲染
  5. 原理非常簡單,給元素一個動畫,動畫會在元素添加到頁面時自動播放,進而觸發(fā)animation*相關(guān)事件
  6. 利用這個技巧,我們可以很輕松的獲取元素的dom相關(guān)信息已經(jīng)觸發(fā)相關(guān)事件
  7. 注意一下框架里的編譯,可能會更改動畫名稱

總的來說,這是一個非常實用的小技巧,雖然沒有純 CSS那么“高級”,但是卻是最“實用”的。9qt28資訊網(wǎng)——每日最新資訊28at.com

[1]CSS els with animation (juejin.cn): https://code.juejin.cn/pen/73231202963349831879qt28資訊網(wǎng)——每日最新資訊28at.com

[2]CSS els with animation (codepen.io): https://codepen.io/xboxyan/pen/gOELbxV9qt28資訊網(wǎng)——每日最新資訊28at.com

[3]CSS marquee width animation (juejin.cn): https://code.juejin.cn/pen/73231256909739458979qt28資訊網(wǎng)——每日最新資訊28at.com

[4]CSS marquee width animation (codepen.io): https://codepen.io/xboxyan/pen/YzgGmLb9qt28資訊網(wǎng)——每日最新資訊28at.com

[5]CSS scrollIntoView with animation (juejin.cn): https://code.juejin.cn/pen/73234199046934692349qt28資訊網(wǎng)——每日最新資訊28at.com

[6]CSS scrollIntoView with animation (codepen.io): https://code.juejin.cn/pen/73234199046934692349qt28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-61908-0.htmldom 獲取不到?試試 CSS 動畫監(jiān)聽元素渲染吧

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

上一篇: C++中的final和override關(guān)鍵字詳解

下一篇: 未來世界的12個軟件開發(fā)預(yù)測

標(biāo)簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品揄拍500视频| 欧美国产日韩精品| 性做久久久久久久久| 久久超碰97人人做人人爱| 久久久噜噜噜久久久| 欧美黑人多人双交| 国产精品99一区二区| 国产欧美亚洲视频| 亚洲高清激情| 亚洲一区欧美一区| 久久久久久久尹人综合网亚洲 | 在线午夜精品自拍| 性欧美大战久久久久久久久| 久久亚洲二区| 欧美网站在线观看| 韩日欧美一区| 亚洲视频在线观看视频| 久久国产精品一区二区| 欧美福利一区二区| 国产精品最新自拍| 亚洲精品无人区| 欧美在线观看网址综合| 欧美日韩国产美| 国内精品美女av在线播放| 日韩一区二区福利| 久久久久.com| 国产精品久久久久久久久久三级| 黄色精品免费| 亚洲一品av免费观看| 麻豆精品在线播放| 国产精品一区免费视频| 亚洲精品少妇网址| 久久国产精品久久久久久| 欧美日韩精品三区| 激情小说另类小说亚洲欧美| 亚洲小说春色综合另类电影| 欧美fxxxxxx另类| 国产亚洲精品成人av久久ww| 在线一区二区日韩| 模特精品在线| 黑人中文字幕一区二区三区 | 久久久久久一区二区| 欧美三区在线视频| 亚洲国内自拍| 久久久久国产精品www| 国产精品家庭影院| 亚洲精华国产欧美| 久久久久免费| 亚洲美女视频在线免费观看| 国内精品久久久久影院薰衣草| 亚洲国产欧美日韩| 欧美一区二区视频97| 欧美精品网站| 亚洲国产综合在线| 免费成人av在线看| 韩日视频一区| 午夜视频久久久| 在线观看视频免费一区二区三区 | 亚洲网友自拍| 牛人盗摄一区二区三区视频| 国产一区高清视频| 蜜臀a∨国产成人精品| 在线亚洲精品| 国产亚洲福利一区| 国产精品电影在线观看| 亚洲欧美日韩在线播放| 亚洲国产日韩欧美在线图片| 免费成人av在线看| 日韩视频一区二区三区在线播放免费观看 | 国产精品成人一区二区三区吃奶| 午夜精品视频| 久久国产免费看| 久久综合九色| 欧美日韩成人一区二区三区| 欧美天天在线| 亚洲一区二区免费在线| 亚洲激情电影在线| 久久美女性网| 国内精品久久久久久 | 午夜日韩激情| 国产精品嫩草99a| 亚洲午夜精品福利| 欧美性视频网站| 亚洲七七久久综合桃花剧情介绍| 国产最新精品精品你懂的| 国产精品天天摸av网| 久久精品一本久久99精品| 久久久久久综合| 欧美日韩p片| 国产视频精品va久久久久久| 国内精品视频在线播放| 国产精品九九| 欧美高清视频| 亚洲国产欧美一区二区三区久久 | 久久国产精品99久久久久久老狼| 国产精品夜夜夜一区二区三区尤| 亚洲一区在线视频| 国产精品日韩在线播放| 午夜精品亚洲一区二区三区嫩草| 国产精品一区二区三区观看| 欧美一区二区在线视频| 狠狠色综合色综合网络| 久久永久免费| 亚洲精品日产精品乱码不卡| 欧美日韩精品| 欧美一级片一区| 精品成人在线| 欧美伦理在线观看| 亚洲尤物精选| 国产一区二区三区免费不卡| 久久嫩草精品久久久精品| 亚洲国产精品t66y| 欧美日韩在线免费观看| 香蕉成人啪国产精品视频综合网| 国产亚洲欧美色| 猛男gaygay欧美视频| 日韩亚洲欧美一区| 国产精品视频观看| 久久婷婷国产综合国色天香 | 久久国产一区二区三区| 在线观看欧美亚洲| 欧美日韩精品二区| 午夜精品久久久久久久久久久久| 韩国三级电影久久久久久| 欧美高清一区二区| 亚洲综合色丁香婷婷六月图片| 国产午夜精品一区理论片飘花| 老司机免费视频久久| 99热免费精品| 国产在线乱码一区二区三区| 欧美成人一区二免费视频软件| 亚洲视频axxx| 国产综合色一区二区三区| 欧美高清日韩| 欧美一区二区高清| 亚洲人成在线播放网站岛国| 国产精品入口麻豆原神| 蜜桃视频一区| 亚洲女人av| 亚洲国产精品成人精品| 国产精品久线观看视频| 美女国产一区| 亚洲欧美日本视频在线观看| 在线成人免费观看| 国产精品福利av| 欧美二区在线观看| 久久精品一区| 亚洲伊人网站| 亚洲日韩欧美视频| 国产一区二区剧情av在线| 欧美日韩国产成人精品| 久久久久九九九| 亚洲免费一区二区| 亚洲精品久久久久久久久久久| 国产午夜精品全部视频播放 | 久久久综合网站| 亚洲男女毛片无遮挡| 亚洲精品1区2区| 国语自产精品视频在线看一大j8 | 亚洲精品自在久久| 一区二区三区在线免费观看 | 国内自拍亚洲| 国产精品久久一区二区三区| 欧美不卡在线视频| 欧美一区二区三区四区高清| 日韩亚洲欧美中文三级| 伊人久久综合| 国产日韩欧美在线观看| 欧美视频一区二区三区在线观看| 老牛嫩草一区二区三区日本| 亚洲欧美日本国产专区一区| 99国产精品一区| 在线欧美三区| 精品av久久707| 国产区亚洲区欧美区| 国产精品黄色在线观看| 欧美日本免费一区二区三区| 美日韩免费视频| 久久欧美中文字幕| 欧美伊人精品成人久久综合97| 亚洲天堂男人| 宅男噜噜噜66一区二区66| 亚洲精品社区| 91久久极品少妇xxxxⅹ软件| 黑人一区二区三区四区五区| 国产美女精品一区二区三区| 欧美日韩亚洲综合一区| 欧美精品在线播放| 欧美激情视频免费观看| 麻豆九一精品爱看视频在线观看免费 | 亚洲视频www| 日韩一级二级三级| 日韩视频精品在线| 亚洲靠逼com| 亚洲精品在线免费| 亚洲美女视频在线免费观看| 亚洲肉体裸体xxxx137| 亚洲国产欧美一区| 亚洲欧洲一区二区在线播放| 亚洲国产你懂的| 亚洲激情在线| 亚洲精品影院在线观看| 亚洲区一区二区三区| 亚洲精品国产欧美|