3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

移动端开发基本知识之touch.js,FastClick.js源码分析

發布時間:2024/1/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移动端开发基本知识之touch.js,FastClick.js源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題1:300ms延遲問題指的是?

不管在移動端還是PC端,我們都需要處理用戶點擊,這個最常用的事件。但在touch端click事件響應速度會比較慢,在較老的手機設備上會更為明顯(300ms的延遲)。雙擊縮放(double tap to zoom),這也是會有上述 300 毫秒延遲的主要原因。雙擊縮放,顧名思義,即用手指在屏幕上快速點擊兩次,iOS 自帶的 Safari 瀏覽器會將網頁縮放至原始比例。?
假定這么一個場景。用戶在 iOS Safari 里邊點擊了一個鏈接。由于用戶可以進行雙擊縮放或者雙擊滾動的操作,當用戶一次點擊屏幕之后,瀏覽器并不能立刻判斷用戶是確實要打開這個鏈接,還是想要進行雙擊操作。因此,iOS Safari 就等待 300 毫秒,以判斷用戶是否再次點擊了屏幕。鑒于iPhone的成功,其他移動瀏覽器都復制了 iPhone Safari 瀏覽器的多數約定,包括雙擊縮放,幾乎現在所有的移動端瀏覽器都有這個功能。之前人們剛剛接觸移動端的頁面,在欣喜的時候往往不會care這個300ms的延時問題,可是如今touch端界面如雨后春筍,用戶對體驗的要求也更高,這300ms帶來的卡頓慢慢變得讓人難以接受。
那么我們該如何解決這個問題,可能有的同學會想到touchstart事件,這個事件響應速度很快啊,如果說開發的界面上面可點擊的地方很少,要么用戶滑動下手指就觸touchstart事件,也會讓人崩潰的。
問題2:300ms延遲的解決方案?

在參考文獻1中列出了三種方法。

第一種方法:

<meta name="viewport" content="user-scalable=no"/> <meta name="viewport" content="initial-scale=1,maximum-scale=1"/>這個方案有一個缺點,就是必須通過完全禁用縮放來達到去掉點擊延遲的目的,然而完全禁用縮放并不是我們的初衷,我們只是想禁掉默認的雙擊縮放行為,這樣就不用等待300ms來判斷當前操作是否是雙擊。但是通常情況下,我們還是希望頁面能通過 雙指縮放來進行縮放操作,比如放大一張圖片,放大一段很小的文字。
第二種方法:

touch-action:none

跟300ms點擊延遲相關的,是touch-action這個CSS屬性。這個屬性指定了相應元素上能夠觸發的用戶代理(也就是瀏覽器)的默認行為。如果將該屬性值設置為touch-action: none,那么表示在該元素上的操作不會觸發用戶代理的任何默認行為,就無需進行300ms的延遲判斷。

第三種方法:

也就是fastClick解決300ms延遲的問題。

問題3:分析fastClick之前,我們看看zepto的touch.js?

解答:分析fastClick.js之前,我們先對zepto的touch.js進行的分析:

touch.js為每一個實例對象注冊了swipe, tap等事件:

['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown','doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(eventName){//調用的時候只要傳入我們的回調函數就可以了,這一點要注意一下!那么內部會判斷具體的事件類型,可以是如下方式的://'swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown','doubleTap', 'tap', 'singleTap', 'longTap'$.fn[eventName] = function(callback){ return this.on(eventName, callback) }}) })(Zepto)

也就是說可以通過下面的方式為實例注冊事件:

$('body').tap(function(){console.log('taped');});

如何判斷是否是pointer事件:

//是否是指針事件類型,事件類型為'pointer'+type||'mspointer'+typefunction isPointerEventType(e, type){return (e.type == 'pointer'+type ||e.type.toLowerCase() == 'mspointer'+type)} 如何判斷是否是主觸點:

//@isPrimaryTouch表示是touch //表示事件是來自于手指還是手寫筆還是鼠標 //MSPOINTER_TYPE_TOUCH手指;MSPOINTER_TYPE_PEN手寫筆;MSPOINTER_TYPE_MOUSE鼠標function isPrimaryTouch(event){//必須來自于手指,因為zepto是針對touch來說return (event.pointerType == 'touch' ||event.pointerType == event.MSPOINTER_TYPE_TOUCH)//pointerType:一個整數,標識了該事件來自鼠標、手寫筆還是手指&& event.isPrimary}

判斷滑動的方向:

//@swipeDirection首先根據x和y的變換長度來決定是觸發x還是y軸的移動,然后再決定是做滑動還是右滑動function swipeDirection(x1, x2, y1, y2) {return Math.abs(x1 - x2) >=Math.abs(y1 - y2) ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down')}

因為touch.js主要是對觸屏事件進行分析,所以這里主要判斷的是手指touch事件。接下來我們看看在domReady后touch.js主要做了什么:

//表示DOMContentLoaded事件$(document).ready(function(){var now, delta, deltaX = 0, deltaY = 0, firstTouch, _isPointerType//window是否存在MSGesture對象。MSGesture提供了一些方法和屬性代表頁面的一系列交互,如touch,mouse,pen等。詳見IE瀏覽器https://msdn.microsoft.com/en-us/library/windows/apps/hh968035.aspxif ('MSGesture' in window) {gesture = new MSGesture()gesture.target = document.body//target表示:你想要觸發MSGestureEvents的Element對象}$(document)//手勢完全被處理的時候觸發.bind('MSGestureEnd', function(e){var swipeDirectionFromVelocity =//velocityX,velocityY用于判斷元素的移動方向 e.velocityX > 1 ? 'Right' : e.velocityX < -1 ? 'Left' : e.velocityY > 1 ? 'Down' : e.velocityY < -1 ? 'Up' : null;if (swipeDirectionFromVelocity) {//觸發swipe事件touch.el.trigger('swipe')touch.el.trigger('swipe'+ swipeDirectionFromVelocity)}})//觸摸開始touchstart,MSPointerDown,pointerdown.on('touchstart MSPointerDown pointerdown', function(e){if((_isPointerType = isPointerEventType(e, 'down')) &&!isPrimaryTouch(e)) return//如果是往下移動,但是不是isPrimaryTouch那么我們不作處理//http://www.w3cplus.com/css3/adapting-your-webkit-optimized-site-for-internet-explorer-10.htmlfirstTouch = _isPointerType ? e : e.touches[0]//touches:當前位于屏幕上的所有手指的列表。if (e.touches && e.touches.length === 1 && touch.x2) {// Clear out touch movement data if we have it sticking around// This can occur if touchcancel doesn't fire due to preventDefault, etc.//清除touchmove的數據,一般當touchcancel沒有觸發的時候調用(例如,preventDefault)touch.x2 = undefinedtouch.y2 = undefined}now = Date.now()delta = now - (touch.last || now)touch.el = $('tagName' in firstTouch.target ?firstTouch.target : firstTouch.target.parentNode)//觸摸的事件的target表示當前的Element對象,如果當前對象不是Element對象,那么就獲取parentNode對象touchTimeout && clearTimeout(touchTimeout)touch.x1 = firstTouch.pageXtouch.y1 = firstTouch.pageY//x1,y1存儲的是pageX,pageY屬性if (delta > 0 && delta <= 250) touch.isDoubleTap = true//如果兩次觸屏在[0,250]表示雙擊touch.last = nowlongTapTimeout = setTimeout(longTap, longTapDelay)//這里是長按// adds the current touch contact for IE gesture recognitionif (gesture && _isPointerType) gesture.addPointer(e.pointerId);//如果是IE瀏覽器,為new MSGesture()對象添加一個Pointer對象,傳入的是我們的event對象的pointerId的值//把元素上的一個觸點添加到MSGesture對象上!}).on('touchmove MSPointerMove pointermove', function(e){if((_isPointerType = isPointerEventType(e, 'move')) &&!isPrimaryTouch(e)) returnfirstTouch = _isPointerType ? e : e.touches[0]//這時候我們取消長按的事件處理程序,因為這里是pointermove,也就是手勢移動了那么肯定不會是長按了//但是因為我們在pointerdown中不知道是否是長按還是pointermove,所以才默認使用的長按。如果移動了,那么就知道不是長按了cancelLongTap()touch.x2 = firstTouch.pageXtouch.y2 = firstTouch.pageYdeltaX += Math.abs(touch.x1 - touch.x2)deltaY += Math.abs(touch.y1 - touch.y2)//得到兩者在X和Y方向移動的絕對距離}).on('touchend MSPointerUp pointerup', function(e){if((_isPointerType = isPointerEventType(e, 'up')) &&!isPrimaryTouch(e)) return//觸摸結束,這時候我們取消掉長按的定時器,因為我們也已經知道不是長按了,所以取消長按的定時器cancelLongTap()// swipeif ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||(touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))//如果任意一方向移動的距離大于30,那么表示觸發swipe事件。觸發了swipe事件后,我們清除touch列表,也就是設置為touch={}//因為移動結束了,那么必須重置為空swipeTimeout = setTimeout(function() {touch.el.trigger('swipe')touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))touch = {}}, 0)// normal tap//這里是正常的tap事件,last表示上一次點擊的時間,也就是說已經發生了點擊了//last屬性是在touchstart中進行賦值的,因此如果存在那么表示已經點擊過了//但是不管是雙擊還是單擊都會運行到這里的代碼!!!else if ('last' in touch)// don't fire tap when delta position changed by more than 30 pixels,// for instance when moving to a point and back to origin//如果移動距離超過30那么我們不會觸發tap事件,因為觸摸事件不是移動,不能讓他移動了30px了if (deltaX < 30 && deltaY < 30) {// delay by one tick so we can cancel the 'tap' event if 'scroll' fires// ('tap' fires before 'scroll')//tap事件是在scroll之前,所以如果scroll了那么我們取消tap事件tapTimeout = setTimeout(function() {// trigger universal 'tap' with the option to cancelTouch()// (cancelTouch cancels processing of single vs double taps for faster 'tap' response)var event = $.Event('tap')event.cancelTouch = cancelAlltouch.el.trigger(event)//tap會立即觸發// trigger double tap immediately//如果是雙擊,那么我們立即觸發doubleTap事件,這時候我們的touch={}那么后面的singleTap是不會執行的if (touch.isDoubleTap) {if (touch.el) touch.el.trigger('doubleTap')touch = {}}// trigger single tap after 250ms of inactivity//如果不是雙擊,那么此時tap已經觸發了,等待250ms我們再次觸發singleTap事件else {touchTimeout = setTimeout(function(){touchTimeout = nullif (touch.el) touch.el.trigger('singleTap')touch = {}//情況touch對象,因為手指已經離開屏幕了}, 250)}}, 0)} else {touch = {}}//注意:不管是singleTap還是doubleTap,swipe,調用后都會清空touch={},也就是這時候是重新開始的觸摸事件了deltaX = deltaY = 0})// when the browser window loses focus,// for example when a modal dialog is shown,// cancel all ongoing events//觸摸被取消(觸摸被一些事情中斷,比如通知).on('touchcancel MSPointerCancel pointercancel', cancelAll)// scrolling the window indicates intention of the user// to scroll, not tap or swipe, so cancel all ongoing events$(window).on('scroll', cancelAll)})第一步:我們首先看看對于IE瀏覽器的觸屏事件的處理:

//window是否存在MSGesture對象。MSGesture提供了一些方法和屬性代表頁面的一系列交互,如touch,mouse,pen等。 詳見IE瀏覽器https://msdn.microsoft.com/en-us/library/windows/apps/hh968035.aspxif ('MSGesture' in window) {gesture = new MSGesture()gesture.target = document.body//target表示:你想要觸發MSGestureEvents的Element對象}然后在pointerdown和MSPointerdown中為MSGesture對象添加要跟蹤的觸點,這樣我們的gesture.target就可以響應相應的事件了。

if (gesture && _isPointerType) gesture.addPointer(e.pointerId);//如果是IE瀏覽器,為new MSGesture()對象添加一個Pointer對象,傳入的是我們的event對象的pointerId的值//把元素上的一個觸點添加到MSGesture對象上!

同時MSGestureEnd也進行了綁定:

$(document)//手勢完全被處理的時候觸發.bind('MSGestureEnd', function(e){var swipeDirectionFromVelocity =//velocityX,velocityY用于判斷元素的移動方向 e.velocityX > 1 ? 'Right' : e.velocityX < -1 ? 'Left' : e.velocityY > 1 ? 'Down' : e.velocityY < -1 ? 'Up' : null;if (swipeDirectionFromVelocity) {//觸發swipe事件touch.el.trigger('swipe')touch.el.trigger('swipe'+ swipeDirectionFromVelocity)}})其通過event對象的 velocityX,velocityY屬性來判斷手勢的方向

第二步:下面我們主要分析一下瀏覽器的touchstart,MSPointerDown pointerdown事件綁定

//觸摸開始touchstart,MSPointerDown,pointerdown.on('touchstart MSPointerDown pointerdown', function(e){if((_isPointerType = isPointerEventType(e, 'down')) &&!isPrimaryTouch(e)) return//如果是往下移動,但是不是isPrimaryTouch那么我們不作處理//http://www.w3cplus.com/css3/adapting-your-webkit-optimized-site-for-internet-explorer-10.htmlfirstTouch = _isPointerType ? e : e.touches[0]//touches:當前位于屏幕上的所有手指的列表。if (e.touches && e.touches.length === 1 && touch.x2) {// Clear out touch movement data if we have it sticking around// This can occur if touchcancel doesn't fire due to preventDefault, etc.//清除touchmove的數據,一般當touchcancel沒有觸發的時候調用(例如,preventDefault)touch.x2 = undefinedtouch.y2 = undefined}now = Date.now()delta = now - (touch.last || now)touch.el = $('tagName' in firstTouch.target ?firstTouch.target : firstTouch.target.parentNode)//觸摸的事件的target表示當前的Element對象,如果當前對象不是Element對象,那么就獲取parentNode對象touchTimeout && clearTimeout(touchTimeout)touch.x1 = firstTouch.pageXtouch.y1 = firstTouch.pageY//x1,y1存儲的是pageX,pageY屬性if (delta > 0 && delta <= 250) touch.isDoubleTap = true//如果兩次觸屏在[0,250]表示雙擊touch.last = nowlongTapTimeout = setTimeout(longTap, longTapDelay)//這里是長按// adds the current touch contact for IE gesture recognitionif (gesture && _isPointerType) gesture.addPointer(e.pointerId);//如果是IE瀏覽器,為new MSGesture()對象添加一個Pointer對象,傳入的是我們的event對象的pointerId的值//把元素上的一個觸點添加到MSGesture對象上!})首先,對于兩次tap而言,如果相隔的時間小于250ms就會被認為是'doubleTap':

if (delta > 0 && delta <= 250) touch.isDoubleTap = true//相隔小于250ms 然后,對于任何一次觸摸事件都會首先假設是長按,也就是"longTap",并注冊longTap回調函數,如果在指定的時間內 發生了move或者up類事件就清除回調:

function longTap() {longTapTimeout = null//touch.last表示是上一次觸屏的時間,我們觸發了longTap事件,longTap事件觸發了以后我們清空touch對象為{}//之所以要清空是因為,長按后不需要馬上跟蹤touchstart等if (touch.last) {touch.el.trigger('longTap')touch = {}}}下面是假設為長按事件,然后添加的回調函數:

longTapTimeout = setTimeout(longTap, longTapDelay) 最后,還要記錄手指放下時候的坐標:

touch.x1 = firstTouch.pageXtouch.y1 = firstTouch.pageY 第三步:我們看看 touchmove MSPointerMove pointermove等事件
.on('touchmove MSPointerMove pointermove', function(e){if((_isPointerType = isPointerEventType(e, 'move')) &&!isPrimaryTouch(e)) returnfirstTouch = _isPointerType ? e : e.touches[0]//這時候我們取消長按的事件處理程序,因為這里是pointermove,也就是手勢移動了那么肯定不會是長按了//但是因為我們在pointerdown中不知道是否是長按還是pointermove,所以才默認使用的長按。如果移動了,那么就知道不是長按了cancelLongTap()touch.x2 = firstTouch.pageXtouch.y2 = firstTouch.pageYdeltaX += Math.abs(touch.x1 - touch.x2)deltaY += Math.abs(touch.y1 - touch.y2)//得到兩者在X和Y方向移動的絕對距離})首先:因為觸點已經移動,所以我們要取消一開始為長按的假設

cancelLongTap()然后:判斷觸點移動的終點位置,然后記錄觸點變換的距離大小
touch.x2 = firstTouch.pageXtouch.y2 = firstTouch.pageY//x2,y2為終點deltaX += Math.abs(touch.x1 - touch.x2)deltaY += Math.abs(touch.y1 - touch.y2)//deltaX,deltaY表示移動的變化量第四步:我們看看touchend MSPointerUp pointerup事件

注意:這個事件是touch.js中最重要的事件,因為他要用于判斷tap,doubleTap,singleTap等事件類型

.on('touchend MSPointerUp pointerup', function(e){if((_isPointerType = isPointerEventType(e, 'up')) &&!isPrimaryTouch(e)) return//觸摸結束,這時候我們取消掉長按的定時器,因為我們也已經知道不是長按了,所以取消長按的定時器cancelLongTap()// swipeif ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||(touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))//如果任意一方向移動的距離大于30,那么表示觸發swipe事件。觸發了swipe事件后,我們清除touch列表,也就是設置為touch={}//因為移動結束了,那么必須重置為空swipeTimeout = setTimeout(function() {touch.el.trigger('swipe')touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))touch = {}}, 0)// normal tap//這里是正常的tap事件,last表示上一次點擊的時間,也就是說已經發生了點擊了//last屬性是在touchstart中進行賦值的,因此如果存在那么表示已經點擊過了//但是不管是雙擊還是單擊都會運行到這里的代碼!!!else if ('last' in touch)// don't fire tap when delta position changed by more than 30 pixels,// for instance when moving to a point and back to origin//如果移動距離超過30那么我們不會觸發tap事件,因為觸摸事件不是移動,不能讓他移動了30px了if (deltaX < 30 && deltaY < 30) {// delay by one tick so we can cancel the 'tap' event if 'scroll' fires// ('tap' fires before 'scroll')//tap事件是在scroll之前,所以如果scroll了那么我們取消tap事件tapTimeout = setTimeout(function() {// trigger universal 'tap' with the option to cancelTouch()// (cancelTouch cancels processing of single vs double taps for faster 'tap' response)var event = $.Event('tap')event.cancelTouch = cancelAlltouch.el.trigger(event)//tap會立即觸發// trigger double tap immediately//如果是雙擊,那么我們立即觸發doubleTap事件,這時候我們的touch={}那么后面的singleTap是不會執行的if (touch.isDoubleTap) {if (touch.el) touch.el.trigger('doubleTap')touch = {}}// trigger single tap after 250ms of inactivity//如果不是雙擊,那么此時tap已經觸發了,等待250ms我們再次觸發singleTap事件else {touchTimeout = setTimeout(function(){touchTimeout = nullif (touch.el) touch.el.trigger('singleTap')touch = {}//情況touch對象,因為手指已經離開屏幕了}, 250)}}, 0)} else {touch = {}}//注意:不管是singleTap還是doubleTap,swipe,調用后都會清空touch={},也就是這時候是重新開始的觸摸事件了deltaX = deltaY = 0})首先,因為觸點已經離開界面,所以前面假設是長按的假設不成立:

cancelLongTap()//不是長按然后,如果觸點變換的距離大于30,那么觸發 swipe,swipeDown等類型
if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||(touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))//如果任意一方向移動的距離大于30,那么表示觸發swipe事件。觸發了swipe事件后,我們清除touch列表,也就是設置為touch={}//因為移動結束了,那么必須重置為空swipeTimeout = setTimeout(function() {touch.el.trigger('swipe')touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))touch = {}}, 0)最后,tap,doubleTap,singleTap都是有一定的觸發條件的

//這里是正常的tap事件,last表示上一次點擊的時間,也就是說已經發生了點擊了//last屬性是在touchstart中進行賦值的,因此如果存在那么表示已經點擊過了//但是不管是雙擊還是單擊都會運行到這里的代碼!!!else if ('last' in touch)// don't fire tap when delta position changed by more than 30 pixels,// for instance when moving to a point and back to origin//如果移動距離超過30那么我們不會觸發tap事件,因為觸摸事件不是移動,不能讓他移動了30px了if (deltaX < 30 && deltaY < 30) {// delay by one tick so we can cancel the 'tap' event if 'scroll' fires// ('tap' fires before 'scroll')//tap事件是在scroll之前,所以如果scroll了那么我們取消tap事件tapTimeout = setTimeout(function() {// trigger universal 'tap' with the option to cancelTouch()// (cancelTouch cancels processing of single vs double taps for faster 'tap' response)var event = $.Event('tap')event.cancelTouch = cancelAlltouch.el.trigger(event)//tap會立即觸發// trigger double tap immediately//如果是雙擊,那么我們立即觸發doubleTap事件,這時候我們的touch={}那么后面的singleTap是不會執行的if (touch.isDoubleTap) {if (touch.el) touch.el.trigger('doubleTap')touch = {}}// trigger single tap after 250ms of inactivity//如果不是雙擊,那么此時tap已經觸發了,等待250ms我們再次觸發singleTap事件else {touchTimeout = setTimeout(function(){touchTimeout = nullif (touch.el) touch.el.trigger('singleTap')touch = {}//情況touch對象,因為手指已經離開屏幕了}, 250)}}, 0)} else {touch = {}}//注意:不管是singleTap還是doubleTap,swipe,調用后都會清空touch={},也就是這時候是重新開始的觸摸事件了deltaX = deltaY = 0})

我們從上面的代碼可以看出tap,doubleTap,singleTap的區別是什么?

(1)代碼會通過等待250ms判斷是否是雙擊,如果是雙擊那么就會觸發doubleTap,否則250ms后會觸發singleTap。

else {touchTimeout = setTimeout(function(){touchTimeout = nullif (touch.el) touch.el.trigger('singleTap')touch = {}//250ms后如果沒有繼續觸摸,那么觸發singleTap}, 250)}

如果在250ms中繼續觸摸了屏幕,那么在touchstart中就會清除掉這個定時器,表示不是singleTap事件。

touchTimeout && clearTimeout(touchTimeout)//這是在touchstart MSPointerDown pointerdown中的事件處理 然后如果250ms中繼續觸摸了屏幕,同時觸摸事件間隔小于250ms就會成為doubleTap:

if (delta > 0 && delta <= 250) touch.isDoubleTap = true

(2)從上面的代碼可以知道,tap是立即執行的,但是singleTap,doubleTap是延遲執行的

tapTimeout = setTimeout(function() {// trigger universal 'tap' with the option to cancelTouch()// (cancelTouch cancels processing of single vs double taps for faster 'tap' response)var event = $.Event('tap')event.cancelTouch = cancelAlltouch.el.trigger(event)//tap會立即觸發// trigger double tap immediately//如果是雙擊,那么我們立即觸發doubleTap事件,這時候我們的touch={}那么后面的singleTap是不會執行的if (touch.isDoubleTap) {if (touch.el) touch.el.trigger('doubleTap')touch = {}}// trigger single tap after 250ms of inactivity//如果不是雙擊,那么此時tap已經觸發了,等待250ms我們再次觸發singleTap事件else {touchTimeout = setTimeout(function(){touchTimeout = nullif (touch.el) touch.el.trigger('singleTap')touch = {}//情況touch對象,因為手指已經離開屏幕了}, 250)}}, 0)} else {touch = {}}

(3)觸屏端事件的執行順序如下:

如果是單擊的話:touchstart>touchend> tap>250ms>singleTap
如果是雙擊的話:touchstart>touchend> tap>touchstart>touchend> tap>doubleTap

第五步:我們看看最后的touchcancel MSPointerCancel pointercancel事件

// when the browser window loses focus,// for example when a modal dialog is shown,// cancel all ongoing events//觸摸被取消(觸摸被一些事情中斷,比如通知).on('touchcancel MSPointerCancel pointercancel', cancelAll)

其實該事件很簡單,就是去掉所有的事件而已

function cancelAll() {//取消touch,tap,swipe,longTap事件//@touch 觸屏事件//@tap 輕觸事件//@swipe 滑動事件//@longTap 長點擊事件if (touchTimeout) clearTimeout(touchTimeout)if (tapTimeout) clearTimeout(tapTimeout)if (swipeTimeout) clearTimeout(swipeTimeout)if (longTapTimeout) clearTimeout(longTapTimeout)touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = nulltouch = {}}

第六步:我們總結一下各種事件觸發的條件

doubleTap:移動的累積距離小于30;兩次觸摸屏幕時間區間為[0,250];

tap:移動的累積距離小于30,因為不能保證用于點擊的時候沒有移動;;立即觸發

singleTap:移動的累積距離小于30;等待250ms后觸發;

swipe:手指發生了移動,同時移動的距離在deltaX>30||deltaY>30,不過此處的deltaX和deltaY指的是手指落下的位置和最終手指的位置,而不是累積距離

longTap:手指長按超過了750ms。

下面是自己繪制的一張表,如有不正確的地方請拍磚:


也可以在空間查看

問題4:我們來看看FastClick.js的源碼分析模塊?

首先,我們看看那些元素需要觸發原生的click事件(也就是不需要合成的click),也就是不需要我們來產生合成事件

/*** Determine whether a given element requires a native click.如果是這下面的元素都需要觸發瀏覽器的原生事件,button/select/textarea/input/label/iframe/video或者含有needsclick類名的元素都是需要觸發原生的click事件,而不能因為300ms的延遲就不觸發這個事件* @param {EventTarget|Element} target Target DOM element* @returns {boolean} Returns true if the element needs a native click*/FastClick.prototype.needsClick = function(target) {switch (target.nodeName.toLowerCase()) {// Don't send a synthetic click to disabled inputs (issue #62)case 'button':case 'select':case 'textarea':if (target.disabled) {//如果是disabled的元素,那么我們也是需要觸發瀏覽器元素的click事件,而不用自己創建一個Event對象的return true;}break;case 'input':// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)//文件輸入框在IOS6上需要click事件if ((deviceIsIOS && target.type === 'file') || target.disabled) {return true;}break;case 'label':case 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames//IOS8主屏幕程序能夠阻止事件冒泡到frames,對于label,iframe,video都是不需要模擬一個事件的,只有用瀏覽器原生的click事件就ok了case 'video':return true;}//如果是needsclick的類名,這時候我們都是需要觸發瀏覽器的原生click事件的return (/\bneedsclick\b/).test(target.className);}; 上面的方法告訴我們

(1)如果是disabled的button/select/textarea元素,那么不需要觸發合成的click事件,直接用原生的方法就可以了(因為disabled表示不能點擊,那么減少300ms的延遲是沒有意義的,直接使用瀏覽器的原生click就可以了);

(2)比如input元素,而且是disabled(因為disabled的input不能點擊,那么減少300ms延遲沒有意義);

(3)IOS下的file類型(single或者mutiple類型)也直接使用原生的click,其實是因為在ipad中照片選擇界面存在的問題,在iphone中不存在問題,因為iphone中照片選擇是全屏的;

(4)lable/iframe/video等也是應該使用原生的click的;

(5)使用了needsClick的類表示也是使用原生的click事件。

注意:如果是div等其他的元素通過這個函數返回的結果是false,表示還是會使用合成的click,那么他也是不存在300ms延遲問題的!

第二:我們看看那些元素在觸發click之前需要調用focus方法

/*** Determine whether a given element requires a call to focus to simulate click into element.*判斷一個元素是否需要調用focus()方法,然后才能去模擬在元素上的點擊事件!如果返回true,那么在觸發自己的click事件之前要手動調用focus()才行!* @param {EventTarget|Element} target Target DOM element* @returns {boolean} Returns true if the element requires a call to focus to simulate native click.*/FastClick.prototype.needsFocus = function(target) {switch (target.nodeName.toLowerCase()) {case 'textarea':return true;case 'select':return !deviceIsAndroid;//不是安卓的select需要case 'input':switch (target.type) {case 'button':case 'checkbox':case 'file':case 'image':case 'radio':case 'submit':return false;}// No point in attempting to focus disabled inputs//如果不是disabled同時也不是readOnly,這時候才需要返回調用focus方法來模擬click方法return !target.disabled && !target.readOnly;default://含有class="needsfocus"的元素必須手動調用focus來模仿元素的本地click方法return (/\bneedsfocus\b/).test(target.className);}};

(1)textarea元素;

(2)非android下的select元素;

(3)非disabled和非readOnly的input元素,同時不是button/checkbox/file/image/radio/submit;

(4)含有needFocus的元素。這些元素在觸發合成的click事件之前需要手動調用focus方法才行。如下:

this.focus(targetElement); this.sendClick(targetElement, event);第三:如何讓元素獲取焦點的方法

/*** @param {EventTarget|Element} targetElement,也就是應該獲取焦點的元素*/ FastClick.prototype.focus = function(targetElement) {var length;// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. //These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that //can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. //Filed as Apple bug #15122724.//IOS7下,一些input元素,如data,time,month在調用setSelectionRange時候會拋出TypeError,這些元素的selectionStart/selectionEnd不是整數//而且沒法驗證,因為直接訪問這些屬性就會拋錯了,因此我們直接檢測typeif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time'&& targetElement.type !== 'month') {length = targetElement.value.length;//setSelectionRange用于設置input元素的開始和結束位置,https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange//開始位置為length,結束位置也是length,表示光標移動到最后targetElement.setSelectionRange(length, length);} else {targetElement.focus();} };

(1)在IOS7中,對于date,datetime,month類型的input元素,我們采用調用focus方法來完成獲取焦點,而不是采用setSelectionRange,因為方法這個方法就會報錯。

(2)對于其他元素使用setSelectionRange方法

第四:通過event.target來獲取元素的目標對象

/*** @param {EventTarget} targetElement* @returns {Element|EventTarget}*/FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {//在IOS4.1下,或者更老的瀏覽中,我們的target對象有可能是文本節點// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.if (eventTarget.nodeType === Node.TEXT_NODE) {return eventTarget.parentNode;}return eventTarget;};在老版本的IOS4.1中,event.target對象可能是 文本節點。
第五:為targetElement元素添加 滾動的父元素作為屬性,同時為滾動的父元素添加一個已經滾動的高度的屬性

/*** Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.* @param {EventTarget|Element} targetElement* (1)為targetElement添加一個fastClickScrollParent屬性,表示當前元素所在的滾動父元素* (2)為targetElement添加一個fastClickScrollParent屬性的同時,為我們的fastClickScrollParent屬性又添加一個fastClickLastScrollTop屬性* 該屬性表示滾動父元素當前已經滾動的scrollTop距離*/FastClick.prototype.updateScrollParent = function(targetElement) {var scrollParent, parentElement;//獲取fastClickScrollParent屬性scrollParent = targetElement.fastClickScrollParent;// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the// target element was moved to another parent.//用于判斷一個指定的元素是否在一個scrollable layer中,如果目標元素移動到另外一個父元素時候又需要重新檢查if (!scrollParent || !scrollParent.contains(targetElement)) {parentElement = targetElement;do {//如果scrollHeight>offsetHeight表示元素在垂直方向上存在滾動if (parentElement.scrollHeight > parentElement.offsetHeight) {scrollParent = parentElement;targetElement.fastClickScrollParent = parentElement;break;}//更新parentElement元素parentElement = parentElement.parentElement;} while (parentElement);}// Always update the scroll top tracker if possible.//獲取到了滾動的父元素后,我們要更新scrollParent的fastClickLastScrollTop屬性if (scrollParent) {scrollParent.fastClickLastScrollTop = scrollParent.scrollTop;}};

通過parentElement不斷獲取父元素,同時通過比較scrollHeight和offsetHeight來判斷元素是否有滾動條;同時需要注意的是:如果targetElement本身是可以滾動,那么targetElement的fastClickScrollParent就是本身,同時targetElement的fastClickLastScrollTop就是表示自己已經滾動的距離了!

第六:如何判斷觸點是否變化

/*** Based on a touchmove event object, check whether the touch has moved past a boundary since it started.*判斷touch是否移除了邊界,在邊界之外click就會被取消* @param {Event} event* @returns {boolean}*/FastClick.prototype.touchHasMoved = function(event) {var touch = event.changedTouches[0], boundary = this.touchBoundary;//changedTouches是涉及[當前事件]的觸摸點的列表if (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {return true;}return false;};這里的touchStartX等屬性在touchstart事件中被記錄,同時如果觸點大于我們配置的boundary,那么表示觸點已經移動了。臨界值是10px,如果大于10px那么表示觸點已經移動了,當然這個值也可以自己設置!

第七:如何獲取label元素指定的input元素

/*** Attempt to find the labelled control for the given label element.* @param {EventTarget|HTMLLabelElement} labelElement這里是labelElement元素作為參數* @returns {Element|null}*/FastClick.prototype.findControl = function(labelElement) {// Fast path for newer browsers supporting the HTML5 control attribute//html5為我們的labelElement元素指定了一個control屬性,該屬性表示該lable對應的input元素/*function setValue(){var label=document.getElementById("label");var textbox=label.control;//獲取label元素的control屬性,這時候獲取到的就是我們的labelElement對應的input元素了textbox.value="718308";}*/if (labelElement.control !== undefined) {return labelElement.control;}// All browsers under test that support touch events also support the HTML5 htmlFor attributeif (labelElement.htmlFor) {return document.getElementById(labelElement.htmlFor);}// If no for attribute exists, attempt to retrieve the first labellable descendant element// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label//如果沒有control,for屬性,這時候我們就通過獲取lable元素下面的button/keygen/meter等屬性return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');};

注意:通過control屬性,htmlFor屬性,或者直接querySelector來一致獲取for元素指定的input元素。同時這里展示了querySelector可以指定多個選擇器,如果前面的選擇器沒有選中元素,那么就會自動使用后面的選擇器去選擇:

document.querySelector("#demos,#demoh,#demo").innerHTML = "Hello World1!";//如果#demos不存在就會選擇#demoh

第八:那些情況下不需要FastClick來解決300ms的延遲問題?

?(1)不支持touch事件,因為fastclick主要用于移動端的touch事件

(2)對于Android下的chrome瀏覽器,設置了user-scalable=no那么不需要fastClick;

(3)chrome32以及以上,如果有width<=device-width那么也不需要處理(也就是網頁的寬度比瀏覽器的寬度小);

(4)chrome桌面瀏覽器不需要FastClick。

(5)黑莓10.3以上的系統,如果設置了meta[name=viewport],同時設置了user-scalable=no;黑莓10.3以上系統,width<=device-width都是沒有延遲的;

(6)IE10以上的瀏覽器,同時設置了-ms-touch-action: none or manipulation,那么表示禁用了雙擊縮放效果,不具有延遲;

(7)IE11含有touch-action: none or manipulation也不具有300ms延遲問題

(8)FireFox瀏覽器大于27,同時含有meta[name=viewport]和user-scalable=no/width<device-width

注意:對于以上情況,我們不需要fastClick來解決300ms延遲問題;原因可能是本身就禁止了雙擊縮放,所以瀏覽器在第一次click后不需要等300ms判斷是否是雙擊縮放,所以可以直接會自動觸發瀏覽器原生的click!這種情況下,如果連續點擊兩次就相當于兩次click!

/*** Check whether FastClick is needed.* @param {Element} layer The layer to listen on*/FastClick.notNeeded = function(layer) {var metaViewport;var chromeVersion;var blackberryVersion;var firefoxVersion;// Devices that don't support touch don't need FastClick//必須支持touch事件if (typeof window.ontouchstart === 'undefined') {return true;}// Chrome version - zero for other browsers//如果是chrome瀏覽器,那么我們可以獲取到chrome的版本號,否則我們獲取到的就是就是0!!!!chromeVersion = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];if (chromeVersion) {if (deviceIsAndroid) {metaViewport = document.querySelector('meta[name=viewport]');if (metaViewport) {// Chrome on Android with user-scalable="no" doesn't need FastClick (issue #89)//對于Android下的chrome瀏覽器,設置了user-scalable=no那么不需要fastClick!!!if (metaViewport.content.indexOf('user-scalable=no') !== -1) {return true;}// Chrome 32 and above with width=device-width or less don't need FastClick//chrome32上,如果有width<=device-width那么也不需要處理(width)if (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {return true;}}// Chrome desktop doesn't need FastClick (issue #15)} else {//chrome桌面瀏覽器不需要FastClickreturn true;}}if (deviceIsBlackBerry10) {blackberryVersion = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/);// BlackBerry 10.3+ does not require Fastclick library.// https://github.com/ftlabs/fastclick/issues/251//黑莓10.3以上的系統,如果設置了meta[name=viewport],同時設置了user-scalable=no/或者width<=device-width都是沒有延遲的!if (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {metaViewport = document.querySelector('meta[name=viewport]');if (metaViewport) {// user-scalable=no eliminates click delay.if (metaViewport.content.indexOf('user-scalable=no') !== -1) {return true;}// width=device-width (or less than device-width) eliminates click delay.if (document.documentElement.scrollWidth <= window.outerWidth) {return true;}}}}// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)//IE10以上的瀏覽器,同時設置了-ms-touch-action: none or manipulation,那么表示禁用了雙擊縮放效果,不具有延遲if (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {return true;}// Firefox version - zero for other browsersfirefoxVersion = +(/Firefox\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];//FireFox瀏覽器大于27,同時含有meta[name=viewport]和user-scalable=no/width<device-width。if (firefoxVersion >= 27) {// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896metaViewport = document.querySelector('meta[name=viewport]');if (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {return true;}}// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspxif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {return true;}return false;};

問題5:我們看看fastClick中其他核心代碼?

首先,我們要注意的就是ontouchstart方法

/*** On touch start, record the position and scroll offset.* 當觸摸事件時候,我們記錄下位置position和scroll滾動的距離* @param {Event} event* @returns {boolean}*/FastClick.prototype.onTouchStart = function(event) {var targetElement, touch, selection;// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).//不會同時跟蹤兩個觸點的300ms問題(一次只能跟蹤一個觸點的點擊延遲問題),否則手動放大縮小的問題就會被阻止了if (event.targetTouches.length > 1) {return true;}//獲取觸點元素,如果是TEXT_NODE那么獲取其父元素targetElement = this.getTargetElementFromEventTarget(event.target);touch = event.targetTouches[0];//目標元素,也就是target元素上的觸點if (deviceIsIOS) {// Only trusted events will deselect text on iOS (issue #49)//只有原生的Event在ISO中才會取消選擇文本selection = window.getSelection();//如果選擇了文本,我們也不會設置后面的trackingClick等if (selection.rangeCount && !selection.isCollapsed) {return true;}if (!deviceIsIOS4) {//當alert,confirm彈窗因為click事件彈出的時候,當下次用戶點擊頁面中任何位置的時候,那么新的touchstart/touchend事件觸發時候和上次click觸發的事件//具有相同的identifier// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched// with the same identifier as the touch event that previously triggered the click that triggered the alert.// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.//touch.identifier當Chrome的開發者工具打開的時候為0// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,// random integers, it's safe to to continue if the identifier is 0 here.if (touch.identifier && touch.identifier === this.lastTouchIdentifier) {event.preventDefault();return false;}this.lastTouchIdentifier = touch.identifier;// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and://如果元素使用了-webkit-overflow-scrolling: touch事件:// 1) the user does a fling scroll on the scrollable layer// 2) the user stops the fling scroll with another tap// then the event.target of the last 'touchend' event will be the element that was under the user's finger// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).//當scroll滾動開始的時候,FastClick就會發送一個click事件,除非我們檢查父元素在發送一個合成事件的時候并沒有滾動!this.updateScrollParent(targetElement);}}//在touchstart中我們開始跟蹤click事件this.trackingClick = true;//當前時間this.trackingClickStart = event.timeStamp;//targetElement元素this.targetElement = targetElement;//獲取pageX,pageYthis.touchStartX = touch.pageX;this.touchStartY = touch.pageY;// Prevent phantom clicks on fast double-tap (issue #36)//如果兩次點擊之間小于200ms,那么我們阻止默認事件。不讓click事件觸發。這種情況出現只有可能是雙擊,否則不會只有幾百毫秒//如果用戶雙擊,那么我們也會取消掉默認的click事件,而采用自己模擬的click。this.lastClickTime只會在touchend中賦值if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {event.preventDefault();}return true;};我們可以看到,我們是不會跟蹤多個觸點的,因為如果跟蹤多個觸點的click,那手動縮放可能會失效

// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).//不會同時跟蹤兩個觸點的300ms問題(一次只能跟蹤一個觸點的點擊延遲問題),否則手動放大縮小的問題就會被阻止了if (event.targetTouches.length > 1) {return true;}

如果兩次點擊的時間間隔小于200ms那么第二次click是不會觸發的:

if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {event.preventDefault(); }

在IOS上,只有觸發原生的click才能取消選擇頁面中的選中的內容,所以如果是這種情況我們直接返回而不用fastclick,而采用瀏覽器默認的click:

selection = window.getSelection(); if (selection.rangeCount && !selection.isCollapsed) {return true; }

如果兩次indentifier是一樣,那么第二次的click直接忽略,也就是采用原生的click就可以了,如alert、confirm彈窗后的click 以及ios4中兩次較快的點擊導致相同的identifier:

if (touch.identifier && touch.identifier === this.lastTouchIdentifier) {event.preventDefault();return false; }

第二:我們看看touchmove

/*** Update the last position.* 更新最新的位置信息* @param {Event} event* @returns {boolean}*/FastClick.prototype.onTouchMove = function(event) {//trackingClick表示當前的click是否被跟蹤,touchStart中設置為trueif (!this.trackingClick) {return true;}// If the touch has moved, cancel the click tracking//(1)如果touch已經移動那么我們取消click事件跟蹤,或者touch已經在boundary之外那么我們也需要去除才行//這時候是移動,而不是點擊,所以300ms延遲不需要跟蹤//(2)targetElement是在touchStart中已經被設置了,在touchmove中我們重新計算當前的target對象,如果不相同,表示已經移動了,那么不需要跟蹤click了//同時把targetElement置空if (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {this.trackingClick = false;this.targetElement = null;}return true;}; 如果觸點已經移動了,那么我們就不會跟蹤click事件,同時目標對象也會被設置為空。因為此時表示移動而不是點擊
第三:我們看看touchend,其決定是否馬上觸發click事件

/*** On touch end, determine whether to send a click event at once.*touch end事件中判斷是否應該馬上觸發click事件* @param {Event} event* @returns {boolean}*/FastClick.prototype.onTouchEnd = function(event) {var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;//如果沒有跟蹤,也就是如用戶點擊后移動了坐標了/或者touchcancel了,那么原來的event.target的300ms就不需要處理了。if (!this.trackingClick) {return true;}// Prevent phantom clicks on fast double-tap (issue #36)//The minimum time between tap(touchstart and touchend) events//如果兩次點擊時間小于200ms,那么cancelNextClick設置為true//lastClickTime只會在onTouchEnd中進行設置,而event.timeStamp表示的是這一次觸摸事件發生的時間//(1) this.lastClickTime只會在touchcancel中進行設置,因此,如果【兩次touchend】觸發的時候很短,那么表示雙擊了,因此我們就不需要跟蹤后面的那一次click事件了//return表示也不會觸發后面自定義的click事件了//(2)cancelNextClick只是用于touchEnd后用于mouseover/mousedown/mouseup等,用于判斷是否調用stopPropagation/preventDefaultif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {this.cancelNextClick = true;return true;}//click事件跟蹤開始的時間,如果touchstart和touchEnd之間間隔的時間太久,那么也不會觸發自定義click。例如長按if ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {return true;}// Reset to prevent wrong click cancel on input (issue #156).//重置cancelNextClick,防止對于input元素click事件的錯誤取消.this.cancelNextClick = false;//更新lastClickTime參數this.lastClickTime = event.timeStamp;//重置,trackingClick,trackingClickStarttrackingClickStart = this.trackingClickStart;this.trackingClick = false;//手指已經抬起,這時候不需要跟蹤click了this.trackingClickStart = 0;// On some iOS devices, the targetElement supplied with the event is invalid if the layer// is performing a transition or scroll, and has to be re-detected manually. Note that// for this to function correctly, it must be called *after* the event target is checked!// See issue #57; also filed as rdar://13048589 .//IOS6-7:如果layer(也就是我們構造FastClick時候傳入的DOM對象)執行transition/scroll時候,那么event對象提供的targetElement就是無效的,所以我們必須手動重新計算if (deviceIsIOSWithBadTarget) {touch = event.changedTouches[0];// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null//elementFromPoint是獲取當前元素相對于視口的位置targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;// *iOS 6.0-7.*需要我們手動設置目標元素,也就是target element!targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;}targetTagName = targetElement.tagName.toLowerCase();if (targetTagName === 'label') {//獲取for元素指定的元素forElement = this.findControl(targetElement);if (forElement) {this.focus(targetElement);//我們讓for指定的元素獲取焦點//(1)android:直接返回// (2)IOS:修改targetElement為for元素指定的元素if (deviceIsAndroid) {return false;}targetElement = forElement;}//如果觸發自己定義的click事件之前,要手動調用focus方法才能模擬} else if (this.needsFocus(targetElement)) {// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. //Return early and unset the target element reference so that the subsequent click will be allowed through.// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible //even though the value attribute is updated as the user types (issue #37).//Case 1:如果touch事件已經觸發了,那么focus就會馬上觸發。馬上返回,同時重置目標元素引用以便接下來的click事件能允許觸發//Case 2:當我們的input元素處于iframe中同時被點擊,那么所有的文本都是不可見的,即使value屬性在用戶輸入的時候及時更新if ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {this.targetElement = null;return false;}//首先給這個元素獲取焦點,也就是先調用focus方法或者通過setSelection完成this.focus(targetElement);//focus后,我們在該元素上觸發自定義的click事件this.sendClick(targetElement, event);// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)// var deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;//(1)如果不是IOS那么我們,那么我們可以阻止瀏覽器默認的‘click‘事件,同時把targetElement置為空// (2)如果是IOS,同時不是select,那么我們也可以阻止瀏覽器默認的'click'事件。也就是說IOS下的select必須讓瀏覽器默認的click事件觸發,否則select的選擇面板不會彈出if (!deviceIsIOS || targetTagName !== 'select') {this.targetElement = null;event.preventDefault();}return false;}if (deviceIsIOS && !deviceIsIOS4) {// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).//(1)如果目標元素包含在一個parent layer中,而且該parent layer也被滾動了,那么我們就不會發送這個合成的click事件。這時候這個tap事件就用于阻止我們的scrolling事件scrollParent = targetElement.fastClickScrollParent;if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {//表示在onTouchStart后又開始滾動了,表示父元素一直在滾動,這時候我們也不需要跟蹤click的延遲,因為他會用于停止滾動return true;}}// Prevent the actual click from going though - unless the target node is marked as requiring// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.//如果needsClick返回true那么表示需要原生的click事件,于是在這里我們不會調用preventDefault方法!!!//如果不需要原生的方法,那么我們直接阻止原生的方法,阻止原生的方法的同時并調用sendClick來觸發我們的模擬的方法if (!this.needsClick(targetElement)) {//(1)如果沒有needsClick的class,那么表示會調用preventDefault取消瀏覽器默認的click事件,取而代之的是自己創建的click事件,而且這個事件是在targetEvent對象上觸發的event.preventDefault();//我們在網上搜索fastClick,大部分都在說他解決了zepto的點擊穿透問題,他是怎么解決的呢?就是上面最后一句,//他模擬的click事件是在touchEnd獲取的真實元素上觸發的,而不是通過坐標計算出來的元素(因為targetElement是一開始就保存好的,而不會是tap隱藏后而出現的彈窗下面的元素)。this.sendClick(targetElement, event);}return false;};如果觸點已經移動,或者touch事件已經取消,那么我們不需要觸發自定義的事件

//如果沒有跟蹤,也就是如用戶點擊后移動了坐標了/或者touchcancel了,那么原來的event.target的300ms就不需要處理了。if (!this.trackingClick) {return true;}如果短時間點擊了兩次,那么我們不會跟蹤第二次點擊,從而直接忽略第二次

//如果兩次點擊時間小于200ms,那么cancelNextClick設置為true//lastClickTime只會在onTouchEnd中進行設置,而event.timeStamp表示的是這一次觸摸事件發生的時間//(1) this.lastClickTime只會在touchEnd中進行設置,因此,如果【兩次touchend】觸發的時候很短,那么表示雙擊了,因此我們就不需要跟蹤后面的那一次click事件了//return表示也不會觸發后面自定義的click事件了,這時候會觸發瀏覽器默認的click事件//(2)cancelNextClick只是用于touchEnd后用于mouseover/mousedown/mouseup等,用于判斷是否調用stopPropagation/preventDefaultif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {this.cancelNextClick = true;return true;}如果touchstart和touchend之間時間太久,那么就是長按了,也不會觸發自定義的click

//click事件跟蹤開始的時間,如果touchstart和touchEnd之間間隔的時間太久,那么也不會觸發自定義click。例如長按if ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {return true;}如果layer在執行滾動或者動畫,我們需要手動計算target

//IOS6-7:如果layer(也就是我們構造FastClick時候傳入的DOM對象)執行transition/scroll時候,那么event對象提供的targetElement就是無效的//所以我們必須手動重新計算if (deviceIsIOSWithBadTarget) {touch = event.changedTouches[0];// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null//elementFromPoint是獲取當前元素相對于視口的位置targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;// *iOS 6.0-7.*需要我們手動設置目標元素,也就是target element!targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;}

如果是label屬性,那么我們讓for元素成為targetElement。如果當前點擊的是label標簽,我們首先需要讓label標簽獲取焦點,同時如果是安卓那么我們不需要觸發click而直接返回(在思考著)!如果是IOS更新targetElement為for指定的元素:

if (targetTagName === 'label') {//獲取for元素指定的元素forElement = this.findControl(targetElement);if (forElement) {this.focus(targetElement);//我們讓for指定的元素獲取焦點//(1)android:直接返回// (2)IOS:修改targetElement為for元素指定的元素if (deviceIsAndroid) {return false;}targetElement = forElement;}//如果觸發自己定義的click事件之前,要手動調用focus方法才能模擬}如果在click之前需要獲取焦點,那么我們先獲取焦點然后觸發合成的click事件。同時對于IOS下的select因為必須觸發原生的click才會打開select標簽,所以我們不會調用preventDefault方法
if (this.needsFocus(targetElement)) {// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. //Return early and unset the target element reference so that the subsequent click will be allowed through.// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible //even though the value attribute is updated as the user types (issue #37).//Case 1:如果touch事件已經觸發了,那么focus就會馬上觸發。馬上返回,同時重置目標元素引用以便接下來的click事件能允許觸發//Case 2:當我們的input元素處于iframe中同時被點擊,那么所有的文本都是不可見的,即使value屬性在用戶輸入的時候及時更新if ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {this.targetElement = null;return false;}//首先給這個元素獲取焦點,也就是先調用focus方法或者通過setSelection完成this.focus(targetElement);//focus后,我們在該元素上觸發自定義的click事件this.sendClick(targetElement, event);// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)//var deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;//在IOS下的select【必須】允許原生的click觸發,否則select的菜單欄不會打開,同時把targetElement置為空(逆否命題)if (!deviceIsIOS || targetTagName !== 'select') {//這里是逆否命題的結果this.targetElement = null;event.preventDefault();}return false;}

如果非IOS4的iOS下,目標元素處于滾動的元素之中,那么第二次點擊也會被忽略,因為這可能是停止滾動或者加速滾動而已。這可能也是為什么不用touchstart或者touchend來替代click的原因,你可以閱讀后面的參考文獻:

if (deviceIsIOS && !deviceIsIOS4) {// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).scrollParent = targetElement.fastClickScrollParent;if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {return true;}}

觸發自定義的click事件

// Prevent the actual click from going though - unless the target node is marked as requiring// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.//如果needsClick返回true那么表示需要原生的click事件,于是在這里我們不會調用preventDefault方法!!!//如果不需要原生的方法,那么我們直接阻止原生的方法,阻止原生的方法的同時并調用sendClick來觸發我們的模擬的方法if (!this.needsClick(targetElement)) {//(1)如果沒有needsClick的class,那么表示會調用preventDefault取消瀏覽器默認的click事件,取而代之的是自己創建的click事件,而且這個事件是在targetEvent對象上觸發的event.preventDefault();//我們在網上搜索fastClick,大部分都在說他解決了zepto的點擊穿透問題,他是怎么解決的呢?就是上面最后一句,//他模擬的click事件是在touchEnd獲取的真實元素上觸發的,而不是通過坐標計算出來的元素(因為targetElement是一開始就保存好的,而不會是tap隱藏后而出現的彈窗下面的元素)。this.sendClick(targetElement, event);}注意: 從這里你就會發現,fastClick是如何解決300ms的延遲問題的,其是通過取消默認事件后然后調用自己click事件來完成的。那么fastClick是如何 解決點擊穿透問題的呢,其實就是下面的一句:

this.sendClick(targetElement, event);//target對象是保存好的,用來觸發click事件的元素,而不是隱藏后位于底部的元素

下面是觸發自定義事件的關鍵代碼:

/*** Send a click event to the specified element.*為特定元素觸發一個指定的click事件* @param {EventTarget|Element} targetElement* @param {Event} event*/FastClick.prototype.sendClick = function(targetElement, event) {var clickEvent, touch;// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)//在一些安卓設備上,activeElement需要blur,否則同步的click事件無效。如果【當前具有焦點的元素和目標元素】不一致,那么要把焦點元素blur掉,否則//直接調用目標元素的sendClick是無效的if (document.activeElement && document.activeElement !== targetElement) {document.activeElement.blur();}// changedTouches:是涉及[當前事件]的觸摸點的列表。touch = event.changedTouches[0];// Synthesise a click event, with an extra attribute so it can be trackedclickEvent = document.createEvent('MouseEvents');//直接調用dispatchEvent就可以了,但是需要獲取到當前touch事件的screenX,screenY,clientX,clientY等屬性clickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);//fastclick的內部變量,用來識別click事件是原生還是模擬clickEvent.forwardedTouchEvent = true;targetElement.dispatchEvent(clickEvent);};

總結:

下面我對那些情況下不會觸發click進行了總結,你也可以仔細閱讀上面的內容:

(1)???如果點擊的時候移動了觸點,那么不會觸發click事件。其中移動的臨界值是10px

if (!this.trackingClick) {returntrue;}

(2) 如果是雙擊(兩次點擊小于200ms),那么第二次的click是不會觸發的,其中delay是200ms

if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {event.preventDefault();}

(3)如果點擊后持續了700ms不放開,那么不會觸發fastclick的click,而是由瀏覽器自己處理,可能是彈出菜單欄:

if ((event.timeStamp -this.trackingClickStart) > this.tapTimeout) {returntrue;}

(4)IOS下,目標元素的父元素在滾動,那么第二次點擊忽略

if(deviceIsIOS && !deviceIsIOS4) {scrollParent= targetElement.fastClickScrollParent;if(scrollParent && scrollParent.fastClickLastScrollTop !==scrollParent.scrollTop) {returntrue;}}(5)上面源碼分析部分提到的8中情況(可以參考上面分析)

參考資源:

移動端click事件延遲300ms到底是怎么回事,該如何解決?

移動端300ms點擊延遲和點擊穿透問題

[Sencha ExtJS & Touch] singletap 和 tap的區別

tap事件是怎么模擬出來的?移動端觸摸事件是怎么一個流程?

HTML5 手勢檢測原理和實現

突然發現一個問題,如果用touchstart替換了click 問題大了!?

在手持設備上使用 touchstart 事件代替 click 事件是不是個好主意?

也來說說touch事件與點擊穿透問題

總結

以上是生活随笔為你收集整理的移动端开发基本知识之touch.js,FastClick.js源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

无码人妻av免费一区二区三区 | 免费国产黄网站在线观看 | 亚洲精品综合一区二区三区在线 | 樱花草在线播放免费中文 | 亚洲国产av精品一区二区蜜芽 | 亚洲精品午夜无码电影网 | 97人妻精品一区二区三区 | 国产亚洲美女精品久久久2020 | 欧美日韩色另类综合 | 高潮毛片无遮挡高清免费 | 偷窥村妇洗澡毛毛多 | 国产精品永久免费视频 | 亚洲国产精品成人久久蜜臀 | 久久久成人毛片无码 | 精品久久久无码中文字幕 | 国产色在线 | 国产 | 午夜福利一区二区三区在线观看 | 国产精品va在线播放 | 国产凸凹视频一区二区 | 久久人妻内射无码一区三区 | 奇米影视888欧美在线观看 | 一个人免费观看的www视频 | 亚洲人成影院在线观看 | 色综合久久中文娱乐网 | 日本va欧美va欧美va精品 | 黑人巨大精品欧美一区二区 | 丝袜人妻一区二区三区 | 中文精品久久久久人妻不卡 | 在线播放免费人成毛片乱码 | 亚洲精品久久久久久久久久久 | 乌克兰少妇xxxx做受 | 国产亚洲视频中文字幕97精品 | 久久久久亚洲精品男人的天堂 | 亚洲日韩av一区二区三区中文 | 婷婷六月久久综合丁香 | 午夜理论片yy44880影院 | 久久精品国产日本波多野结衣 | 欧美黑人性暴力猛交喷水 | 激情五月综合色婷婷一区二区 | 日韩欧美中文字幕在线三区 | 内射欧美老妇wbb | 欧美肥老太牲交大战 | 中文字幕+乱码+中文字幕一区 | 少妇的肉体aa片免费 | 欧美性生交xxxxx久久久 | 中文字幕日产无线码一区 | 亚洲精品无码人妻无码 | 无码国模国产在线观看 | 国产无套内射久久久国产 | 国模大胆一区二区三区 | 精品国产成人一区二区三区 | 无码人妻久久一区二区三区不卡 | 亚洲国产精品久久人人爱 | 水蜜桃亚洲一二三四在线 | 国产精品久久福利网站 | 午夜肉伦伦影院 | 色欲人妻aaaaaaa无码 | 内射欧美老妇wbb | 国产精品人人爽人人做我的可爱 | 久久久久人妻一区精品色欧美 | 国产手机在线αⅴ片无码观看 | 久久午夜无码鲁丝片午夜精品 | 精品久久久无码人妻字幂 | 成人无码精品一区二区三区 | 亚洲人成网站免费播放 | 国产卡一卡二卡三 | 欧美刺激性大交 | 思思久久99热只有频精品66 | 亚洲区欧美区综合区自拍区 | 我要看www免费看插插视频 | 亚洲中文字幕无码中文字在线 | 狠狠色噜噜狠狠狠狠7777米奇 | 久久 国产 尿 小便 嘘嘘 | 双乳奶水饱满少妇呻吟 | 亚洲色大成网站www | 无遮挡啪啪摇乳动态图 | 红桃av一区二区三区在线无码av | 狠狠色欧美亚洲狠狠色www | 久久久国产精品无码免费专区 | 成人试看120秒体验区 | 国产小呦泬泬99精品 | 国产人妻人伦精品 | 久久人人97超碰a片精品 | 2020最新国产自产精品 | 日本精品人妻无码77777 天堂一区人妻无码 | av在线亚洲欧洲日产一区二区 | 国产色xx群视频射精 | 国产午夜视频在线观看 | 无码帝国www无码专区色综合 | 日韩精品成人一区二区三区 | 欧美猛少妇色xxxxx | 自拍偷自拍亚洲精品10p | 日本精品少妇一区二区三区 | 久久久婷婷五月亚洲97号色 | 老熟妇仑乱视频一区二区 | 性欧美熟妇videofreesex | 日本乱人伦片中文三区 | 日本熟妇人妻xxxxx人hd | 欧美人与物videos另类 | 欧美国产日韩久久mv | 最近中文2019字幕第二页 | 欧美激情一区二区三区成人 | 131美女爱做视频 | 青草青草久热国产精品 | 久久无码中文字幕免费影院蜜桃 | 水蜜桃色314在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 在线 国产 欧美 亚洲 天堂 | 欧美性猛交内射兽交老熟妇 | 精品久久久久久人妻无码中文字幕 | 日本精品久久久久中文字幕 | 国产精品久久久一区二区三区 | 精品无码国产自产拍在线观看蜜 | 四虎永久在线精品免费网址 | 国产成人精品一区二区在线小狼 | 亚洲国产综合无码一区 | 亚洲 欧美 激情 小说 另类 | 亚洲国产精品久久久久久 | 高清不卡一区二区三区 | 爆乳一区二区三区无码 | 中文字幕无码免费久久99 | 免费观看的无遮挡av | 欧美日韩一区二区综合 | 国产肉丝袜在线观看 | 2020久久香蕉国产线看观看 | 久久综合狠狠综合久久综合88 | 红桃av一区二区三区在线无码av | 国产亚洲tv在线观看 | 2020久久超碰国产精品最新 | 好屌草这里只有精品 | 丰满少妇人妻久久久久久 | 亚洲男人av香蕉爽爽爽爽 | 国产精品99爱免费视频 | 日韩精品成人一区二区三区 | 久久国产自偷自偷免费一区调 | 久久久久亚洲精品男人的天堂 | 午夜精品久久久内射近拍高清 | 久久久www成人免费毛片 | 两性色午夜视频免费播放 | 老熟妇仑乱视频一区二区 | 爆乳一区二区三区无码 | 免费无码午夜福利片69 | 国产超碰人人爽人人做人人添 | 亚洲一区二区三区 | 国产激情综合五月久久 | 久久精品女人的天堂av | 欧洲熟妇精品视频 | 欧美性生交xxxxx久久久 | 人人妻人人藻人人爽欧美一区 | 国产亚洲精品久久久久久大师 | 成人片黄网站色大片免费观看 | 男人和女人高潮免费网站 | 在线视频网站www色 | 性欧美大战久久久久久久 | 欧美老人巨大xxxx做受 | 亚洲の无码国产の无码影院 | 动漫av网站免费观看 | 青青久在线视频免费观看 | 国产艳妇av在线观看果冻传媒 | 呦交小u女精品视频 | 88国产精品欧美一区二区三区 | 精品亚洲成av人在线观看 | 亚洲一区二区三区在线观看网站 | 精品国产乱码久久久久乱码 | 97精品人妻一区二区三区香蕉 | 日本护士xxxxhd少妇 | 日本精品人妻无码免费大全 | 精品无码一区二区三区的天堂 | 无码av免费一区二区三区试看 | 中文字幕人妻无码一区二区三区 | 国产亚洲精品久久久ai换 | 免费观看又污又黄的网站 | 无码人妻丰满熟妇区毛片18 | 青青青手机频在线观看 | 欧美日韩人成综合在线播放 | 亚洲人成网站在线播放942 | 国产麻豆精品一区二区三区v视界 | 欧美黑人性暴力猛交喷水 | 午夜福利试看120秒体验区 | 国内揄拍国内精品人妻 | 天堂亚洲2017在线观看 | 中文字幕无码人妻少妇免费 | 久久成人a毛片免费观看网站 | 天下第一社区视频www日本 | 国产激情精品一区二区三区 | 亚洲一区二区三区 | 高潮毛片无遮挡高清免费 | 亚洲欧美色中文字幕在线 | 牲交欧美兽交欧美 | 四虎4hu永久免费 | 成人性做爰aaa片免费看不忠 | 无码av中文字幕免费放 | 欧美激情综合亚洲一二区 | 欧美日韩一区二区三区自拍 | 狠狠cao日日穞夜夜穞av | 国内丰满熟女出轨videos | 乱人伦人妻中文字幕无码久久网 | 曰韩少妇内射免费播放 | 黄网在线观看免费网站 | 国产麻豆精品一区二区三区v视界 | 无码人妻久久一区二区三区不卡 | 国产精品人妻一区二区三区四 | 国产精品久久久久影院嫩草 | 日韩精品无码一区二区中文字幕 | 人妻少妇精品无码专区二区 | 欧美高清在线精品一区 | 亚洲日韩中文字幕在线播放 | 一本久道久久综合狠狠爱 | 天天燥日日燥 | 国产精品美女久久久 | 久久精品人人做人人综合 | 欧美黑人巨大xxxxx | 国产人妻精品午夜福利免费 | 成人免费视频视频在线观看 免费 | 亚洲国产欧美在线成人 | 国产精品久久久久久久9999 | 双乳奶水饱满少妇呻吟 | 日本一本二本三区免费 | 亲嘴扒胸摸屁股激烈网站 | 伦伦影院午夜理论片 | 一区二区三区高清视频一 | 啦啦啦www在线观看免费视频 | 亚洲色无码一区二区三区 | √天堂资源地址中文在线 | 国产综合久久久久鬼色 | 国产成人久久精品流白浆 | av在线亚洲欧洲日产一区二区 | www一区二区www免费 | 欧美真人作爱免费视频 | 久久99热只有频精品8 | 精品乱子伦一区二区三区 | 久久久久99精品成人片 | 国产精品欧美成人 | 激情人妻另类人妻伦 | 天堂无码人妻精品一区二区三区 | 亚洲人亚洲人成电影网站色 | 麻豆人妻少妇精品无码专区 | 亚洲精品国产精品乱码视色 | 国产精品久久久久无码av色戒 | 欧美老妇交乱视频在线观看 | 99久久精品无码一区二区毛片 | 精品久久综合1区2区3区激情 | 人人妻人人藻人人爽欧美一区 | 国内精品一区二区三区不卡 | 爽爽影院免费观看 | 午夜性刺激在线视频免费 | 国产色在线 | 国产 | 一本加勒比波多野结衣 | 国产一区二区三区影院 | 成人无码视频在线观看网站 | 影音先锋中文字幕无码 | 人人澡人人妻人人爽人人蜜桃 | 久久久久久亚洲精品a片成人 | 在线а√天堂中文官网 | 老头边吃奶边弄进去呻吟 | 色婷婷香蕉在线一区二区 | 亚洲一区av无码专区在线观看 | 国内综合精品午夜久久资源 | 精品无码一区二区三区的天堂 | 日日橹狠狠爱欧美视频 | 国产亚洲精品久久久久久国模美 | 香港三级日本三级妇三级 | 人妻少妇被猛烈进入中文字幕 | 丝袜人妻一区二区三区 | 未满成年国产在线观看 | 国产精品第一国产精品 | 国产性生大片免费观看性 | 中文无码精品a∨在线观看不卡 | 久久精品国产大片免费观看 | 中文字幕人妻无码一区二区三区 | 青青久在线视频免费观看 | 又大又黄又粗又爽的免费视频 | 国产精品高潮呻吟av久久4虎 | 亚洲精品成a人在线观看 | 人妻少妇精品无码专区二区 | 麻豆果冻传媒2021精品传媒一区下载 | 久久久久人妻一区精品色欧美 | 无码吃奶揉捏奶头高潮视频 | 国产又爽又猛又粗的视频a片 | 自拍偷自拍亚洲精品10p | 亚洲日韩av一区二区三区中文 | 青春草在线视频免费观看 | 成人精品视频一区二区 | 51国偷自产一区二区三区 | 色五月丁香五月综合五月 | 无码人妻精品一区二区三区不卡 | 国产疯狂伦交大片 | 蜜桃av抽搐高潮一区二区 | 欧美激情综合亚洲一二区 | 亚洲 高清 成人 动漫 | 人妻天天爽夜夜爽一区二区 | 强奷人妻日本中文字幕 | 精品午夜福利在线观看 | 国产成人无码a区在线观看视频app | 国产av一区二区精品久久凹凸 | 色婷婷欧美在线播放内射 | 中文字幕久久久久人妻 | 色欲综合久久中文字幕网 | 99riav国产精品视频 | 国产黑色丝袜在线播放 | 亚洲中文字幕乱码av波多ji | 精品国偷自产在线 | 最近的中文字幕在线看视频 | 一本久道久久综合狠狠爱 | 国产农村乱对白刺激视频 | 牛和人交xxxx欧美 | 免费中文字幕日韩欧美 | 成人精品视频一区二区三区尤物 | 波多野结衣av一区二区全免费观看 | 欧美丰满熟妇xxxx | 精品人人妻人人澡人人爽人人 | 日本精品久久久久中文字幕 | 桃花色综合影院 | 小sao货水好多真紧h无码视频 | 午夜精品一区二区三区的区别 | 人妻互换免费中文字幕 | 97色伦图片97综合影院 | 国产97人人超碰caoprom | 欧美35页视频在线观看 | 给我免费的视频在线观看 | 成人欧美一区二区三区 | 爽爽影院免费观看 | 欧美丰满老熟妇xxxxx性 | 奇米影视888欧美在线观看 | 免费播放一区二区三区 | 亚洲gv猛男gv无码男同 | 人人澡人人透人人爽 | 无码人妻久久一区二区三区不卡 | 亚洲成av人片天堂网无码】 | 丝袜 中出 制服 人妻 美腿 | 99久久婷婷国产综合精品青草免费 | 天天躁夜夜躁狠狠是什么心态 | 麻豆国产人妻欲求不满 | 亚洲日韩乱码中文无码蜜桃臀网站 | 久久国产精品精品国产色婷婷 | 免费网站看v片在线18禁无码 | 国产区女主播在线观看 | 夜精品a片一区二区三区无码白浆 | 中文字幕久久久久人妻 | 人人爽人人澡人人高潮 | 久久五月精品中文字幕 | 国产午夜亚洲精品不卡 | 欧美人与物videos另类 | 日本乱人伦片中文三区 | 激情内射日本一区二区三区 | 人妻互换免费中文字幕 | 国内精品久久毛片一区二区 | 精品国产精品久久一区免费式 | 综合人妻久久一区二区精品 | 乱人伦人妻中文字幕无码 | 色窝窝无码一区二区三区色欲 | 久久久中文字幕日本无吗 | 日韩av无码中文无码电影 | 亚洲 另类 在线 欧美 制服 | 国产精品免费大片 | 成人欧美一区二区三区黑人免费 | 婷婷综合久久中文字幕蜜桃三电影 | 伊人久久大香线蕉亚洲 | 18精品久久久无码午夜福利 | 国产精品99久久精品爆乳 | 一个人看的www免费视频在线观看 | 97无码免费人妻超级碰碰夜夜 | 狂野欧美性猛xxxx乱大交 | 夜精品a片一区二区三区无码白浆 | 亚洲日韩一区二区三区 | 97se亚洲精品一区 | 女人色极品影院 | 欧美精品在线观看 | 国产成人综合在线女婷五月99播放 | 波多野结衣av在线观看 | 国语自产偷拍精品视频偷 | 亚洲中文字幕在线观看 | av无码不卡在线观看免费 | 色欲人妻aaaaaaa无码 | 国产亚洲欧美日韩亚洲中文色 | 老熟女重囗味hdxx69 | 日韩精品a片一区二区三区妖精 | 东京热一精品无码av | 成人无码精品一区二区三区 | 国产乱人伦av在线无码 | 午夜精品一区二区三区的区别 | 久久zyz资源站无码中文动漫 | 一本大道伊人av久久综合 | 中国女人内谢69xxxxxa片 | 中文字幕久久久久人妻 | 精品人妻中文字幕有码在线 | 18黄暴禁片在线观看 | 亚洲成a人片在线观看无码3d | 精品熟女少妇av免费观看 | 牲欲强的熟妇农村老妇女视频 | 无码一区二区三区在线观看 | 国精产品一品二品国精品69xx | 亚洲综合伊人久久大杳蕉 | 免费无码肉片在线观看 | а√资源新版在线天堂 | 亚洲成av人影院在线观看 | 四虎影视成人永久免费观看视频 | 波多野结衣高清一区二区三区 | а天堂中文在线官网 | 久久www免费人成人片 | 色综合久久久久综合一本到桃花网 | 67194成是人免费无码 | 一本无码人妻在中文字幕免费 | 国产午夜亚洲精品不卡 | 久久国内精品自在自线 | 影音先锋中文字幕无码 | 男女作爱免费网站 | 自拍偷自拍亚洲精品被多人伦好爽 | 粗大的内捧猛烈进出视频 | 天天拍夜夜添久久精品大 | 国产午夜亚洲精品不卡下载 | 国产免费观看黄av片 | 国产人妻精品午夜福利免费 | 日日麻批免费40分钟无码 | 久久久国产精品无码免费专区 | 牲欲强的熟妇农村老妇女 | 欧洲美熟女乱又伦 | 精品乱码久久久久久久 | 久久综合狠狠综合久久综合88 | 无码福利日韩神码福利片 | 东京无码熟妇人妻av在线网址 | 国产真人无遮挡作爱免费视频 | 精品无码国产自产拍在线观看蜜 | 露脸叫床粗话东北少妇 | 国产人妻精品一区二区三区不卡 | 最近免费中文字幕中文高清百度 | 国产一精品一av一免费 | aa片在线观看视频在线播放 | 成人欧美一区二区三区黑人免费 | 成人欧美一区二区三区黑人 | 国产特级毛片aaaaaaa高清 | 亚洲精品久久久久avwww潮水 | 亚洲中文字幕无码一久久区 | 精品欧美一区二区三区久久久 | 亚洲男女内射在线播放 | 综合网日日天干夜夜久久 | 高清不卡一区二区三区 | 亚洲 日韩 欧美 成人 在线观看 | 国内精品久久毛片一区二区 | 思思久久99热只有频精品66 | 国产成人无码av片在线观看不卡 | av无码不卡在线观看免费 | av人摸人人人澡人人超碰下载 | 欧美人与禽猛交狂配 | 久久99热只有频精品8 | 1000部夫妻午夜免费 | 性欧美videos高清精品 | 无码毛片视频一区二区本码 | 久久国产精品萌白酱免费 | 日本精品少妇一区二区三区 | 在线播放亚洲第一字幕 | 人人爽人人澡人人人妻 | 无码精品国产va在线观看dvd | 亚洲无人区一区二区三区 | 国产电影无码午夜在线播放 | 亚洲综合久久一区二区 | 无码毛片视频一区二区本码 | 伊人久久大香线蕉午夜 | 日韩欧美中文字幕公布 | 亚洲国产精华液网站w | 亚洲自偷自拍另类第1页 | 色综合久久中文娱乐网 | 欧美熟妇另类久久久久久多毛 | 久久久久人妻一区精品色欧美 | 无码中文字幕色专区 | 久久99精品久久久久久动态图 | 亚洲国产av美女网站 | 无码人妻精品一区二区三区不卡 | 欧美丰满熟妇xxxx性ppx人交 | 中文字幕av无码一区二区三区电影 | 久久久精品欧美一区二区免费 | 国语自产偷拍精品视频偷 | 久久精品无码一区二区三区 | 欧美一区二区三区视频在线观看 | 狠狠cao日日穞夜夜穞av | 亚洲 a v无 码免 费 成 人 a v | 激情五月综合色婷婷一区二区 | 日本一区二区更新不卡 | 国内综合精品午夜久久资源 | 国产精品毛片一区二区 | 狠狠亚洲超碰狼人久久 | 欧美日本精品一区二区三区 | 男女作爱免费网站 | 美女极度色诱视频国产 | 亚洲大尺度无码无码专区 | 天天av天天av天天透 | 亚洲人交乣女bbw | 精品偷拍一区二区三区在线看 | 亚洲精品久久久久中文第一幕 | 97久久精品无码一区二区 | 中国大陆精品视频xxxx | 成人性做爰aaa片免费看 | 亚洲中文字幕乱码av波多ji | 欧美三级不卡在线观看 | 青青草原综合久久大伊人精品 | 97久久超碰中文字幕 | 97无码免费人妻超级碰碰夜夜 | 精品夜夜澡人妻无码av蜜桃 | 最新国产乱人伦偷精品免费网站 | 久久久久成人片免费观看蜜芽 | 国产精品亚洲一区二区三区喷水 | 亚洲日韩av片在线观看 | 亚洲成a人片在线观看日本 | 午夜精品一区二区三区在线观看 | 亚洲精品成a人在线观看 | 亚洲日韩av一区二区三区四区 | 亚洲七七久久桃花影院 | 久久国产精品精品国产色婷婷 | 无码国产乱人伦偷精品视频 | 午夜精品一区二区三区在线观看 | yw尤物av无码国产在线观看 | 疯狂三人交性欧美 | 1000部啪啪未满十八勿入下载 | 日本在线高清不卡免费播放 | 亚洲男女内射在线播放 | 久久国产精品偷任你爽任你 | 国产偷抇久久精品a片69 | 国产精品无码一区二区桃花视频 | 久久这里只有精品视频9 | 国内少妇偷人精品视频 | 夜夜影院未满十八勿进 | 亚洲日韩av一区二区三区四区 | 99久久亚洲精品无码毛片 | 天堂а√在线地址中文在线 | 亚洲国产av美女网站 | 丝袜人妻一区二区三区 | 亚洲乱码中文字幕在线 | 最近的中文字幕在线看视频 | 成人欧美一区二区三区黑人 | 国产成人综合在线女婷五月99播放 | 无码乱肉视频免费大全合集 | 亚洲成色www久久网站 | 男女作爱免费网站 | 中文字幕av日韩精品一区二区 | 免费网站看v片在线18禁无码 | 欧美老熟妇乱xxxxx | 玩弄人妻少妇500系列视频 | 偷窥日本少妇撒尿chinese | 麻豆md0077饥渴少妇 | 性色欲网站人妻丰满中文久久不卡 | 亚洲热妇无码av在线播放 | 精品日本一区二区三区在线观看 | 亚洲欧美精品aaaaaa片 | 久久国产精品偷任你爽任你 | 一本加勒比波多野结衣 | 亚洲色在线无码国产精品不卡 | 国产成人无码av片在线观看不卡 | 中文字幕无码人妻少妇免费 | 亚洲成色在线综合网站 | 久久精品人妻少妇一区二区三区 | 香港三级日本三级妇三级 | 丰满人妻被黑人猛烈进入 | 亚洲成av人综合在线观看 | 国产乱人偷精品人妻a片 | 欧美人与物videos另类 | 精品国产成人一区二区三区 | 两性色午夜视频免费播放 | 久久久婷婷五月亚洲97号色 | 97久久精品无码一区二区 | 亲嘴扒胸摸屁股激烈网站 | 黑森林福利视频导航 | 色五月丁香五月综合五月 | 精品国产青草久久久久福利 | 无套内谢的新婚少妇国语播放 | 国产艳妇av在线观看果冻传媒 | 曰韩少妇内射免费播放 | 国产片av国语在线观看 | 日产国产精品亚洲系列 | 国产午夜无码精品免费看 | 一本久久a久久精品亚洲 | 国产熟女一区二区三区四区五区 | 国产舌乚八伦偷品w中 | 西西人体www44rt大胆高清 | 1000部啪啪未满十八勿入下载 | 无码人妻少妇伦在线电影 | 国色天香社区在线视频 | 欧美性黑人极品hd | 人妻中文无码久热丝袜 | 欧美老妇交乱视频在线观看 | 影音先锋中文字幕无码 | 青青青手机频在线观看 | 欧美精品无码一区二区三区 | 国产高清av在线播放 | 久久人人97超碰a片精品 | 国精产品一品二品国精品69xx | 亚洲午夜福利在线观看 | 亚洲一区二区三区国产精华液 | 国产人妻精品一区二区三区不卡 | 男女下面进入的视频免费午夜 | 永久免费观看国产裸体美女 | 女人被爽到呻吟gif动态图视看 | 蜜臀av在线播放 久久综合激激的五月天 | 久久久成人毛片无码 | 久久人人爽人人爽人人片av高清 | 日本高清一区免费中文视频 | 国产美女极度色诱视频www | 久久国产自偷自偷免费一区调 | 99精品国产综合久久久久五月天 | 无人区乱码一区二区三区 | 精品国产一区二区三区四区 | а√资源新版在线天堂 | 国産精品久久久久久久 | 欧美阿v高清资源不卡在线播放 | 永久免费观看美女裸体的网站 | 久久99热只有频精品8 | 粉嫩少妇内射浓精videos | 日日天日日夜日日摸 | 欧美精品无码一区二区三区 | 久久久久久久女国产乱让韩 | 婷婷色婷婷开心五月四房播播 | 波多野结衣av在线观看 | a片在线免费观看 | 亚洲欧美综合区丁香五月小说 | 国产亚洲精品久久久闺蜜 | 国产亚洲人成a在线v网站 | 国产绳艺sm调教室论坛 | 少妇无码av无码专区在线观看 | а天堂中文在线官网 | 动漫av一区二区在线观看 | 蜜臀av无码人妻精品 | 亚洲综合无码一区二区三区 | 好男人www社区 | 扒开双腿疯狂进出爽爽爽视频 | 波多野结衣av在线观看 | 国产精品人妻一区二区三区四 | 亚洲狠狠色丁香婷婷综合 | 国产精品沙发午睡系列 | 麻豆国产97在线 | 欧洲 | 久久精品成人欧美大片 | 无码人妻黑人中文字幕 | 少妇被粗大的猛进出69影院 | 人人妻人人藻人人爽欧美一区 | 国产在线精品一区二区三区直播 | 中文无码成人免费视频在线观看 | 国内精品人妻无码久久久影院 | 国产精品办公室沙发 | 成人欧美一区二区三区黑人免费 | 中文字幕无码av波多野吉衣 | 97夜夜澡人人爽人人喊中国片 | 久久99精品久久久久久动态图 | 午夜福利试看120秒体验区 | 中文字幕无线码 | 初尝人妻少妇中文字幕 | 日本护士xxxxhd少妇 | 亚洲国产精品无码一区二区三区 | 亚洲精品欧美二区三区中文字幕 | 国产乱子伦视频在线播放 | 亚洲熟妇自偷自拍另类 | 日韩精品久久久肉伦网站 | 国产性生交xxxxx无码 | 国产一区二区三区影院 | 小鲜肉自慰网站xnxx | 国产无遮挡吃胸膜奶免费看 | 国产精品美女久久久 | 爱做久久久久久 | 欧美变态另类xxxx | 精品乱子伦一区二区三区 | 午夜不卡av免费 一本久久a久久精品vr综合 | 久久综合九色综合97网 | 无码任你躁久久久久久久 | 欧美日韩色另类综合 | 乱码av麻豆丝袜熟女系列 | 精品偷拍一区二区三区在线看 | 欧美 丝袜 自拍 制服 另类 | 蜜桃视频韩日免费播放 | 久久综合九色综合97网 | 亚洲 日韩 欧美 成人 在线观看 | 欧美丰满老熟妇xxxxx性 | 一二三四在线观看免费视频 | 水蜜桃色314在线观看 | 国产超碰人人爽人人做人人添 | 欧美日韩人成综合在线播放 | 成人av无码一区二区三区 | 永久黄网站色视频免费直播 | 婷婷六月久久综合丁香 | 亚洲乱码日产精品bd | 精品国产青草久久久久福利 | 曰韩无码二三区中文字幕 | 无码人妻出轨黑人中文字幕 | 久久久亚洲欧洲日产国码αv | 97精品国产97久久久久久免费 | 亚洲色在线无码国产精品不卡 | 亚洲中文字幕乱码av波多ji | 人妻人人添人妻人人爱 | 国产乱子伦视频在线播放 | 国语精品一区二区三区 | 无码中文字幕色专区 | 色妞www精品免费视频 | 国产片av国语在线观看 | 装睡被陌生人摸出水好爽 | 日本熟妇浓毛 | a片免费视频在线观看 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亚洲无人区午夜福利码高清完整版 | 亚洲男人av香蕉爽爽爽爽 | 狠狠综合久久久久综合网 | 亚洲中文字幕无码中文字在线 | 4hu四虎永久在线观看 | 国产 浪潮av性色四虎 | 人妻中文无码久热丝袜 | 亚洲一区二区三区香蕉 | 人人妻人人藻人人爽欧美一区 | 久久久精品欧美一区二区免费 | 狠狠噜狠狠狠狠丁香五月 | 中文毛片无遮挡高清免费 | 亚洲国产欧美日韩精品一区二区三区 | 午夜性刺激在线视频免费 | 日韩av无码一区二区三区不卡 | 秋霞成人午夜鲁丝一区二区三区 | 国产成人无码一二三区视频 | 国产精品视频免费播放 | 又大又黄又粗又爽的免费视频 | 永久免费精品精品永久-夜色 | 曰本女人与公拘交酡免费视频 | 东京热男人av天堂 | 人人妻在人人 | 亚洲一区二区观看播放 | 欧美国产日韩亚洲中文 | 无码人妻精品一区二区三区下载 | 妺妺窝人体色www在线小说 | 国产又粗又硬又大爽黄老大爷视 | 人人妻人人澡人人爽人人精品 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲精品中文字幕乱码 | 久久人人爽人人爽人人片av高清 | 亚洲国产精品久久人人爱 | 精品久久久中文字幕人妻 | 国产又粗又硬又大爽黄老大爷视 | 中文字幕无码av波多野吉衣 | 精品无码一区二区三区的天堂 | 久久久久久久人妻无码中文字幕爆 | 欧美丰满少妇xxxx性 | 国产极品美女高潮无套在线观看 | 亚洲欧美国产精品专区久久 | 国产性生交xxxxx无码 | 久久精品国产99精品亚洲 | 欧美变态另类xxxx | 天下第一社区视频www日本 | 国产农村乱对白刺激视频 | 久久久亚洲欧洲日产国码αv | 久久国语露脸国产精品电影 | 岛国片人妻三上悠亚 | 99精品久久毛片a片 | 人妻少妇精品无码专区动漫 | 中文精品久久久久人妻不卡 | 国产精品嫩草久久久久 | 亚洲成av人影院在线观看 | 精品一区二区不卡无码av | 18禁止看的免费污网站 | 98国产精品综合一区二区三区 | 日日天日日夜日日摸 | 久久综合狠狠综合久久综合88 | 少妇人妻偷人精品无码视频 | 中国女人内谢69xxxxxa片 | 欧美丰满老熟妇xxxxx性 | 亚洲欧洲中文日韩av乱码 | 综合人妻久久一区二区精品 | 97久久精品无码一区二区 | 亚洲成av人综合在线观看 | 亚洲呦女专区 | 丰满少妇人妻久久久久久 | 色情久久久av熟女人妻网站 | 天下第一社区视频www日本 | 亚洲国产欧美日韩精品一区二区三区 | 2019午夜福利不卡片在线 | 5858s亚洲色大成网站www | 天天摸天天碰天天添 | 成 人影片 免费观看 | 最新版天堂资源中文官网 | 欧美成人高清在线播放 | 国产精品永久免费视频 | 玩弄人妻少妇500系列视频 | 无套内谢的新婚少妇国语播放 | 67194成是人免费无码 | 偷窥村妇洗澡毛毛多 | 久久精品无码一区二区三区 | 日本一本二本三区免费 | 国产福利视频一区二区 | 午夜精品久久久久久久久 | 久久精品中文字幕大胸 | 国产人妻久久精品二区三区老狼 | 国产人妖乱国产精品人妖 | 成熟妇人a片免费看网站 | 欧美日本免费一区二区三区 | 2019nv天堂香蕉在线观看 | 丰满人妻翻云覆雨呻吟视频 | 亚洲区小说区激情区图片区 | 国产成人精品一区二区在线小狼 | 中文字幕无码日韩欧毛 | 人妻天天爽夜夜爽一区二区 | 久青草影院在线观看国产 | 人妻人人添人妻人人爱 | 亚洲熟妇色xxxxx欧美老妇y | 国产精品亚洲综合色区韩国 | 一本大道伊人av久久综合 | 最近免费中文字幕中文高清百度 | 无码人妻黑人中文字幕 | 国产后入清纯学生妹 | 色情久久久av熟女人妻网站 | 无码人妻丰满熟妇区毛片18 | 夜先锋av资源网站 | 日本乱人伦片中文三区 | 日本乱人伦片中文三区 | 嫩b人妻精品一区二区三区 | 在线欧美精品一区二区三区 | 国产女主播喷水视频在线观看 | 最近免费中文字幕中文高清百度 | 少妇无套内谢久久久久 | 又大又硬又爽免费视频 | 精品国产一区二区三区四区在线看 | 乱码av麻豆丝袜熟女系列 | 国产性生大片免费观看性 | 久久亚洲日韩精品一区二区三区 | 亚洲自偷自拍另类第1页 | 亚洲精品一区二区三区大桥未久 | 国产亚洲精品久久久ai换 | 少妇太爽了在线观看 | 国产真实乱对白精彩久久 | 国产精品国产三级国产专播 | 亚洲 另类 在线 欧美 制服 | 荡女精品导航 | 成人精品视频一区二区三区尤物 | 熟女体下毛毛黑森林 | 妺妺窝人体色www婷婷 | 一本色道久久综合亚洲精品不卡 | 久久久久久av无码免费看大片 | 在线观看免费人成视频 | 久久久久国色av免费观看性色 | 亚洲成色www久久网站 | 国产午夜无码精品免费看 | 国产69精品久久久久app下载 | 日韩精品一区二区av在线 | 亚洲aⅴ无码成人网站国产app | 日日麻批免费40分钟无码 | 少妇人妻av毛片在线看 | 男女爱爱好爽视频免费看 | 久久午夜夜伦鲁鲁片无码免费 | 日产精品高潮呻吟av久久 | 成人综合网亚洲伊人 | 国产人成高清在线视频99最全资源 | 天天拍夜夜添久久精品 | 性欧美疯狂xxxxbbbb | 人妻互换免费中文字幕 | 无码av最新清无码专区吞精 | 亚洲の无码国产の无码影院 | 久久99精品久久久久久动态图 | 国产三级久久久精品麻豆三级 | 丰满人妻一区二区三区免费视频 | 男女爱爱好爽视频免费看 | а√资源新版在线天堂 | 97精品人妻一区二区三区香蕉 | 中文字幕人妻无码一夲道 | 欧美兽交xxxx×视频 | 少妇邻居内射在线 | 午夜免费福利小电影 | 东京热一精品无码av | 少妇高潮喷潮久久久影院 | 国产熟女一区二区三区四区五区 | 亚洲aⅴ无码成人网站国产app | 久久精品国产亚洲精品 | 樱花草在线社区www | 欧洲美熟女乱又伦 | 少妇无码av无码专区在线观看 | 大乳丰满人妻中文字幕日本 | 一本久道高清无码视频 | 色综合久久久久综合一本到桃花网 | 亚洲国精产品一二二线 | 又湿又紧又大又爽a视频国产 | 九九久久精品国产免费看小说 | 高清不卡一区二区三区 | 亚洲精品中文字幕久久久久 | 国产成人无码一二三区视频 | 亚洲精品一区二区三区婷婷月 | 国产精品无码一区二区三区不卡 | 国产午夜亚洲精品不卡 | 国产舌乚八伦偷品w中 | 亚洲色大成网站www国产 | 性生交大片免费看女人按摩摩 | 国产精品va在线播放 | 午夜免费福利小电影 | 国产精品成人av在线观看 | 国产人成高清在线视频99最全资源 | 97人妻精品一区二区三区 | aⅴ在线视频男人的天堂 | 无码人妻久久一区二区三区不卡 | a在线亚洲男人的天堂 | 四虎影视成人永久免费观看视频 | 国产在热线精品视频 | 亚洲最大成人网站 | 精品国产成人一区二区三区 | 欧美日韩视频无码一区二区三 | 欧美精品国产综合久久 | 亚洲成av人片天堂网无码】 | 亚洲欧美综合区丁香五月小说 | 国产午夜亚洲精品不卡下载 | 久久国产精品精品国产色婷婷 | 国产成人一区二区三区在线观看 | 狠狠躁日日躁夜夜躁2020 | 99久久婷婷国产综合精品青草免费 | 国产精品高潮呻吟av久久 | 国产激情艳情在线看视频 | 成年美女黄网站色大免费全看 | 午夜不卡av免费 一本久久a久久精品vr综合 | 日本护士毛茸茸高潮 | 永久免费观看美女裸体的网站 | 天干天干啦夜天干天2017 | 女人色极品影院 | 午夜精品一区二区三区在线观看 | 97久久国产亚洲精品超碰热 | 国产午夜无码精品免费看 | 欧美 丝袜 自拍 制服 另类 | 暴力强奷在线播放无码 | 国产偷自视频区视频 | 国产乱码精品一品二品 | 久久精品中文字幕大胸 | 亚洲色欲色欲天天天www | 中文字幕无码av激情不卡 | 麻豆国产人妻欲求不满谁演的 | 国产午夜亚洲精品不卡 | 激情五月综合色婷婷一区二区 | 亚洲国产欧美日韩精品一区二区三区 | 国产亚洲精品久久久久久久 | 内射后入在线观看一区 | 亚洲精品一区二区三区大桥未久 | 一本色道久久综合狠狠躁 | 亚洲精品久久久久久久久久久 | 国产一区二区三区四区五区加勒比 | 国内老熟妇对白xxxxhd | 精品无码成人片一区二区98 | 99久久久国产精品无码免费 | 久久婷婷五月综合色国产香蕉 | 国产无av码在线观看 | 亚洲国产欧美日韩精品一区二区三区 | 性开放的女人aaa片 | 国产成人无码区免费内射一片色欲 | 亚洲国产欧美日韩精品一区二区三区 | 国产精品亚洲lv粉色 | 97色伦图片97综合影院 | 日韩视频 中文字幕 视频一区 | 国产午夜亚洲精品不卡下载 | 中文字幕无码免费久久99 | 国产成人无码a区在线观看视频app | 亚洲区欧美区综合区自拍区 | 人人妻人人澡人人爽欧美一区九九 | 成年美女黄网站色大免费全看 | 国产成人精品一区二区在线小狼 | 两性色午夜视频免费播放 | 精品 日韩 国产 欧美 视频 | 丝袜美腿亚洲一区二区 | 欧美日韩一区二区综合 | 性啪啪chinese东北女人 | 少妇激情av一区二区 | 久久aⅴ免费观看 | 色综合久久88色综合天天 | 久久久av男人的天堂 | 欧美猛少妇色xxxxx | а√天堂www在线天堂小说 | 欧美熟妇另类久久久久久不卡 | 婷婷色婷婷开心五月四房播播 | 无码人妻少妇伦在线电影 | 扒开双腿吃奶呻吟做受视频 | 国产精品自产拍在线观看 | 国产另类ts人妖一区二区 | 精品国产一区二区三区四区在线看 | 国产 精品 自在自线 | 精品欧美一区二区三区久久久 | 精品日本一区二区三区在线观看 | 国产午夜视频在线观看 | 午夜福利试看120秒体验区 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲欧美精品伊人久久 | 午夜性刺激在线视频免费 | 少妇太爽了在线观看 | 精品无码一区二区三区爱欲 | 亚洲精品成人福利网站 | 中文字幕无码视频专区 | 国产精品高潮呻吟av久久4虎 | 四虎国产精品免费久久 | 精品无码国产一区二区三区av | 亚洲熟妇自偷自拍另类 | 午夜成人1000部免费视频 | 一二三四在线观看免费视频 | 又湿又紧又大又爽a视频国产 | 亚洲色成人中文字幕网站 | 无码人妻丰满熟妇区五十路百度 | 两性色午夜视频免费播放 | 丝袜美腿亚洲一区二区 | 日韩精品乱码av一区二区 | 久久人人爽人人人人片 | 精品无人国产偷自产在线 | 亚洲国产精品一区二区第一页 | 东北女人啪啪对白 | 免费国产成人高清在线观看网站 | 色噜噜亚洲男人的天堂 | 国产精品久久久久久亚洲毛片 | 欧美人与牲动交xxxx | 亚洲天堂2017无码中文 | 国产亚洲欧美在线专区 | 爱做久久久久久 | 成 人影片 免费观看 | 西西人体www44rt大胆高清 | 国产做国产爱免费视频 | 红桃av一区二区三区在线无码av | 国产三级精品三级男人的天堂 | 日韩人妻少妇一区二区三区 | 野狼第一精品社区 | 亚拍精品一区二区三区探花 | 中文字幕乱码中文乱码51精品 | 麻豆国产丝袜白领秘书在线观看 | 成人精品视频一区二区三区尤物 | 九九综合va免费看 | 奇米影视888欧美在线观看 | 欧美黑人巨大xxxxx | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | ass日本丰满熟妇pics | 久久亚洲中文字幕精品一区 | 天天躁日日躁狠狠躁免费麻豆 | 久久视频在线观看精品 | 中国女人内谢69xxxxxa片 | 亚洲经典千人经典日产 | 亚洲区小说区激情区图片区 | 日韩少妇内射免费播放 | 成人欧美一区二区三区黑人免费 | 亚洲精品一区二区三区在线 | 蜜桃臀无码内射一区二区三区 | 激情内射亚州一区二区三区爱妻 | 久久久久久久久蜜桃 | 日韩精品无码一本二本三本色 | 无套内射视频囯产 | 亚洲第一无码av无码专区 | 露脸叫床粗话东北少妇 | 好屌草这里只有精品 | 中文字幕日产无线码一区 | 人妻少妇精品久久 | 任你躁国产自任一区二区三区 | 天堂无码人妻精品一区二区三区 | 999久久久国产精品消防器材 | 少妇性俱乐部纵欲狂欢电影 | 亚洲中文字幕成人无码 | 欧美freesex黑人又粗又大 | 99久久精品国产一区二区蜜芽 | 日本高清一区免费中文视频 | 国产精品人人妻人人爽 | 亚洲中文字幕在线观看 | 精品国产福利一区二区 | 人人妻人人澡人人爽欧美一区 | 国产人妖乱国产精品人妖 | 日日碰狠狠丁香久燥 | 国产福利视频一区二区 | 国产激情无码一区二区app | 欧美真人作爱免费视频 | 日韩人妻系列无码专区 | 网友自拍区视频精品 | 成 人 网 站国产免费观看 | 丰满人妻精品国产99aⅴ | 日韩少妇内射免费播放 | 亚洲无人区午夜福利码高清完整版 | 精品国产青草久久久久福利 | 男女作爱免费网站 | 一本久道高清无码视频 | 免费无码的av片在线观看 | 亚洲精品综合一区二区三区在线 | 国产疯狂伦交大片 | 2020久久香蕉国产线看观看 | 国产亚洲日韩欧美另类第八页 | 国产高潮视频在线观看 | 麻豆成人精品国产免费 | 欧美熟妇另类久久久久久多毛 | 人人妻人人澡人人爽欧美一区九九 | 疯狂三人交性欧美 | 精品国产aⅴ无码一区二区 | 天天综合网天天综合色 | 午夜成人1000部免费视频 | 亚洲色无码一区二区三区 | 中文字幕久久久久人妻 | 黑人大群体交免费视频 | 日韩精品无码一本二本三本色 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲成a人片在线观看日本 | 领导边摸边吃奶边做爽在线观看 | 亚洲一区二区三区偷拍女厕 | 国产性生交xxxxx无码 | 一本色道婷婷久久欧美 | 日本一卡二卡不卡视频查询 | 久久 国产 尿 小便 嘘嘘 | 亚洲天堂2017无码 | 国产偷国产偷精品高清尤物 | av人摸人人人澡人人超碰下载 | 久久zyz资源站无码中文动漫 | 色诱久久久久综合网ywww | 国产欧美精品一区二区三区 | 久久久久av无码免费网 | 老熟妇乱子伦牲交视频 | 波多野结衣高清一区二区三区 | 色综合久久网 | 久久综合激激的五月天 | 天堂一区人妻无码 | 国产乱人伦av在线无码 | 久久久久久av无码免费看大片 | 人人澡人人妻人人爽人人蜜桃 | 精品厕所偷拍各类美女tp嘘嘘 | 激情五月综合色婷婷一区二区 | 欧美日韩人成综合在线播放 | 久久婷婷五月综合色国产香蕉 | 亚洲成a人一区二区三区 | 国产乱人无码伦av在线a | 亚洲国产欧美日韩精品一区二区三区 | 日本一区二区更新不卡 | 乱码午夜-极国产极内射 | www国产亚洲精品久久久日本 | 狠狠色色综合网站 | 亚洲高清偷拍一区二区三区 | 狠狠色噜噜狠狠狠狠7777米奇 | 日韩人妻无码一区二区三区久久99 | 三上悠亚人妻中文字幕在线 | 免费人成在线视频无码 | 无码国产乱人伦偷精品视频 | 国产午夜视频在线观看 | 呦交小u女精品视频 | 色情久久久av熟女人妻网站 | 亚洲精品一区二区三区在线 | 日韩av激情在线观看 | 欧美精品一区二区精品久久 | 欧洲美熟女乱又伦 | 亚洲一区二区三区无码久久 | 国产美女极度色诱视频www | 国产卡一卡二卡三 | 久久99精品国产麻豆 | 狠狠亚洲超碰狼人久久 | 欧美老妇与禽交 | 丰满肥臀大屁股熟妇激情视频 | 国产亚洲精品久久久久久久 | 极品嫩模高潮叫床 | 日本xxxx色视频在线观看免费 | 国产舌乚八伦偷品w中 | 亚洲精品综合一区二区三区在线 | 人妻少妇精品无码专区二区 | 久久熟妇人妻午夜寂寞影院 | 亚洲国产成人a精品不卡在线 | 中文字幕无码av波多野吉衣 | 久久久www成人免费毛片 | 亚洲精品一区二区三区四区五区 | 乱码av麻豆丝袜熟女系列 | 免费播放一区二区三区 | 日日碰狠狠躁久久躁蜜桃 | 国产成人综合在线女婷五月99播放 | 免费看男女做好爽好硬视频 | 国产成人一区二区三区在线观看 | yw尤物av无码国产在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 成人无码影片精品久久久 | 亚洲乱码国产乱码精品精 | 国产69精品久久久久app下载 | 成人性做爰aaa片免费看不忠 | 免费男性肉肉影院 | 亚洲色偷偷男人的天堂 | 一本久久伊人热热精品中文字幕 | 亚洲中文字幕乱码av波多ji | 午夜精品久久久内射近拍高清 | 精品亚洲成av人在线观看 | 波多野结衣乳巨码无在线观看 | 免费无码肉片在线观看 | 伊人久久大香线蕉av一区二区 | 欧美日韩精品 | 日日夜夜撸啊撸 | 女人和拘做爰正片视频 | 永久黄网站色视频免费直播 | 久久99精品国产.久久久久 | 一个人看的视频www在线 | 人妻aⅴ无码一区二区三区 | 亚洲日韩一区二区三区 | 欧美乱妇无乱码大黄a片 | 精品人妻中文字幕有码在线 | 性欧美大战久久久久久久 | 精品国产一区二区三区四区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 美女毛片一区二区三区四区 | 亚洲成色www久久网站 | 中文字幕无码av激情不卡 | 影音先锋中文字幕无码 | 精品成人av一区二区三区 | 男女作爱免费网站 | 中文字幕无码av激情不卡 | 人妻无码αv中文字幕久久琪琪布 | 国产精品无码一区二区三区不卡 | 大肉大捧一进一出视频出来呀 | 在线播放亚洲第一字幕 | 亚洲日本一区二区三区在线 | 最新国产乱人伦偷精品免费网站 | 少妇被黑人到高潮喷出白浆 | 99久久精品无码一区二区毛片 | 精品夜夜澡人妻无码av蜜桃 | 强辱丰满人妻hd中文字幕 | 国产肉丝袜在线观看 | 在线播放亚洲第一字幕 | 一本久道高清无码视频 | 麻豆国产97在线 | 欧洲 | 午夜熟女插插xx免费视频 | 国产精品美女久久久 | 1000部夫妻午夜免费 | 亚洲综合另类小说色区 | 久久久久久亚洲精品a片成人 | 小鲜肉自慰网站xnxx | 国产成人精品视频ⅴa片软件竹菊 | 午夜不卡av免费 一本久久a久久精品vr综合 | 中文字幕人成乱码熟女app | 免费无码的av片在线观看 | 久久久久久久女国产乱让韩 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲色欲久久久综合网东京热 | 又紧又大又爽精品一区二区 | 国产午夜视频在线观看 | 无人区乱码一区二区三区 | 99久久久无码国产aaa精品 | 欧美日本日韩 | 无遮无挡爽爽免费视频 | 丰满少妇女裸体bbw | 鲁大师影院在线观看 | 十八禁真人啪啪免费网站 | 51国偷自产一区二区三区 | 国内综合精品午夜久久资源 | 99久久精品日本一区二区免费 | 草草网站影院白丝内射 | 亚洲国产av精品一区二区蜜芽 | 少妇性荡欲午夜性开放视频剧场 | 国产成人综合色在线观看网站 | 久久久久av无码免费网 | 四十如虎的丰满熟妇啪啪 | 人妻夜夜爽天天爽三区 | 成人综合网亚洲伊人 | 又湿又紧又大又爽a视频国产 | 人人妻人人澡人人爽欧美精品 | 婷婷六月久久综合丁香 | 老子影院午夜精品无码 | 一本无码人妻在中文字幕免费 | 伦伦影院午夜理论片 | 国产在线一区二区三区四区五区 | 国产精品无码永久免费888 | 狂野欧美性猛交免费视频 | 美女毛片一区二区三区四区 | 97人妻精品一区二区三区 | 图片区 小说区 区 亚洲五月 | 无码帝国www无码专区色综合 | 成人亚洲精品久久久久软件 | 国产人妻大战黑人第1集 | 鲁鲁鲁爽爽爽在线视频观看 | 动漫av一区二区在线观看 | 国产极品视觉盛宴 | 国产人妻精品一区二区三区 | 国产av人人夜夜澡人人爽麻豆 | 国产黄在线观看免费观看不卡 | 亚洲日韩av一区二区三区四区 | 国产亚洲精品久久久久久大师 | 亚洲国产精品成人久久蜜臀 | √8天堂资源地址中文在线 | 99久久婷婷国产综合精品青草免费 | 久久亚洲a片com人成 | 日日碰狠狠躁久久躁蜜桃 | 内射后入在线观看一区 | 九九热爱视频精品 | 亚洲毛片av日韩av无码 | 97人妻精品一区二区三区 | 在线观看欧美一区二区三区 | 伊在人天堂亚洲香蕉精品区 | 天天av天天av天天透 | 中国大陆精品视频xxxx | 精品国精品国产自在久国产87 | 午夜理论片yy44880影院 | 国产成人无码区免费内射一片色欲 | 国产免费观看黄av片 | 欧美 日韩 人妻 高清 中文 | 妺妺窝人体色www婷婷 | 亚洲日韩乱码中文无码蜜桃臀网站 | 精品亚洲韩国一区二区三区 | 日韩av无码一区二区三区不卡 | 人妻天天爽夜夜爽一区二区 | 无遮挡国产高潮视频免费观看 | 国产热a欧美热a在线视频 | 国产香蕉97碰碰久久人人 | 国产亚洲欧美日韩亚洲中文色 | 成人免费视频在线观看 | 国产综合久久久久鬼色 | 无码人妻黑人中文字幕 | www国产精品内射老师 | 狠狠色噜噜狠狠狠7777奇米 | 日韩精品久久久肉伦网站 | 久久久精品456亚洲影院 | 欧美日韩视频无码一区二区三 | 欧美 日韩 亚洲 在线 | 亚洲中文字幕无码一久久区 | 中文久久乱码一区二区 | 荫蒂添的好舒服视频囗交 | 亚洲 高清 成人 动漫 | 999久久久国产精品消防器材 | 人妻aⅴ无码一区二区三区 | 久久久久久a亚洲欧洲av冫 | 久热国产vs视频在线观看 | 中文字幕无码日韩专区 | 欧美黑人性暴力猛交喷水 | 日韩精品无码一本二本三本色 | 亚洲色大成网站www | 国产香蕉尹人综合在线观看 | 少妇被黑人到高潮喷出白浆 | 人人妻人人澡人人爽精品欧美 | 在线播放无码字幕亚洲 | 国产两女互慰高潮视频在线观看 | 人人妻人人藻人人爽欧美一区 | 麻豆精品国产精华精华液好用吗 | 一个人看的www免费视频在线观看 | 97se亚洲精品一区 | 人妻体内射精一区二区三四 | 亚洲中文字幕在线无码一区二区 | 色婷婷综合激情综在线播放 | 2020久久超碰国产精品最新 | 中文字幕日产无线码一区 | 欧美自拍另类欧美综合图片区 | 丰满人妻一区二区三区免费视频 | 免费网站看v片在线18禁无码 | 丰满妇女强制高潮18xxxx | 日本熟妇人妻xxxxx人hd | 西西人体www44rt大胆高清 | 国产成人无码a区在线观看视频app | 麻豆av传媒蜜桃天美传媒 | 亚洲成a人片在线观看日本 | 国产精品久久久久影院嫩草 | 色情久久久av熟女人妻网站 | 国内精品久久毛片一区二区 | 夜精品a片一区二区三区无码白浆 | 亚洲国产高清在线观看视频 | 国产午夜无码视频在线观看 | 国产一区二区三区精品视频 | 国产精品亚洲а∨无码播放麻豆 | 影音先锋中文字幕无码 | 中文无码精品a∨在线观看不卡 | 97夜夜澡人人双人人人喊 | 亚洲一区二区三区含羞草 | 久久无码人妻影院 | 日韩欧美中文字幕在线三区 | 国产成人无码av在线影院 | 日本一区二区更新不卡 | 中文字幕av无码一区二区三区电影 | 精品久久久中文字幕人妻 | 高潮毛片无遮挡高清免费视频 | 在线 国产 欧美 亚洲 天堂 | 亚洲熟妇色xxxxx欧美老妇y | 国产精品福利视频导航 | 欧美日韩视频无码一区二区三 | 久久国产自偷自偷免费一区调 | 国产真人无遮挡作爱免费视频 | 国产精品99爱免费视频 | 日本丰满护士爆乳xxxx | 国产精品igao视频网 | 在线观看国产一区二区三区 | 日韩欧美成人免费观看 | 亚洲日韩av一区二区三区中文 | 乱中年女人伦av三区 | 成年美女黄网站色大免费视频 | 黑森林福利视频导航 | 成人aaa片一区国产精品 | yw尤物av无码国产在线观看 | 人人妻人人澡人人爽人人精品浪潮 | 人妻天天爽夜夜爽一区二区 | 欧美老妇交乱视频在线观看 | 亚洲 欧美 激情 小说 另类 | 久久久精品国产sm最大网站 | 毛片内射-百度 | 四十如虎的丰满熟妇啪啪 | 天天拍夜夜添久久精品 | 未满成年国产在线观看 | 丝袜 中出 制服 人妻 美腿 | 国产免费无码一区二区视频 | 精品国产aⅴ无码一区二区 | 国产精品久久久久久久影院 | 亚洲中文字幕va福利 | 最新国产乱人伦偷精品免费网站 | 亚洲熟熟妇xxxx | 高潮毛片无遮挡高清免费视频 | 狠狠综合久久久久综合网 | 亚洲熟妇色xxxxx亚洲 | 欧美日韩一区二区综合 | 强伦人妻一区二区三区视频18 | 亚洲码国产精品高潮在线 | 色综合视频一区二区三区 | 欧美xxxx黑人又粗又长 | 大地资源网第二页免费观看 | 一本久久伊人热热精品中文字幕 | 免费无码肉片在线观看 | 在教室伦流澡到高潮hnp视频 | 国产亚洲欧美在线专区 | 精品无码av一区二区三区 | 99久久精品午夜一区二区 | 欧美激情综合亚洲一二区 | 欧美国产日韩亚洲中文 | 激情五月综合色婷婷一区二区 | 免费中文字幕日韩欧美 | 精品久久8x国产免费观看 | 国产凸凹视频一区二区 | 18精品久久久无码午夜福利 | 国产成人无码区免费内射一片色欲 | 国产综合色产在线精品 | 亚洲精品国产精品乱码视色 | 人妻天天爽夜夜爽一区二区 | 日本熟妇人妻xxxxx人hd | 熟妇人妻无乱码中文字幕 | 亚洲综合在线一区二区三区 | 无码国内精品人妻少妇 | 无码人中文字幕 | 狠狠cao日日穞夜夜穞av | 日韩成人一区二区三区在线观看 | 色五月丁香五月综合五月 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产xxx69麻豆国语对白 | 亚洲人成网站在线播放942 | 正在播放东北夫妻内射 | 无码av中文字幕免费放 | 欧美阿v高清资源不卡在线播放 | 国产精品国产自线拍免费软件 | 亚洲精品国产a久久久久久 | 欧洲欧美人成视频在线 | 国产精品久久久一区二区三区 | 成人精品一区二区三区中文字幕 | 国产精品嫩草久久久久 | 欧美熟妇另类久久久久久不卡 | 免费播放一区二区三区 | 性做久久久久久久久 | 天堂亚洲免费视频 | 国产又爽又猛又粗的视频a片 | 日本精品久久久久中文字幕 | 亚洲а∨天堂久久精品2021 | 一本无码人妻在中文字幕免费 | 熟女少妇在线视频播放 | 久久人人爽人人爽人人片av高清 | 精品无人国产偷自产在线 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 99久久人妻精品免费二区 | 国产激情无码一区二区app | 欧美国产日韩久久mv | 亚洲成a人片在线观看无码3d | 黑人巨大精品欧美一区二区 | а√天堂www在线天堂小说 | 一本大道伊人av久久综合 | 国精品人妻无码一区二区三区蜜柚 | 天下第一社区视频www日本 | 国内老熟妇对白xxxxhd | 98国产精品综合一区二区三区 | 女高中生第一次破苞av | 熟妇女人妻丰满少妇中文字幕 | 男女下面进入的视频免费午夜 | 亚洲精品一区二区三区在线观看 | 色情久久久av熟女人妻网站 | 国产日产欧产精品精品app | 人人妻人人藻人人爽欧美一区 | 国产 精品 自在自线 | 撕开奶罩揉吮奶头视频 | 人妻少妇精品无码专区动漫 | 任你躁在线精品免费 | 国产成人无码一二三区视频 | 色爱情人网站 | 蜜臀aⅴ国产精品久久久国产老师 | 国产成人一区二区三区在线观看 | 性做久久久久久久久 | 国产人妻精品午夜福利免费 | 无码国内精品人妻少妇 | 小sao货水好多真紧h无码视频 | 国产精品亚洲lv粉色 | 国产猛烈高潮尖叫视频免费 | 成人一在线视频日韩国产 | 国产性生大片免费观看性 | 国产欧美亚洲精品a | 两性色午夜视频免费播放 | 国产精品无码一区二区三区不卡 | 色婷婷av一区二区三区之红樱桃 | 荫蒂添的好舒服视频囗交 | 国产成人午夜福利在线播放 | 少妇人妻偷人精品无码视频 | 国产熟女一区二区三区四区五区 | 免费无码的av片在线观看 | 欧美 日韩 人妻 高清 中文 | 国产艳妇av在线观看果冻传媒 | 久9re热视频这里只有精品 | 成人欧美一区二区三区黑人 | 成人动漫在线观看 | 亚洲无人区午夜福利码高清完整版 | 久热国产vs视频在线观看 | 欧美日韩色另类综合 | 午夜嘿嘿嘿影院 | 精品国产乱码久久久久乱码 | 国产精品多人p群无码 | 国产一区二区不卡老阿姨 | 国产99久久精品一区二区 | 亚洲 激情 小说 另类 欧美 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲国产精品久久久久久 | 亚洲精品一区二区三区四区五区 | 老头边吃奶边弄进去呻吟 | 国产特级毛片aaaaaaa高清 | 中文字幕无码免费久久99 | 麻花豆传媒剧国产免费mv在线 | 久久人妻内射无码一区三区 | 亚洲色大成网站www国产 | 亚洲七七久久桃花影院 | 久久99精品国产麻豆蜜芽 | 亚洲精品成人福利网站 | 99精品国产综合久久久久五月天 | 亚洲中文字幕在线无码一区二区 | 国产亚洲精品久久久久久久久动漫 | 精品国产一区av天美传媒 | 亚洲一区二区三区无码久久 | 国内老熟妇对白xxxxhd | 成人aaa片一区国产精品 | 2020久久香蕉国产线看观看 | 色 综合 欧美 亚洲 国产 | 婷婷五月综合激情中文字幕 | 亚洲人成人无码网www国产 | 久久综合给久久狠狠97色 | 欧美成人高清在线播放 | 久久综合给合久久狠狠狠97色 | 成人欧美一区二区三区黑人免费 | 男人的天堂2018无码 | 亚洲国产精品成人久久蜜臀 | 亚洲精品久久久久中文第一幕 | 国产精品视频免费播放 | 久久99国产综合精品 | 中文字幕av无码一区二区三区电影 | 免费男性肉肉影院 | 激情爆乳一区二区三区 | 国产真人无遮挡作爱免费视频 | 精品国偷自产在线 | 国产精品久久久午夜夜伦鲁鲁 | 免费无码的av片在线观看 | 国产成人人人97超碰超爽8 | 三级4级全黄60分钟 | 在线播放免费人成毛片乱码 | 六十路熟妇乱子伦 | 国产精品久久久av久久久 | 131美女爱做视频 | 亚洲精品午夜国产va久久成人 | 国产国语老龄妇女a片 | 国产精品第一国产精品 | 国产亚av手机在线观看 | 成熟人妻av无码专区 | √天堂资源地址中文在线 | 精品亚洲韩国一区二区三区 | 免费网站看v片在线18禁无码 | 国产av剧情md精品麻豆 | 色欲人妻aaaaaaa无码 | 亚洲精品一区二区三区大桥未久 | 亚洲小说图区综合在线 | 国产激情艳情在线看视频 | 亚洲精品一区二区三区大桥未久 | 狠狠色欧美亚洲狠狠色www | 人妻人人添人妻人人爱 | 樱花草在线播放免费中文 | 亚洲大尺度无码无码专区 | 亚洲日韩中文字幕在线播放 | 久久久久99精品成人片 | 欧美35页视频在线观看 | 午夜成人1000部免费视频 | 成人无码精品1区2区3区免费看 | 亚洲精品综合一区二区三区在线 | 夜夜高潮次次欢爽av女 | 性欧美熟妇videofreesex | 老熟女重囗味hdxx69 | 欧美熟妇另类久久久久久不卡 | 内射爽无广熟女亚洲 | 蜜桃视频韩日免费播放 | 日本一本二本三区免费 | 亚洲日本一区二区三区在线 | 欧美日韩综合一区二区三区 | 在线视频网站www色 | 久久zyz资源站无码中文动漫 | 国产在线精品一区二区三区直播 | 中文精品久久久久人妻不卡 | 国产成人无码av片在线观看不卡 | 日本www一道久久久免费榴莲 | 亚洲国产精品毛片av不卡在线 | 性欧美videos高清精品 | 亚洲精品国产精品乱码不卡 | 久久久精品成人免费观看 | 131美女爱做视频 | 欧美日本免费一区二区三区 | 久久久久99精品国产片 | 麻豆精品国产精华精华液好用吗 | 亚洲日韩av片在线观看 | 综合人妻久久一区二区精品 | 中文字幕乱码人妻二区三区 | 牲交欧美兽交欧美 | 人妻体内射精一区二区三四 | 欧美日韩视频无码一区二区三 | 六月丁香婷婷色狠狠久久 | 激情内射日本一区二区三区 | 欧美高清在线精品一区 | 久久视频在线观看精品 | 波多野42部无码喷潮在线 | 久久久久久久人妻无码中文字幕爆 | 国产精品资源一区二区 | 国产 精品 自在自线 | 欧美日韩人成综合在线播放 | 国产亚洲精品久久久ai换 | 精品欧洲av无码一区二区三区 | 国内精品人妻无码久久久影院蜜桃 | 欧洲极品少妇 | 人人妻人人澡人人爽欧美精品 | 欧美国产日韩久久mv | 亚洲一区二区三区偷拍女厕 | 2020久久香蕉国产线看观看 | 中国女人内谢69xxxxxa片 | 欧美xxxx黑人又粗又长 | 国产免费久久久久久无码 | 亚洲欧洲日本综合aⅴ在线 | 久久久久久av无码免费看大片 | 樱花草在线社区www | 午夜精品久久久内射近拍高清 | 漂亮人妻洗澡被公强 日日躁 | 中文字幕精品av一区二区五区 | 麻豆国产人妻欲求不满谁演的 | 精品熟女少妇av免费观看 | 7777奇米四色成人眼影 | 色婷婷久久一区二区三区麻豆 | √8天堂资源地址中文在线 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲综合另类小说色区 | 久久99久久99精品中文字幕 | www国产精品内射老师 | 无码吃奶揉捏奶头高潮视频 | 亚洲欧美综合区丁香五月小说 | 国产成人无码a区在线观看视频app | 日产精品99久久久久久 | 少妇被黑人到高潮喷出白浆 | а天堂中文在线官网 | 国内揄拍国内精品少妇国语 | 久久久国产一区二区三区 | 日本一区二区三区免费播放 | 久久综合香蕉国产蜜臀av | 初尝人妻少妇中文字幕 | 国产办公室秘书无码精品99 | 红桃av一区二区三区在线无码av | 麻豆果冻传媒2021精品传媒一区下载 | 成人三级无码视频在线观看 | 色偷偷人人澡人人爽人人模 | 国产精品无码一区二区桃花视频 | 亚洲一区二区三区 | 日韩人妻无码中文字幕视频 | 久久亚洲日韩精品一区二区三区 | 久久久久se色偷偷亚洲精品av | 亚洲精品一区三区三区在线观看 | 国产绳艺sm调教室论坛 | 98国产精品综合一区二区三区 | 午夜成人1000部免费视频 | 极品尤物被啪到呻吟喷水 | 无码毛片视频一区二区本码 | av人摸人人人澡人人超碰下载 | 在线观看国产午夜福利片 | 久久精品人妻少妇一区二区三区 | 乱人伦人妻中文字幕无码 | 老司机亚洲精品影院 | 亚洲精品中文字幕 | 无码人妻av免费一区二区三区 | 男人和女人高潮免费网站 | 波多野结衣乳巨码无在线观看 | 午夜熟女插插xx免费视频 | 亚洲国产一区二区三区在线观看 | 国产精品沙发午睡系列 | 免费人成网站视频在线观看 | 国产欧美亚洲精品a | 成人欧美一区二区三区 | 装睡被陌生人摸出水好爽 | 2020最新国产自产精品 | 久久国产精品偷任你爽任你 | 人人爽人人澡人人人妻 | 久久精品中文闷骚内射 | 亚洲午夜无码久久 | 日日碰狠狠躁久久躁蜜桃 | 午夜福利试看120秒体验区 | 男人和女人高潮免费网站 | 亚洲精品综合五月久久小说 |