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

dom 獲取不到?試試 CSS 動畫監聽元素渲染吧

開發 前端
或許這些框架底層有其他解決方式,不過我并不精通這些,那么,從原生角度,有什么比較好的方式去解決這些問題呢?換句話說,如何確保元素渲染時機呢?

在數據驅動視圖的框架下,你最頭疼的事情是什么?沒錯,就是獲取dom。大部分業務邏輯都可以在數據層面進行處理,但有些情況就不得不去獲取真實的dom,比如獲取元素的寬高

dom.offsetHeight

或者調用某些dom方法等

dom.scrollTop = 100

通常在框架里,比如說vue中,會如何獲取真實 dom 呢?我想大家可能都用過這樣一個方法nextTick,用于在數據更新后獲取 dom,如下

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

用過的都知道,這個方式非常不靠譜,經常會出現諸如類似這樣的錯誤

Cannot read property 'scrollTo' of undefined

碰到這種情況,很多同學可能會用定時器,如果500不行,那就換1000,只要延時夠長,總能獲取到真實dom的。

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

或許這些框架底層有其他解決方式,不過我并不精通這些,那么,從原生角度,有什么比較好的方式去解決這些問題呢?換句話說,如何確保元素渲染時機呢?

一、如何監聽元素渲染?

元素監聽最官方的方式是MutationObserver,這個API天生就是為了 dom變化檢測而生的。

https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver

功能非常強大,幾乎能監聽到 dom的所有變化,包括上面提到的元素渲染成功。

但是,正是因為過于強大,所以它的api就變得極其繁瑣,下面是MDN里的一段例子

// 選擇需要觀察變動的節點
const targetNode = document.getElementById("some-id");

// 觀察器的配置(需要觀察什么變動)
const config = { attributes: true, childList: true, subtree: true };

// 當觀察到變動時執行的回調函數
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.");
    }
  }
};

// 創建一個觀察器實例并傳入回調函數
const observer = new MutationObserver(callback);

// 以上述配置開始觀察目標節點
observer.observe(targetNode, config);

// 之后,可停止觀察
observer.disconnect();

我相信,除非特殊需求,沒人會愿意寫上這樣一堆代碼吧,定時器不比這個“香”多了?

那么,有沒有一些簡潔的、靠譜的監聽方法呢?

其實,文章標題已經暴露了,沒錯,我們可以用 CSS 動畫來監聽元素渲染。

原理其實很簡單,給元素一個動畫,動畫會在元素添加到頁面時自動播放,進而觸發animation*相關事件。

圖片圖片

代碼也很簡單,先定義一個無關緊要的 CSS 動畫,不能影響視覺效果,比如

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

然后給需要監聽的元素上添加這個動畫

div{
  animation: appear .1s;
}

最后,只需要在這個元素或者及其父級上監聽動畫開始時機就行了,如果有多個元素,建議放在共同父級上

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

下面來看幾個實際例子

二、多行文本展開收起

沒錯,又是這個例子。

前不久,嘗試用 CSS 容器實現了這個效果,有興趣的可以參考這篇文章:

嘗試借助CSS @container實現多行文本展開收起

雖然最后實現了,但是dom結構及其復雜,如下

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

很多重復的文本和多余的標簽,這些都是為了配合容器查詢添加的。

其實說到底,只是為了判斷一下尺寸,其實 JS 是更好的選擇,麻煩的只是獲取尺寸的時機。如果通過 CSS 動畫來監聽,一切就都好辦了。

我們先回到最基礎的HTML結構

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

這些結構是為了實現右下角的“展開”按鈕必不可少的,如果不太清楚是如何布局的,可以回顧一下之前這篇文章:

CSS 實現多行文本“展開收起”

相關 CSS 如下

.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: '收起';
}

效果如下

通過前一節的原理,我們給文本容器添加一個無關緊要的動畫

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

然后,我們在父級上監聽這個動畫,我這里直接監聽document,這里做的事情很簡單,判斷一下容器的滾動高度和實際高度,如果滾動高度超過實際高度,說明文本較多,超出了指定行數,這種情況就給容器添加一個特殊的屬性

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

然后根據這個屬性,判斷“展開”按鈕隱藏或者顯示

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

這樣只有在文本較多時,“展開”按鈕才會出現,效果如下

圖片圖片

是不是要簡單很多?完整代碼可以參考以下鏈接

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

三、文本超長時自動滾動

再來看一個例子,相信大家都碰到過。

先看效果吧,就是一個無限滾動的效果,類似與以前的marquee標簽

首先來看HTML,并沒有什么特別之處

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

這里是首尾無縫銜接,所以需要兩份文本,我這里用偽元素生成

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

單純的滾動其實很容易,就一行 CSS,如下

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

這樣實現會有兩個問題,效果如下

圖片圖片

一是較少的文本也發生的滾動,二是滾動速度不一致。

所以,有必要借助 JS來修正一下。

還是上面的方式,我們直接用CSS動畫來監聽元素渲染

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

然后監聽動畫開始事件,這里要做兩件事,也就是為了修正前面提到的兩個問題,一個是判斷文本的真實寬度和容器寬度的關系,還有一個是獲取判斷文本寬度和容器寬度的比例關系,因為文本越長,需要滾動的時間也越長

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);
  }
})

拿到這些狀態后,我們改一下前面的動畫。

只有data-mul為true的情況下,才執行動畫,并且動畫時長是和--speed成比例的,這樣可以保證所有文本的速度是一致的

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

還有就是只有data-mul為true的情況下才會生成雙份文本

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

這樣判斷以后,就能得到我們想要的效果了

完整代碼可以參考以下鏈接

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

四、元素錨定定位

最后再來一個例子,其實這個方式我平時用的很多了,一個任務列表頁面,我們有時候會遇到這樣的需求,在地址欄上傳入一個 id,例如

https://xxx.com?id=5

然后,根據這個id自動錨定到這個任務上(讓這個任務滾動到屏幕中間)

由于這個任務是通過接口返回渲染的,所以必須等待 dom渲染完全才能獲取到。

圖片圖片

傳統的方式可能又要通過定時器了,這時可以考慮用動畫監聽的方式。

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

然后我們只需要監聽動畫開始事件,判斷一下元素的 id 是否和我們傳入的一致,如果是一致就直接錨定就行了

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

這樣就能準確無誤的獲取到錨定元素并且滾動定位了,效果如下

完整代碼可以參考以下鏈接

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

五、其他注意事項

在實際使用中,有一些要注意一下。

比如,在vue中也可以將這個監聽直接綁定在父級模板上,這樣會更方便

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

還有一點比較重要,很多時候我們用的的可能是CSS scoped,比如

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

如果是這種寫法就需要注意了,因為在編譯過程中,這個動畫名稱會加一些哈希后綴,類似于這樣

所以,我們在animationstart判斷時要改動一下,比如用startsWith

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

這個需要額外注意一下

六、總結一下

是不是從來沒有用過這些方式,趕緊試一試吧,相信會有不一樣的感受,下面總結一下

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

總的來說,這是一個非常實用的小技巧,雖然沒有純 CSS那么“高級”,但是卻是最“實用”的。

[1]CSS els with animation (juejin.cn): https://code.juejin.cn/pen/7323120296334983187

[2]CSS els with animation (codepen.io): https://codepen.io/xboxyan/pen/gOELbxV

[3]CSS marquee width animation (juejin.cn): https://code.juejin.cn/pen/7323125690973945897

[4]CSS marquee width animation (codepen.io): https://codepen.io/xboxyan/pen/YzgGmLb

[5]CSS scrollIntoView with animation (juejin.cn): https://code.juejin.cn/pen/7323419904693469234

[6]CSS scrollIntoView with animation (codepen.io): https://code.juejin.cn/pen/7323419904693469234

責任編輯:武曉燕 來源: 前端偵探
相關推薦

2010-09-13 16:46:29

JavaScriptHTML DOM節點

2025-10-28 01:45:00

setTimeouAPI日志

2010-09-28 13:50:20

2020-04-03 14:25:55

diff Meld工具

2024-06-19 10:01:50

2020-10-12 08:56:47

Virtual dom

2021-07-07 08:01:48

CSS DOM解析

2010-09-28 13:40:52

DOM元素

2020-12-02 08:31:47

Elasticsear

2022-06-17 11:10:43

PandasPolarsPython

2021-03-05 22:57:25

遞歸閉包 Python

2024-03-11 08:21:49

2012-06-04 14:47:42

HTML5

2017-12-19 15:54:28

工作流Git二分法

2015-12-23 09:16:33

ios動畫渲染機制

2015-12-30 14:16:05

iOS動畫視圖渲染

2017-08-11 17:00:00

前端事件監聽DOM變動

2022-09-22 09:44:39

技術元素

2021-04-09 18:01:03

前端ReactDOM

2012-07-20 10:32:32

程序員
點贊
收藏

51CTO技術棧公眾號

欧美日韩久久一区| 99久久伊人网影院| 欧美超级免费视 在线| 亚洲欧美激情一区二区三区| 亚洲婷婷噜噜| av在线这里只有精品| 国产成人高清激情视频在线观看| 手机看片国产日韩| 6080成人| 欧美午夜精品电影| 日本一本中文字幕| jizz日韩| 大桥未久av一区二区三区中文| 538国产精品一区二区免费视频| 免费成人深夜天涯网站| 91蝌蚪精品视频| 欧美午夜精品免费| 日韩av综合在线观看| 日本中文字幕在线2020| 99热在这里有精品免费| 成人精品视频在线| 最新中文字幕一区| 欧美日韩综合| 伊人精品在线观看| 99re这里只有| 国产精品毛片aⅴ一区二区三区| 精品久久久久久久中文字幕 | 国产精品高潮呻吟久久av野狼| 欧美风情第一页| 国产精品中文字幕亚洲欧美| 亚洲成人中文字幕| 天美一区二区三区| 懂色aⅴ精品一区二区三区| 午夜精品久久久久久久99水蜜桃| 做爰高潮hd色即是空| 黄色在线免费观看大全| 99国产精品久久久久久久久久久| 亚洲最大成人免费视频| 中文字幕一区二区三区免费看| 99国产成+人+综合+亚洲欧美| 麻豆一区二区在线观看| 免费看的黄色录像| 激情五月综合网| 亚洲精品一区二区久| 秘密基地免费观看完整版中文 | 久久uomeier| 亚洲第一久久影院| 欧美人与动牲交xxxxbbbb| 网友自拍视频在线| 中文av一区二区| 欧美一区二区视频17c| 日韩在线观看视频网站| 国产宾馆实践打屁股91| 97se在线视频| 国产又粗又猛又黄| 精品一区二区三区在线观看| 国产精品啪视频| 国产99久久久| 视频一区免费在线观看| 欧美制服第一页| 日韩精品在线观看免费| 国产精品久久久久久久久久妞妞| 91精品国产91久久久| 好吊操这里只有精品| 激情文学一区| 91禁外国网站| 国产男人搡女人免费视频| 日本欧美一区二区在线观看| 国产精品久久久久影院日本| 一级特黄录像免费看| 国产在线视频一区二区三区| 95av在线视频| 日本高清视频网站| 久久综合九色综合欧美亚洲| 日本三级中国三级99人妇网站| 国产主播福利在线| 国产精品超碰97尤物18| 青草全福视在线| 福利成人导航| 91国产福利在线| 黄色一级片免费的| 亚洲精品一区二区三区中文字幕| 亚洲成人中文字幕| 性欧美精品中出| 66国产精品| 26uuu另类亚洲欧美日本老年| 最近免费中文字幕大全免费版视频| 日本怡春院一区二区| 91色视频在线观看| 色窝窝无码一区二区三区成人网站| av电影天堂一区二区在线| 日韩精品电影网站| av网站在线看| 狠狠久久五月精品中文字幕| 免费一区二区三区在线观看| 8848成人影院| 一本色道久久综合狠狠躁篇怎么玩| 成人性视频免费看| 韩国欧美一区| 国产精品99久久久久久www| 国产原创中文av| zzijzzij亚洲日本少妇熟睡| 亚洲一二三区在线| 51精品视频| 欧美亚日韩国产aⅴ精品中极品| 一级 黄 色 片一| 一区二区三区日本久久久 | 精品国产免费久久久久久尖叫| 欧美日韩影视| 亚洲伊人伊色伊影伊综合网| 少妇高清精品毛片在线视频| 欧美日韩午夜电影网| 亚洲另类欧美自拍| 免费在线看黄网址| 精品影视av免费| 开心色怡人综合网站| 菠萝菠萝蜜在线视频免费观看| 欧美视频在线视频| 色欲欲www成人网站| 成人国产精品一级毛片视频| 午夜精品久久久久久99热| 6—12呦国产精品| 久久久久久久久久久久久久久99| 久久香蕉视频网站| 欧美一区二区三区婷婷| 日韩精品视频在线免费观看| 久操免费在线视频| 精品在线免费观看| 亚洲精品不卡| 日韩电影免费观看高清完整版| 精品欧美一区二区在线观看| 91香蕉视频污在线观看| 久久久水蜜桃av免费网站| 国产精品国产精品国产专区蜜臀ah | 国产一区二区三区在线播放免费观看| 久久综合亚洲色hezyo国产| 久久精品999| 亚洲一区二区三区四区中文| 日韩成人av电影| 亚洲日韩中文字幕| 你懂的国产视频| 波多野结衣一区二区三区| 国产免费xxx| 91成人精品观看| 日韩资源在线观看| 中文字幕在线视频免费| 欧美国产一区二区| wwwwxxxx日韩| 日韩国产专区| 国产欧美一区二区三区久久人妖 | 久久在线免费观看视频| 7777久久亚洲中文字幕| 最好看的中文字幕久久| 亚洲天堂网2018| 国产国产精品| 成人乱人伦精品视频在线观看| 欧美尤物美女在线| 91精品国产全国免费观看| 少妇被躁爽到高潮无码文| 韩国午夜理伦三级不卡影院| av电影一区二区三区| 国产免费av国片精品草莓男男| 麻豆成人在线看| 丰满少妇被猛烈进入| 亚洲国产精品久久久久秋霞影院| 人妻激情偷乱频一区二区三区| 在线成人欧美| 欧美18视频| 韩国理伦片久久电影网| 精品国产一区二区三区久久久狼| 国产精品亚洲lv粉色| 一级做a爱片久久| 特级特黄刘亦菲aaa级| 制服诱惑一区二区| 日本欧洲国产一区二区| 成人短视频软件网站大全app| 久久福利网址导航| 四虎在线视频免费观看| 色综合久久久久综合体| 九九热免费在线| 国产福利视频一区二区三区| 成熟丰满熟妇高潮xxxxx视频| 久久99性xxx老妇胖精品| 国产精品第二页| 污影院在线观看| 国产视频亚洲视频| 亚洲图片小说视频| 亚洲午夜私人影院| 精品无码在线观看| 国产精品一区二区不卡| 欧美精品一区免费| 99久久精品费精品国产风间由美| 7777精品伊久久久大香线蕉语言| av毛片午夜不卡高**水| 中文字幕亚洲自拍| 亚洲高清视频网站| 欧美在线观看视频一区二区| 久久黄色免费网站| 中文字幕欧美日韩一区| 岛国大片在线免费观看| 日韩精品乱码av一区二区| 一区二区三区在线观看www| 久久久亚洲欧洲日产| 成人激情视频小说免费下载| 亚洲插插视频| 久久99国产精品自在自在app| 男男激情在线| 欧美一区二区视频观看视频| 久草视频一区二区| 亚洲综合色噜噜狠狠| 91无套直看片红桃在线观看| a在线播放不卡| 污视频在线观看免费网站| 久久一日本道色综合久久| 久久av高潮av| 99热在线成人| 日韩欧美亚洲v片| 久久精品论坛| 丁香五月网久久综合| 久久久加勒比| 隔壁老王国产在线精品| 99免在线观看免费视频高清| 亚洲精品国产精品国产自| 国产精品视频久久久久久| 欧美中文字幕亚洲一区二区va在线| 久久久久久国产精品视频| 中文字幕一区在线观看视频| www.色天使| 国产98色在线|日韩| 涩涩网站在线看| 蜜桃av一区二区三区电影| 国产裸体舞一区二区三区| 99热在线精品观看| 日韩a级在线观看| 午夜久久黄色| 成人高清dvd| 亚洲精品va| 椎名由奈jux491在线播放| 色呦哟—国产精品| 日韩中文字幕一区二区| 国产成人1区| 日韩一本精品| 精品免费在线| 亚洲欧美99| 97精品一区二区| 一本一生久久a久久精品综合蜜| 红桃视频在线观看一区二区| 欧美成人第一区| 九九亚洲视频| 日本在线一区| 国产一区二区三区四区二区 | 伊人国产精品视频| 精品制服美女久久| 欧美污在线观看| 国产精品一区二区在线观看网站| 日本黄大片一区二区三区| 精品一区二区在线看| 永久免费黄色片| 国产成人亚洲综合色影视| gogo亚洲国模私拍人体| 国产成人av电影在线| 国产伦精品一区二区三区88av| 大白屁股一区二区视频| youjizz.com日本| 91在线国内视频| 亚洲久久久久久久| 国产精品色噜噜| 国产小视频免费观看| 日本欧美久久久久免费播放网| 欧美成人免费高清视频| 日韩精品免费专区| 一级片视频免费观看| 精品一区二区三区免费视频| 久久香蕉国产线看观看av| 国产在线观看网站| 日韩中文字幕在线免费观看| 日本在线www| 蜜臀久久99精品久久久久久宅男| 日本成人不卡| 欧美亚洲日本黄色| 99精品在免费线偷拍| 91久久国产综合久久91精品网站| 亚洲成人五区| 久久av免费一区| 欧美久久综合网| 91免费国产精品| 国产一区二区你懂的| 性欧美极品xxxx欧美一区二区| 精品亚洲porn| 久久久久国产精品无码免费看| 久久老女人爱爱| 亚洲欧洲综合网| 亚洲国产一区视频| 国产精品成人无码| 欧美mv和日韩mv的网站| 精品久久av| 欧美美女操人视频| 亚洲性受xxx喷奶水| 成人夜晚看av| 欧美女王vk| 久久久无码中文字幕久...| 亚洲尤物影院| 91丝袜超薄交口足| 久久青草国产手机看片福利盒子 | 中日韩在线观看视频| 欧美一区二区三区视频在线观看| 天天操天天射天天| 久久精品成人动漫| 亚洲黄色免费看| 99re在线| 久久理论电影| 香港三级韩国三级日本三级| 国产一区二区三区在线看麻豆| 国产熟妇搡bbbb搡bbbb| 亚洲一区二区三区中文字幕| 探花国产精品一区二区| 亚洲电影在线观看| 伊人春色在线观看| 国产精品久久色| 综合色就爱涩涩涩综合婷婷| 91网站在线观看免费| 久久精品国产色蜜蜜麻豆| 亚洲一区二区三区无码久久| 一区二区三区四区乱视频| 中文字幕一区二区在线视频 | 亚洲深夜激情| 曰本三级日本三级日本三级| 国产精品久久久久久户外露出| 国产一级片毛片| 亚洲国产中文字幕久久网| 岛国成人毛片| 国产精品永久免费观看| 国产剧情在线观看一区| 啊啊啊一区二区| 不卡视频在线看| 国产亚洲色婷婷久久99精品| 91精品国产综合久久香蕉麻豆| 国产小视频免费在线网址| 97av视频在线| 欧美在线导航| av免费观看大全| 成人激情小说乱人伦| 精品一区二区三区四| 精品少妇一区二区三区日产乱码| 国产超级va在线视频| 91免费视频国产| 久久久久免费av| 亚洲综合20p| 一区二区三区精密机械公司| 国产亲伦免费视频播放| 久久久精品在线| 欧美区一区二区| 大伊香蕉精品视频在线| 成人美女在线观看| 亚洲一区欧美在线| 精品爽片免费看久久| 亚洲十八**毛片| 相泽南亚洲一区二区在线播放| 日日摸夜夜添夜夜添亚洲女人| 波多野结衣a v在线| 欧美日韩在线不卡| 午夜激情视频在线| 91丨九色丨国产在线| 国产精品红桃| 中文视频在线观看| 欧美特黄级在线| aiai在线| 成人情视频高清免费观看电影| 精品成人一区| 成人精品999| 欧美丰满一区二区免费视频 | 欧美美女一区| 182午夜视频| 亚洲成年人影院| 国产无套粉嫩白浆在线2022年| 国产精品久久久久一区二区 | 国产精品久久影院| 国产乱码精品一区二区三区精东| 欧美成aaa人片免费看| 精品亚洲自拍| 国产喷水theporn| 亚洲综合无码一区二区| 五月色婷婷综合| 国产精品丝袜一区二区三区| 亚洲字幕久久| 国产ts丝袜人妖系列视频| 欧美亚洲图片小说| 青青青国内视频在线观看软件| 免费精品视频一区| 久久99久久久欧美国产| 久久精品国产亚洲av无码娇色 | 亚洲视频1区| 亚洲区一区二区三| 亚洲高清在线观看| 欧美视频在线视频精品| 国产美女在线一区| 欧美激情一区二区在线| 六月丁香综合网| 国产精品麻豆va在线播放| 国色天香一区二区|