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

原生JS實現(xiàn)慣性滾動,給鼠標滾輪增加阻尼感,縱享絲滑

開發(fā) 前端
本文將教會你如何讓鼠標滾輪也能夠絲滑地操作網(wǎng)頁,帶來更舒適的頁面慣性滾動體驗,同時講解其中技術(shù)原理與細節(jié),用最少量的代碼實現(xiàn) JS 鼠標慣性滾動。

前言

當我們在移動終端上滑動頁面,手指離開屏幕后,頁面的滾動并不會馬上停止,而是在一段時間內(nèi)繼續(xù)保持慣性滾動,并且滑動阻尼感和持續(xù)時間與滑動手勢的幅度成正比。

這種物理學效果的應用在移動端普及后,大部分筆記本觸控板也都支持同樣的效果。

然而鼠標滾輪的傳感器通常采用光電或機械的方式運作,由一個旋轉(zhuǎn)軸和一個傳感器組成,旋轉(zhuǎn)軸通常無法做出細微的距離控制,使得距離檢測更像是段落式的,這些信號在傳輸?shù)接嬎銠C后,并不能實現(xiàn)絲滑的滾動。

本文將教會你如何讓鼠標滾輪也能夠絲滑地操作網(wǎng)頁,帶來更舒適的頁面慣性滾動體驗,同時講解其中技術(shù)原理與細節(jié),用最少量的代碼實現(xiàn) JS 鼠標慣性滾動。

使用插件

要實現(xiàn)平滑的慣性滾動可以引入 lenis 這個庫,使用非常簡單:

npm i @studio-freight/lenis
const lenis = new Lenis()

function raf(time) {
  lenis.raf(time)
  requestAnimationFrame(raf)
}

requestAnimationFrame(raf)

演示效果可在官方 Demo 中體驗:https://lenis.studiofreight.com/

當然本文不會這么簡單就結(jié)束,接下來我將帶你深入其中原理,動手來造一造這個輪子,代碼并不復雜,一起往下看吧。

實現(xiàn)原理

首先需要利用 DOM 事件禁止鼠標滾動,轉(zhuǎn)為 JS 控制。通過滾輪事件中的 deltaY、deltaX 值獲取到最終滾動距離,瀏覽器幀繪制函數(shù) requestAnimationFrame 來逐幀設(shè)置頁面的 scrollTop 達到模擬滾動的效果,并利用線性插值或緩動函數(shù)等數(shù)學方法來計算變化過程中的值,最終達到平滑地滾動效果。

滾輪事件

滾輪事件(wheel) 取代了已被棄用的非標準 mousewheel 事件,代碼如下。

const onWeel = (e) => {
    e.preventDefault(); // 阻止默認事件,停止?jié)L動
}
const el = document.documentElement
el.addEventListener('wheel', onWeel); // { passive: false }

幀繪制函數(shù)

window.requestAnimationFrame() 告訴瀏覽器——你希望執(zhí)行一個動畫,并且要求瀏覽器在下次重繪之前調(diào)用指定的回調(diào)函數(shù)更新動畫。

通過 JS 模擬頁面滾動實際可以看做是在執(zhí)行一個連續(xù)的動畫,這時候肯定就離不開與瀏覽器動畫息息相關(guān)的 requestAnimationFrame 函數(shù)了,我們需要知道它的回調(diào)函數(shù)會傳入一個 DOMHighResTimeStamp 參數(shù),該參數(shù)與 performance.now() 返回值相同,表示開始執(zhí)行回調(diào)函數(shù)的時間。

const silky = new Silky()

function raf(time) {
  silky.raf(time);
  requestAnimationFrame(raf);
}
requestAnimationFrame(raf);

通過接收函數(shù)傳入的參數(shù) time,我們可以計算出每一幀持續(xù)時間,代碼如下。

class Silky {
  timeRecord = 0 // 回調(diào)時間記錄

  constructor({ content }) {
    this.content = content || document.documentElement
    const onWeel = (e) => {
      e.preventDefault(); // 阻止默認事件,停止?jié)L動
    }
    this.content.addEventListener('wheel', onWeel, { passive: false });
  }
  raf(time) {
    const deltaTime = time - (this.timeRecord || time);
    this.timeRecord = time;
    console.log(deltaTime * 0.001) // 單位轉(zhuǎn)化為秒,該值后面計算時會用到
  }
}

監(jiān)聽事件的第三個參數(shù)需設(shè)置為非被動模式,保證 preventDefault 可觸發(fā)。

虛擬滾動

添加如下一些參數(shù),并在類中定義 onVirtualScroll 方法,用于設(shè)置動畫更新。

class Silky {
  timeRecord = 0 // 回調(diào)時間記錄
  targetScroll = 0 // 當前滾動位置
  animatedScroll = 0 // 動畫滾動位置
  from = 0 // 記錄起始位置
  to = 0 // 記錄目標位置
  ........
  onVirtualScroll(target) {
    this.to = target;
    this.onUpdate = (value) => {
      this.animatedScroll = value; // 記錄動畫距離
      this.content.scrollTop = this.animatedScroll; // 設(shè)置滾動
      this.targetScroll = value; // 記錄滾動后的距離
    }
  }
}

在滾動事件中調(diào)用 onVirtualScroll:

const onWeel = (e) => {
    e.preventDefault(); // 阻止默認事件,停止?jié)L動
    this.onVirtualScroll(this.targetScroll + e.deltaY);
}

定義一個 advance 方法在每一幀計算并執(zhí)行 onUpdate 更新視圖,不過我們現(xiàn)在還未進行緩動計算,所以只需要把目標位置賦值即可。

raf(time) {
  ......
  this.advance()
}
advance() {
  const value = this.to
  this.onUpdate?.(value);
}

此時頁面就可以像往常一樣滾動了,并且是不依賴系統(tǒng)默認事件的,由 JS 代理滾動效果,接下來我們繼續(xù)往方法里處理如何平滑過渡。

線性插值實現(xiàn)阻尼感

線性插值是一種簡單的插值方法,它使用線性函數(shù)來計算過渡過程中的值。簡單來說,它是一種通過直線來連接兩個點,在兩個點之間按比例計算中間的數(shù)值。線性插值可以用于各種場景,比如在圖形學中計算兩個點之間的中間點,或者在動畫中實現(xiàn)平滑的過渡效果,代碼實現(xiàn):

const lerp = (start, end, amt) => (1 - amt) * start + amt * end; // 對兩個值進行線性插值 (0 <= amt <= 1)

我們將該方法用于每一幀計算當中,默認差值強度為 0.1:

advance() {
    const value = lerp(this.targetScroll, this.to, this.lerp);
    this.onUpdate?.(value);
}

這樣就實現(xiàn)了一個平滑的慣性滾動效果,但實際上由于幀率是可變的(受屏幕刷新率影響),每幀之間的插值距離也會有所不同,要進一步優(yōu)化阻尼效果還需要在線性插值的基礎(chǔ)上增加阻尼系數(shù)和時間步長,目前大部分顯示器在 60 FPS 左右就能讓人眼的感受流暢不卡頓了,修改代碼如下:

const damp = (x, y, lambda, dt) => lerp(x, y, 1 - Math.exp(-lambda * dt)) // 阻尼效果

advance(deltaTime) {
    const value = damp(this.targetScroll, this.to, this.lerp * 60, deltaTime)
    this.onUpdate?.(value);
}

deltaTime 在前面講 requestAnimationFrame 已經(jīng)計算過了,只需要在調(diào)用時傳入 advance 當中,單位需轉(zhuǎn)化為秒。

修改后可能你并不會感覺到有明顯的差異,如果在高刷新率的顯示器上兩者的流暢度差異就會很明顯了。關(guān)于 damp 函數(shù)的具體原理較為復雜,lenis 的作者參考了一篇2016年的文章來實現(xiàn)的,鏈接我放在了文末。

緩動函數(shù)

除了使用線性插值來實現(xiàn)平滑滾動,還可以使用常見的緩動函數(shù)來計算。

const clamp = (min, input, max) => Math.max(min, Math.min(input, max)) // 獲取一個中間值

class Silky {
  ........
  currentTime = 0 // 記錄當前時間
  duration = 0 // 滾動動畫的持續(xù)時間
  ........
  onVirtualScroll(target) {
    this.currentTime = 0;
    this.from = this.animatedScroll;
    .........
  }
  advance(deltaTime) {
    let value = 0
    if (this.lerp) {
      value = damp(this.targetScroll, this.to, this.lerp * 60, deltaTime)
    } else {
      this.currentTime += deltaTime
      const linearProgress = clamp(0, this.currentTime / this.duration, 1)
      const easedProgress = this.easing ? this.easing(linearProgress) : 1
      value = this.from + (this.to - this.from) * easedProgress
    }
    this.onUpdate?.(value);
  }
}

上面代碼中 linearProgress 表示一個從 0 到 1 的線性進度值,通過代入緩動函數(shù)計算得出 easedProgress 緩動進度,最后將緩動進度乘以起始值和目標值之間的差,加上起始值而得到當前幀應該推進的值。

不同的緩動函數(shù)會有不同的效果,可以傳入不同的 easing 函數(shù)來改變。

// 緩入緩出函數(shù)(ease-in-out)慢快慢
let easing = (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t))
// 指數(shù)反向緩動函數(shù)(easeOut)先快后慢
let easing = (t) => 1 - Math.pow(1 - t, 2)

例子

以上代碼核心的部分就都已經(jīng)實現(xiàn)了,除 lenis 官方的演示 Demo 外,本文也舉兩個應用慣性滾動的例子看看實際效果如何。

視頻滾動

在該例子中我使用了 scrolly-video 這個庫,它能將視頻每一幀解析繪制到 Canvas 上,然后基于滾動控制進度,實現(xiàn)效果如下:

Gif 圖幀率有限,可以前往在線體驗效果,視頻加載需要一點時間。

在線查看:https://code.juejin.cn/pen/7272280679629946939

scrolly-video 插件:https://www.npmjs.com/package/scrolly-video

年終總結(jié)

去年我做了一個掘金 2022 年終總結(jié)網(wǎng)頁,采用的是滾動控制動畫的交互,但效果在鼠標操作時體驗并不好,之前的卡頓感強烈,動畫細節(jié)也容易丟失:

現(xiàn)在加上這個慣性滾動,體驗明顯就好很多了,在線查看演示:https://code.juejin.cn/pen/7178839138609659959

完整代碼

下面貼出文章的完整代碼,整個 demo 的代碼差不多 50 行左右:

const lerp = (start, end, amt) => (1 - amt) * start + amt * end; // 對兩個值進行線性插值 (0 <= amt <= 1)
const damp = (x, y, lambda, dt) => lerp(x, y, 1 - Math.exp(-lambda * dt)) // 阻尼效果
const clamp = (min, input, max) => Math.max(min, Math.min(input, max)) // 獲取一個中間值

class Silky {
  timeRecord = 0 // 回調(diào)時間記錄
  targetScroll = 0 // 當前滾動位置
  animatedScroll = 0 // 動畫滾動位置
  from = 0 // 記錄起始位置
  to = 0 // 記錄目標位置
  lerp // 插值強度 0~1
  currentTime = 0 // 記錄當前時間
  duration = 0 // 滾動動畫的持續(xù)時間

  constructor({ content, lerp, duration, easing = (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)) } = {}) {
    this.lerp = isNaN(lerp) ? 0.1 : lerp
    this.content = content || document.documentElement
    this.duration = duration || 1;
    this.easing = easing;
    const onWeel = (e) => {
      e.preventDefault(); // 阻止默認事件,停止?jié)L動
      this.onVirtualScroll(this.targetScroll + e.deltaY);
    }
    this.content.addEventListener('wheel', onWeel, { passive: false });
  }
  raf(time) {
    if (!this.isRunning) return;
    const deltaTime = time - (this.timeRecord || time);
    this.timeRecord = time;
    this.advance(deltaTime * 0.001)
  }
  onVirtualScroll(target) {
    this.isRunning = true
    this.to = target;
    this.currentTime = 0;
    this.from = this.animatedScroll;
    this.onUpdate = (value) => {
      this.animatedScroll = value; // 記錄動畫距離
      this.content.scrollTop = this.animatedScroll; // 設(shè)置滾動
      this.targetScroll = value; // 記錄滾動后的距離
    }
  }
  advance(deltaTime) {
    let completed = false
    let value = 0
    if (this.lerp) {
      value = damp(this.targetScroll, this.to, this.lerp * 60, deltaTime)
      if (Math.round(this.value) === Math.round(this.to)) {
        completed = true
      }
    } else {
      this.currentTime += deltaTime
      const linearProgress = clamp(0, this.currentTime / this.duration, 1)
      completed = linearProgress >= 1
      const easedProgress = completed ? 1 : this.easing(linearProgress)
      value = this.from + (this.to - this.from) * easedProgress
    }
    this.onUpdate?.(value);
    if (completed) this.isRunning = false
  }
}

基本使用:

const silky = new Silky()

function raf(time) {
  silky.raf(time);
  requestAnimationFrame(raf);
}
requestAnimationFrame(raf);

實例化接收參數(shù)說明:

當然這只是最基礎(chǔ)的例子,缺少一些邊界處理等,如在實際生產(chǎn)項目中使用,推薦安裝前面提到的 lenis 這個庫,它擁有更完善的功能,基礎(chǔ)使用方法和本例是一樣的。

碼上掘金中查看完整代碼及演示:

https://code.juejin.cn/pen/7272935569129209910

參考資料

lenis 開源地址: https://github.com/studio-freight/lenis

使用 LERP 進行幀速率獨立阻尼 FRAME RATE INDEPENDENT DAMPING USING LERP:「鏈接」

責任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2024-03-26 10:30:37

Mybatis擴展庫API

2021-01-18 18:42:33

工具調(diào)優(yōu)開發(fā)

2022-03-18 13:59:46

緩存RedisCaffeine

2022-12-20 09:09:27

ViteWebpack

2022-11-03 07:49:52

JS原生元素

2020-06-15 18:00:36

transformbannerJavascript

2021-05-10 20:58:11

數(shù)據(jù)庫擴容用戶

2022-08-16 08:37:09

視頻插幀深度學習

2025-03-03 12:00:00

JavaScriptfor 循環(huán)語言

2009-08-17 10:26:39

鼠標手勢

2009-08-22 20:25:05

Ubuntu安裝VMw

2024-05-21 10:28:51

API設(shè)計架構(gòu)

2023-03-03 17:00:00

部署Linux內(nèi)核

2022-12-19 14:53:07

模型訓練

2009-09-02 19:11:42

C#鼠標滾輪

2021-07-14 13:46:28

KubeVela阿里云容器

2025-07-03 09:56:49

2020-07-22 15:15:28

Vue前端代碼
點贊
收藏

51CTO技術(shù)棧公眾號

国产综合久久久久影院| 三级黄色片在线观看| 欧美精品少妇| 午夜在线播放视频欧美| 亚洲欧美制服丝袜| 久热精品在线播放| 日本美女高清在线观看免费| 国产综合久久久久影院| 成人羞羞网站入口| 一区二区三区在线视频观看58 | 日本高清一二三区| 欧美18xxxx| 欧美色老头old∨ideo| 最近中文字幕免费mv| 男女网站在线观看| 精品在线观看免费| 8050国产精品久久久久久| 日韩毛片无码永久免费看| 亚洲国产欧美国产第一区| 一本大道久久a久久综合| 男同互操gay射视频在线看| 日韩三级电影网| 国产一区二区h| 欧美综合国产精品久久丁香| 欧美精品99久久久| 国产成人精品三级高清久久91| 欧美一级片免费看| www.99在线| 精品三级久久| 亚洲一区在线播放| 男女激烈动态图| 成人影视在线播放| 91美女视频网站| 1区1区3区4区产品乱码芒果精品| 国产一级淫片a视频免费观看| 欧美色一级片| 久久天天躁狠狠躁夜夜爽蜜月 | 精品国产va久久久久久久| 久久看片网站| 91国产美女视频| 久久久无码一区二区三区| 日韩在线观看一区| 亚洲视频在线视频| 国产麻豆天美果冻无码视频| 97人人澡人人爽91综合色| 欧美丰满嫩嫩电影| www.色就是色.com| 欧洲亚洲精品久久久久| 欧美日精品一区视频| 最近免费中文字幕中文高清百度| 国产拍在线视频| 亚洲自拍偷拍麻豆| 国产高清不卡无码视频| 九色porny在线| 国产精品盗摄一区二区三区| 日韩高清国产一区在线观看| 国产乱子伦三级在线播放| 久久这里只有精品6| 久久99国产精品| 欧美一级做性受免费大片免费| 国产成人精品影视| 懂色中文一区二区三区在线视频| 精品毛片在线观看| 国产成人精品aa毛片| 99一区二区三区| 黄色美女一级片| 99久久久久免费精品国产| 噜噜噜噜噜久久久久久91| 免费黄网站在线观看| 国产精品丝袜91| 四虎永久免费网站| av免费在线免费| 亚洲成人免费看| 国产欧美高清在线| 黑人一区二区三区| 欧美一区二区三区视频免费| 国产午夜在线一区二区三区| 日韩av三区| 中文国产亚洲喷潮| a级片在线观看免费| 极品少妇一区二区三区| 日韩av黄色在线观看| 影音先锋国产在线| 国产不卡视频在线播放| 久久国产精品亚洲va麻豆| www.视频在线.com| 亚洲女同女同女同女同女同69| www.av毛片| 浪潮色综合久久天堂| 69p69国产精品| 久草免费资源站| 欧洲美女日日| 色综合久久天天综线观看| 91看片在线播放| 免费欧美日韩| 91在线观看免费高清| 精品女同一区二区三区| 9i在线看片成人免费| 玖玖玖精品中文字幕| aaa日本高清在线播放免费观看| 久久精品视频一区二区| 韩国黄色一级大片| av色在线观看| 一本久久a久久精品亚洲| 一道本视频在线观看| 精品一区二区三区四区五区| 亚洲国产精品久久久久| 亚洲性猛交xxxx乱大交| 色喇叭免费久久综合网| 欧美精品aaa| 国产成人自拍偷拍| 国产麻豆精品一区二区| 91传媒免费看| 性xxxx18| 亚洲欧美色一区| 国产精品50p| 欧美高清影院| 亚洲人成网站999久久久综合| 欧美肥妇bbwbbw| 好看的日韩av电影| 国产精品久久久一区| 国产成人a人亚洲精品无码| 91尤物视频在线观看| youjizz.com亚洲| 亚洲一区二区在| 欧美孕妇孕交xxⅹ孕妇交| 中文字幕日韩一区| 国产最新免费视频| 欧美亚洲综合视频| 亚洲美女中文字幕| 日本a级片视频| 日韩精品一区第一页| 精品国产一区二区三区日日嗨| 日韩在线免费电影| 色婷婷久久一区二区三区麻豆| 一卡二卡三卡四卡五卡| 国产亚洲精品美女久久久久久久久久| 欧美国产日韩精品| 夜夜躁狠狠躁日日躁av| 成人久久18免费网站麻豆| 亚洲午夜精品福利| 伊人久久综合一区二区| 欧美mv和日韩mv国产网站| 日本美女黄色一级片| 亚洲一区久久| 国产一区福利视频| 亚洲区欧洲区| 91精品国产综合久久福利| 国产sm调教视频| 性欧美精品高清| 精品一卡二卡三卡四卡日本乱码 | 网站永久看片免费| 奇米影视7777精品一区二区| 久久久久久欧美精品色一二三四| 四虎亚洲成人| 91麻豆精品国产91| 欧洲美女女同性互添| 日本不卡123| 欧美日韩另类综合| 成人福利一区二区| 在线中文字幕日韩| 看黄色一级大片| 国产欧美日韩在线视频| 少妇高潮喷水久久久久久久久久| 精品视频高潮| 亚洲91精品在线观看| 日本天堂影院在线视频| 日韩欧美国产成人| 玖玖爱在线观看| 久久狠狠婷婷| 日韩免费av电影| 97人人做人人爽香蕉精品| 精品国内亚洲在观看18黄| 国产乱人乱偷精品视频| 亚洲少妇最新在线视频| 国产精品99久久久精品无码| 欧美高清日韩| 国产无套精品一区二区| 欧美特大特白屁股xxxx| 色综合伊人色综合网| 91国在线视频| 亚洲自拍偷拍九九九| 少妇户外露出[11p]| 香蕉精品999视频一区二区 | 欧美精品免费在线| 亚洲欧美黄色片| 狠狠干狠狠久久| 国产sm在线观看| 视频一区中文字幕国产| 香蕉久久免费影视| 综合久久av| 国产69精品久久久久99| 日本在线一二三| 日韩欧美精品免费在线| 日韩成人在线视频观看| 天天操天天射天天爽| 91蜜桃网址入口| 污片在线免费看| 国产精品jizz在线观看美国| 国产精品v欧美精品∨日韩| 亚洲va中文在线播放免费| 精品国产区一区二区三区在线观看| 国产黄频在线观看| 色综合久久中文综合久久97| 国产91在线播放九色| 成人涩涩免费视频| 欧美午夜aaaaaa免费视频| 欧美一区网站| 欧美在线一二三区| 色播一区二区| 国产成人精品一区二区在线| 国产在线激情| 伊人久久大香线蕉av一区二区| 国产免费黄色录像| 日韩欧美在线观看| 中文字幕在线有码| 久久精品亚洲乱码伦伦中文| 亚洲av无码久久精品色欲| 蜜臀av性久久久久蜜臀aⅴ| www.日本少妇| 97在线精品| 欧美激情论坛| 岛国av一区| 国产精彩精品视频| 理论不卡电影大全神| 精品国产一区久久久| 青青草在线播放| 日韩欧美国产系列| 亚洲在线观看av| 日韩欧美999| 久久中文字幕免费| 亚洲图片自拍偷拍| 欧美丰满熟妇bbbbbb| 国产亚洲精品福利| av无码一区二区三区| 国内精品久久久久影院一蜜桃| 一区二区三区 日韩| 国产精品一区毛片| 亚洲一区 在线播放| 成人看的羞羞网站| 欧美日韩在线一二三| 欧美自拍一区| 国产乱码精品一区二区三区不卡| 日韩精品一级毛片在线播放| 国产91精品最新在线播放| 成人在线高清免费| 欧美黑人xxxx| 黄色影院在线看| 欧美大片免费看| www.欧美日本韩国| 久久久精品免费视频| 日本最黄一级片免费在线| 亚洲国产欧美日韩精品| 天堂av手机版| 精品国产3级a| 人妻视频一区二区三区| 日韩一区和二区| 国产农村妇女毛片精品久久| 精品视频一区三区九区| 成人黄色三级视频| 欧美亚洲一区三区| 男人天堂视频网| 在线观看欧美精品| 天堂中文在线网| 色伊人久久综合中文字幕| 天天操天天操天天操天天| 五月天网站亚洲| 日本中文字幕第一页| 欧美性做爰猛烈叫床潮| 中文无码精品一区二区三区| 欧美日韩一区二区在线观看视频| 最近中文在线观看| 欧美日韩你懂的| 国产成人精品毛片| 欧美大片一区二区| 国产18精品乱码免费看| 亚洲国产精品久久久久| 深夜福利免费在线观看| 精品国产一区二区精华| 可以直接在线观看的av| 中文字幕亚洲综合久久| 国产美女福利在线| 欧美—级高清免费播放| 亚洲国产成人二区| 国产日韩精品综合网站| 欧一区二区三区| 国产在线一区二区三区播放| 久草成人资源| 综合久久国产| 久久精品日韩欧美| 激情黄色小视频| 成人黄色大片在线观看| 强伦人妻一区二区三区| 国产精品福利一区| 日本网站在线播放| 欧洲色大大久久| 国产黄色大片网站| 日韩精品久久久久| 在线免费av电影| 欧美在线视频免费播放| 精品69视频一区二区三区| 147欧美人体大胆444| 一区二区小说| 一级黄色录像免费看| 国产精品美女久久久| 中文字幕第21页| 福利视频网站一区二区三区| 30一40一50老女人毛片| 亚洲天天做日日做天天谢日日欢 | 久久久美女毛片 | 欧美国产国产综合| 国产精品6666| 欧美日韩1234| 五月婷婷六月色| 不卡av电影院| 欧美日韩亚洲国产| 国产精品一区二区三区在线观| 精品国产一区二区三区久久久蜜臀 | 天天综合天天干| 7777精品久久久大香线蕉| 午夜一区在线观看| 欧美日韩福利在线观看| 成人免费毛片嘿嘿连载视频…| 国产精品国产三级国产专区53 | 精品一区二区在线看| 国产精品无码网站| 亚洲自拍偷拍麻豆| 国产又粗又猛又黄又爽| 精品国产第一区二区三区观看体验| 黄色小网站在线观看| 日本免费久久高清视频| 51精品国产| 少妇熟女一区二区| 久久久久国内| 人妻精品久久久久中文| 五月激情六月综合| 国产刺激高潮av| 欧美成人网在线| av在线成人| 一区二区三视频| 美腿丝袜在线亚洲一区| www亚洲色图| 色综合久久久久久久| 国产成人三级在线观看视频| 欧美另类在线观看| 亚洲精品v亚洲精品v日韩精品| 亚洲午夜在线观看| 日韩极品在线观看| 深爱五月激情网| 欧美日韩国产一区二区| 色丁香婷婷综合久久| 久久99亚洲热视| 97se亚洲| 成年人免费观看的视频| 精品一区二区在线视频| 久久久久久久久久97| 欧美日韩精品一区二区在线播放| 国际av在线| 成人春色激情网| 欧美最新另类人妖| 亚洲欧美视频二区| 国产精品五月天| www.xxxx国产| 久久久久久久久久久成人| 99国产精品免费网站| 久草视频这里只有精品| 91在线观看污| 日韩免费av网站| 国产亚洲一区二区在线| 精品福利在线| 一区二区三区四区国产| 久久精品国产第一区二区三区| 日本视频在线免费| 制服丝袜中文字幕一区| 欧美xxxxhdvideosex| 国产高清精品一区二区| 国产欧美短视频| 亚洲精品国产一区黑色丝袜| 777亚洲妇女| 青草av在线| 久久久久久久久久久久久9999| 久久亚洲综合| 欧美人禽zoz0强交| 亚洲加勒比久久88色综合| 日韩伦理在线| 亚洲成人精品电影在线观看| 国产成人免费视频| 可以免费在线观看的av| 一区二区欧美亚洲| 精品视频在线一区| 中文字幕无码不卡免费视频| 国产精品久久网站| 亚洲成熟女性毛茸茸| 欧美一级视频一区二区| 91精品国产91久久久久久黑人| 日本人添下边视频免费| 在线精品视频小说1| 精品国产丝袜高跟鞋| 麻豆蜜桃91| 国产一区二区三区精品视频|