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

JavaScript應用核心:事件處理概述

開發 前端
事件(Event)是JavaScript應用跳動的心臟,通過使用JavaScript ,你可以監聽特定事件的發生,并規定讓某些事件發生以對這些事件做出響應。

事件(Event)是JavaScript應用跳動的心臟,也是把所有東西粘在一起的膠水。當我們與瀏覽器中Web頁面進行某些類型的交互時,事件就發生了。

事件可能是用戶在某些內容上的點擊、鼠標經過某個特定元素或按下鍵盤上的某些按鍵。事件還可能是Web瀏覽器中發生的事情,比如說某個Web頁面加載完成,或者是用戶滾動窗口或改變窗口大小。

51CTO推薦閱讀:詳解Javascript事件驅動的來龍去脈

今天的事件

在漫長的演變史,我們已經告別了內嵌式的事件處理方式(直接將事件處理器放在 HTML 元素之內來使用)。今天的事件,它已是DOM的重要組成部分,遺憾的是, IE繼續保留它最早在IE4.0中實現的事件模型,以后的IE版本中也沒有做太大的改變,這也就是說IE還是使用的是一種專有的事件模型(冒泡型),而其它的主流瀏覽器直到DOM 級別3 規定定案后,才陸陸續續支持DOM標準的事件處理模型 — 捕獲型與冒泡型。

歷史原因是:W3C規范在DOM級別1中并沒有定義任何的事件,直到發布于2000年11月的DOM級別2才定義了一小部分子集,DOM級別2中已經提供了提供了一種更詳細的更細致的方式以控制Web頁面中的事件,***,完整的事件是在2004年DOM級別3的規定中才最終定案。因為IE4是1995推出的并已實現了自己的事件模型(冒泡型),當時根本就沒有DOM標準,不過在以后的DOM標準規范過程中已經把IE的事件模型吸收到了其中。

目前除IE瀏覽器外,其它主流的Firefox, Opera,Safari都支持標準的DOM事件處理模型。IE仍然使用自己專有的事件模型,即冒泡型,它事件模型的一部份被DOM標準采用,這點對于開發者來說也是有好處的,只有使用DOM標準,IE都共有的事件處理方式才能有效的跨瀏覽器。

DOM事件流

DOM(文檔對象模型)結構是一個樹型結構,當一個HTML元素產生一個事件時,該事件會在元素結點與根節點之間按特定的順序傳播,路徑所經過的節點都會收到該事件,這個傳播過程可稱為DOM事件流。事件順序有兩種類型:事件捕捉和事件冒泡。

冒泡型事件(Event Bubbling)

這是IE瀏覽器對事件模型的實現,也是最容易理解的,至少筆者覺得比較符合實際的。冒泡,顧名思義,事件像個水中的氣泡一樣一直往上冒,直到頂端。從
DOM樹型結構上理解,就是事件由葉子節點沿祖先結點一直向上傳遞直到根節點;從瀏覽器界面視圖HTML元素排列層次上理解就是事件由具有從屬關系的最確定的目標元素一直傳遞到最不確定的目標元素.冒泡技術.冒泡型事件的基本思想,事件按照從特定的事件目標開始到最不確定的事件目標.

捕獲型事件(Event Capturing)

Netscape 的實現,它與冒泡型剛好相反,由DOM樹最頂層元素一直到最精確的元素,這個事件模型對于開發者來說(至少是我..)有點費解,因為直觀上的理解應該如同冒泡型,事件傳遞應該由最確定的元素,即事件產生元素開始。

DOM標準的事件模型

我們已經對上面兩個不同的事件模型進行了解釋和對比。DOM標準同時支持兩種事件模型,即捕獲型事件與冒泡型事件,但是,捕獲型事件先發生。兩種事件流都會觸發DOM中的所有對象,從document對象開始,也在document對象結束(大部分兼容標準的瀏覽器會繼續將事件是捕捉/冒泡延續到window對象)。

DOM標準的事件模型最獨特的性質是,文本節點也會觸發事件(在IE不會)。

事件傳送

為了更好的說明DOM標準中的事件流原理,我們把它放在“事件傳送”小結里來更具體的解釋。

顯然,如果為一個超鏈接添加了click事件監聽器,那么當該鏈接被點擊時該事件監聽器就會被執行。但如果把該事件監聽器指派給了包含該鏈接的p元素或者位于DOM樹頂端的document節點,那么點擊該鏈接也同樣會觸發該事件監聽器。

這是因為事件不僅僅對觸發的目標元素產生影響,它們還會對沿著DOM結構的所有元素產生影響。這就是大家所熟悉的事件轉送。W3C事件模型中明確地指出了事件轉送的原理。事件傳送可以分為3個階段。

(1).在事件捕捉(Capturing)階段,事件將沿著DOM樹向下轉送,目標節點的每一個祖先節點,直至目標節點。例如,若用戶單擊了一個超鏈接,則該單擊事件將從document節點轉送到html元素,body元素以及包含該鏈接的p元素。在此過程中,瀏覽器都會檢測針對該事件的捕捉事件監聽器,并且運行這件事件監聽器。

(2)在目標(target)階段,瀏覽器在查找到已經指定給目標事件的事件監聽器之后,就會運行 該事件監聽器。目標節點就是觸發事件的DOM節點。例如,如果用戶單擊一個超鏈接,那么該鏈接就是目標節點(此時的目標節點實際上是超鏈接內的文本節點)。

(3).在冒泡(Bubbling)階段,事件將沿著DOM樹向上轉送,再次逐個訪問目標元素的祖先節點到document節點。該過程中的每一步。瀏覽器都將檢測那些不是捕捉事件監聽器的事件監聽器,并執行它們。

并非所有的事件都會經過冒泡階段的

所有的事件都要經過捕捉階段和目標階段,但是有些事件會跳過冒泡階段。例如,讓元素獲得輸入焦點的focus事件以及失去輸入焦點的blur事件就都不會冒泡。

#p#

事件句柄和事件接聽器

事件句柄

事件句柄(又稱事件處理函數,DOM稱之為事件監聽函數),用于響應某個事件而調用的函數稱為事件處理函數。每一個事件均對應一個事件句柄,在程序執行時,將相應的函數或語句指定給事件句柄,則在該事件發生時,瀏覽器便執行指定的函數或語句,從而實現網頁內容與用戶操作的交互。當瀏覽器檢測到某事件發生時,便查找該事件對應的事件句柄有沒有被賦值,如果有,則執行該事件句柄。

我們認為響應點擊事件的函數是onclick事件處理函數。以前,事件處理函數有兩種分配方式:在JavaScript中或者在HTML中。如果在JavaScript 中分配事件處理函數, 則需要首先獲得要處理的對象的一引用,然后將函數賦值給對應的事件處理函數屬性,請看一個簡單的例子:

  1. var link=document.getElementById("mylink");  
  2. link.onclick=function(){  
  3.  alert("I was clicked !");  
  4. };  

從我們看到的例子中,我們發現使用事件句柄很容易,不過事件處理函數名稱必須是小寫的,還有就是只有在元素載入完成之后才能將事件句柄賦給元素,不然會有異常。如果在HTML中分配事件句柄的話,則直接通過HTML屬性來設置事件處理函數就行了,并在其中包含合適的腳本作為特性值就可以了,例如:

  1. <a href="/" onclick="JavaScript code here">......</a> 

這種JavaScript代碼和通過HTML的style屬性直接將CSS屬性賦給元素類似。這樣會代碼看起來一團糟,也違背了將實現動態行為的代碼與顯示文檔靜態內容的代碼相分離的原則。從1998年開始,這種寫法就過時了。這種傳統的事件綁定技術,優缺點是顯然的:

◆簡單方便,在HTML中直接書寫處理函數的代碼塊,在JS中給元素對應事件屬性賦值即可。

◆IE與DOM標準都支持的一種方法,它在IE與DOM標準中都是在事件冒泡過程中被調用的。

◆可以在處理函數塊內直接用this引用注冊事件的元素,this引用的是當前元素。

◆要給元素注冊多個監聽器,就不能用這方法了。

事件接聽器

除了前面已經介紹的簡單事件句柄之外,現在大多數瀏覽器都內置了一些更高級的事件處理方式,即,事件監聽器,這種處理方式就不受一個元素只能綁定一個事件句柄的限制。

我們已經知道了事件句柄與事件監聽器的***不同之處是使用事件句柄時一次只能插接一個事件句柄,但對于事件監聽器,一次可以插接多個。

IE下的事件監聽器

IE提供的卻是一種自有的,完全不同的甚至存在BUG的事件監聽器,因此如果要讓腳本在本瀏覽器中正常運行的話,就必須使用IE所支持的事件監聽器。另外,Safari 瀏覽器中的事件監聽器有時也存在一點不同。在IE中,每個元素和window對象都有兩個方法:attachEvent方法和detachEvent方法。

  1. element.attachEvent("onevent",eventListener);  

此方法的意思是在IE中要想給一個元素的事件附加事件處理函數,必須調用attachEvent方法才能創建一個事件監聽器。attachEvent方法允許外界注冊該元素多個事件監聽器。

attachEvent接受兩個參數。***個參數是事件類型名,第二個參數eventListener是回調處理函數。這里得說明一下,有個經常會出錯的地方,IE下利用attachEvent注冊的處理函數調用時this指向不再是先前注冊事件的元素,這時的this為window對象。還有一點是此方法的事件類型名稱必須加上一個”on”的前綴(如onclick)。

  1. element.attachEvent("onevent",eventListener);  

要想移除先前元素注冊的事件監聽器,可以使用detachEvent方法進行刪除,參數相同。

DOM標準下的事件監聽器

在支持W3C標準事件監聽器的瀏覽器中,對每個支持事件的對象都可以使用addEventListener方法。該方法既支持注冊冒泡型事件處理,又支持捕獲型事件處理。所以與IE瀏覽器中注冊元素事件監聽器方式有所不同的。

  1. //標準語法   
  2. element.addEventListener('event', eventListener, useCapture);  
  3. //默認  
  4. element.addEventListener('event', eventListener, false);  

addEventListener方法接受三個參數。***個參數是事件類型名,值得注意的是,這里事件類型名稱與IE的不同,事件類型名是沒’on’開頭的;第二個參數eventListener是回調處理函數(即監聽器函數);第三個參數注明該處理回調函數是在事件傳遞過程中的捕獲階段被調用還是冒泡階段被調用 ,通常此參數通常會設置為false(為false時是冒泡),那么,如果將其值設置為true,那就創建一個捕捉事件監聽器。移除已注冊的事件監聽器調用element的removeEventListener方法即可,參數相同.。

  1. //標準語法   
  2. element.removeEventListener('event', eventListener, useCapture);  
  3. //默認  
  4. element.removeEventListener('event', eventListener, false);  

通過addEventListener方法添加的事件處理函數,必須使用removeEventListener方法才能刪除,而且要求參數與添加事件處理函數時addEventListener方法的參數完全一致(包括useCapture參數),否則將不能成功刪除事件處理函數。

#p#

跨瀏覽器的注冊與移除元素事件監聽器方案

我們現在已經知道,對于支持addEventListener方法的瀏覽器,只要需要事件監聽器腳本就都需要調用addEventListener方法;而對于不支持該方法的IE瀏覽器,使用事件監聽器時則需要調用attachEvent方法。

要確保瀏覽器使用正確的方法其實并不困難,只需要通過一個if-else語句來檢測當前瀏覽器中是否存在addEventListener方法或attachEvent方法即可。這樣的方式就可以實現一個跨瀏覽器的注冊與移除元素事件監聽器方案:

  1. var EventUtil = {   
  2.     //注冊  
  3.      addHandler: function(element, type, handler){   
  4.           if (element.addEventListener){   
  5.                  element.addEventListener(type, handler, false);   
  6.           } else if (element.attachEvent){   
  7.                  element.attachEvent("on" + type, handler);   
  8.           } else {   
  9.                  element["on" + type] = handler;   
  10.           }   
  11.      },   
  12.      //移除注冊  
  13.       removeHandler: function(element, type, handler){   
  14.           if (element.removeEventListener){   
  15.                  element.removeEventListener(type, handler, false);   
  16.           } else if (element.detachEvent){   
  17.                  element.detachEvent("on" + type, handler);   
  18.           } else {   
  19.                  element["on" + type] = null;   
  20.           }   
  21.     }   
  22.    
  23.  };  

事件對象引用

為了更好的處理事件,你可以根據所發生的事件的特定屬性來采取不同的操作。如事件模型一樣,IE 和其他瀏覽器處理方法不同:IE 使用一個叫做 event 的全局事件對象來處理對象(它可以在全局變量window.event中找到),而其它所有瀏覽器采用的 W3C 推薦的方式,則使用獨立的包含事件對象的參數傳遞。

跨瀏覽器實現這樣的功能時,最常見的問題就是獲取事件本身的引用及獲取該事件的目標元素的引用。下面這段代碼就為你解決了這個問題:

  1. var EventUtil ={  
  2.     getEvent: function(event){         
  3.         return event ? event : window.event;      
  4.     },          
  5.     getTarget: function(event){          
  6.        return event.target || event.srcElement;                
  7.     }  
  8. };  

停止事件冒泡和阻止事件的默認行為

“停止事件冒泡“和”阻止瀏覽器的默認行為“,這兩個概念非常重要,它們對復雜的應用程序處理非常有用。

1.停止事件冒泡

停止事件冒泡是指,停止冒泡型事件的進一步傳遞(取消事件傳遞,不只是停止IE和DOM標準共有的冒泡型事件,我們還可以停止支持DOM標準瀏覽器的捕捉型事件,用topPropagation()方法)。例如上圖中的冒泡型事件傳遞中,在body處理停止事件傳遞后,位于上層的document的事件監聽器就不再收到通知,不再被處理。

2.阻止事件的默認行為

停止事件的默認行為是指,通常瀏覽器在事件傳遞并處理完后會執行與該事件關聯的默認動作(如果存在這樣的動作)。例如,如果表單中input type 屬性是 “submit”,點擊后在事件傳播完瀏覽器就自動提交表單。又例如,input 元素的 keydown 事件發生并處理后,瀏覽器默認會將用戶鍵入的字符自動追加到 input 元素的值中。

停止事件冒泡的處理方法:

在IE下,通過設置event對象的cancelBubble為true即可。

  1. function someHandle() {  
  2.      window.event.cancelBubble = true;  
  3. }   
  4.  
  5. DOM標準通過調用event對象的stopPropagation()方法即可。  
  6.  
  7. function someHandle(event) {  
  8.     event.stopPropagation();  
  9. }  

因些,跨瀏覽器的停止事件傳遞的方法是:

  1. function someHandle(event) {  
  2.     eventevent = event || window.event;  
  3.     if(event.stopPropagation){  
  4.        event.stopPropagation();  
  5.     }else {  
  6.        event.cancelBubble = true;  
  7.     }  
  8. }  

阻止事件的默認行為的處理方法:

就像事件模型和事件對象差異一樣,在IE和其它所有瀏覽器中阻止事件的默認行為的方法也不同。在IE下,通過設置event對象的returnValue為false即可。

  1. function someHandle() {  
  2.    window.event.returnValue = false;  
  3. }  

DOM標準通過調用event對象的preventDefault()方法即可。

  1. function someHandle(event) {  
  2.    event.preventDefault();  
  3. }  

因些,跨瀏覽器的取消事件傳遞后的默認處理方法是:

  1. function someHandle(event) {  
  2.    eventevent = event || window.event;  
  3.    if(event.preventDefault){  
  4.       event.preventDefault();  
  5.    }else{  
  6.       event.returnValue = false;  
  7.    }  
  8. }  

完整的事件處理兼容性函數

  1. var EventUtil = {               
  2.     addHandler: function(element, type, handler){       
  3.        if (element.addEventListener){   
  4.           element.addEventListener(type, handler, false);        
  5.        } else if (element.attachEvent){          
  6.            element.attachEvent("on" + type, handler);       
  7.        } else {          
  8.            element["on" + type] = handler;         
  9.        }     
  10.     },             
  11.     removeHandler: function(element, type, handler){        
  12.        if (element.removeEventListener){           
  13.            element.removeEventListener(type, handler, false);        
  14.        } else if (element.detachEvent){           
  15.            element.detachEvent("on" + type, handler);      
  16.        } else {         
  17.            element["on" + type] = null;      
  18.        }      
  19.     },    
  20.     getEvent: function(event){       
  21.         return event ? event : window.event;      
  22.     },          
  23.     getTarget: function(event){         
  24.         return event.target || event.srcElement;   
  25.     },          
  26.     preventDefault: function(event){  
  27.        if (event.preventDefault){   
  28.            event.preventDefault();         
  29.        } else {    
  30.            event.returnValue = false;        
  31.        }     
  32.     },                      
  33.     stopPropagation: function(event){        
  34.       if (event.stopPropagation){          
  35.          event.stopPropagation();       
  36.       } else {           
  37.          event.cancelBubble = true;       
  38.       }      
  39.     }           
  40. };  

#p#

捕獲型事件模型與冒泡型事件模型的應用場合

標準事件模型為我們提供了兩種方案,可能很多朋友分不清這兩種不同模型有啥好處,為什么不只采取一種模型。這里拋開IE瀏覽器討論(IE只有一種,沒法選擇)什么情況下適合哪種事件模型。

1. 捕獲型應用場合

捕獲型事件傳遞由最不精確的祖先元素一直到最精確的事件源元素,傳遞方式與操作系統中的全局快捷鍵與應用程序快捷鍵相似。當一個系統組合鍵發生時,如果注
冊了系統全局快捷鍵監聽器,該事件就先被操作系統層捕獲,全局監聽器就先于應用程序快捷鍵監聽器得到通知,也就是全局的先獲得控制權,它有權阻止事件的進
一步傳遞。所以捕獲型事件模型適用于作全局范圍內的監聽,這里的全局是相對的全局,相對于某個頂層結點與該結點所有子孫結點形成的集合范圍。

例如你想作全局的點擊事件監聽,相對于document結點與document下所有的子結點,在某個條件下要求所有的子結點點擊無效,這種情況下冒泡模型就解決不了了,而捕獲型卻非常適合,可以在最頂層結點添加捕獲型事件監聽器,偽碼如下:

  1. function globalClickListener(event) {  
  2.      if(canEventPass == false) {  
  3.          //取消事件進一步向子結點傳遞和冒泡傳遞  
  4.          event.stopPropagation();  
  5.          //取消瀏覽器事件后的默認執行  
  6.          event.preventDefault();  
  7.      }  
  8.  }  

這樣一來,當canEventPass條件為假時,document下所有的子結點click注冊事件都不會被瀏覽器處理。

2. 冒泡型的應用場合

可以說我們平時用的都是冒泡事件模型,因為IE只支持這模型。這里還是說說,在恰當利用該模型可以提高腳本性能。在元素一些頻繁觸發的事件中,如onmousemove,onmouseover,onmouseout,如果明確事件處理后沒必要進一步傳遞,那么就可以大膽的取消它。

此外,對于子結點事件監聽器的處理會對父層監聽器處理造成負面影響的,也應該在子結點監聽器中禁止事件進一步向上傳遞以消除影響。

綜合案例分析

***結合下面HTML代碼作分析:

  1. <body onclick="alert('current is body');"> 
  2. <div id="div0" onclick="alert('current is '+this.id)"> 
  3.       <div id="div1" onclick="alert('current is '+this.id)"> 
  4.          <div id="div2" onclick="alert('current is '+this.id)"> 
  5.             <div id="event_source" 
  6.                   onclick="alert('current is '+this.id)" 
  7.                   style="height:200px;width:200px;background-color:red;"> 
  8.             </div> 
  9.          </div> 
  10.    </div> 
  11.  </div> 
  12. </body>  

HTML運行后點擊紅色區域,這是最里層的DIV,根據上面說明,無論是DOM標準還是IE,直接寫在html里的監聽處理函數是事件冒泡傳遞時調用的,由最里層一直往上傳遞,所以會先后出現:

  1. current is event_source  
  2. current is div2  
  3. current is div1  
  4. current is div0  
  5. current is body  

添加以下片段:

  1. var div2 = document.getElementById('div2');  
  2. EventUtil.addHandler(div2, 'click', function(event){  
  3.      event = EventUtil.getEvent(event);  
  4.   EventUtil.stopPropagation(event);   
  5. }, false);  

當點擊紅色區域后,根據上面說明,在泡冒泡處理期間,事件傳遞到div2后被停止傳遞了,所以div2上層的元素收不到通知,所以會先后出現:

  1. current is event_source  
  2. current is div2 

在支持DOM標準的瀏覽器中,添加以下代碼:

  1. document.body.addEventListener('click', function(event){  
  2.     event.stopPropagation();  
  3. }, true);  

以上代碼中的監聽函數由于是捕獲型傳遞時被調用的,所以點擊紅色區域后,雖然事件源是ID為event_source的元素,但捕獲型選傳遞,從最頂層開始,body結點監聽函數先被調用,并且取消了事件進一步向下傳遞,所以只會出現current is body。

原文鏈接:http://cssrainbow.cn/tutorials/javascript/1027.html

【編輯推薦】

  1. 詳解Javascript事件驅動的來龍去脈
  2. 有關JavaScript事件加載的一些延伸思考
  3. Javascript利用閉包循環綁定事件
  4. 如何使用JavaScript的事件代理
責任編輯:王曉東 來源: rainbow
相關推薦

2015-11-06 13:59:01

JavaScript事件處理

2011-07-19 13:29:50

JavaScript

2009-07-17 12:54:13

2010-01-26 14:04:02

2011-06-16 14:23:43

JavaScript空事件處理程序

2009-07-15 16:18:08

JSci.swing包

2025-08-11 06:00:00

JavaScript前端前端開發

2025-09-05 09:40:04

JavaScript前端開發者

2025-02-13 08:53:10

WinForm事件驅動編程模型開發

2010-02-05 13:12:24

六核心處理器

2009-08-12 18:20:39

C#事件驅動程序

2010-01-14 17:33:47

VB.NET重載事件處

2023-02-08 08:11:58

Spring容器核心事件

2022-05-11 08:22:21

服務網關架構

2009-07-16 17:09:02

Swing應用程序

2009-08-06 14:08:08

C#語言異常處理

2009-12-25 17:17:45

shell命令

2013-06-20 14:29:49

2017-01-05 09:07:25

JavaScript瀏覽器驅動

2009-07-20 15:51:40

FubuMVC核心框架ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號

国产精品三级av| 日韩香蕉视频| 欧美成人精精品一区二区频| 屁屁影院ccyy国产第一页| 亚洲人妻一区二区| 九九久久精品视频| 91tv亚洲精品香蕉国产一区7ujn| 亚洲AV无码成人精品区明星换面 | 污污视频网站免费观看| 欧美私人网站| 97精品国产露脸对白| 国产精品爽爽ⅴa在线观看| 欧美xxxx黑人xyx性爽| 久久91成人| 欧美v国产在线一区二区三区| 成人在线看视频| 3d玉蒲团在线观看| 欧美激情资源网| 国产一区二区中文字幕免费看| 中文字幕第三页| 亚洲成色精品| 久久久国产视频| 大又大又粗又硬又爽少妇毛片 | 日韩一卡二卡在线观看| 色爱综合av| 日韩精品综合一本久道在线视频| 乱子伦视频在线看| aa国产成人| 亚洲欧美日韩国产综合| 天堂精品视频| 欧美男男同志| 99国内精品久久| 豆国产97在线| 国产成人a人亚洲精品无码| 日韩精品亚洲专区| 欧美在线亚洲在线| 国产在线视频第一页| 91精品一区二区三区综合| 一区三区二区视频| theav精尽人亡av| 国产精品sss在线观看av| 日韩亚洲欧美成人一区| 天天操狠狠操夜夜操| 久久xxx视频| 欧美综合久久久| 超碰影院在线观看| 26uuu亚洲电影| 粉嫩av一区二区三区免费野| 国产a级片网站| 欧美日韩在线视频免费观看| 亚洲欧美综合色| 一区二区三区的久久的视频| 成人高清免费在线播放| 国产蜜臀av在线一区二区三区| 欧美成人综合一区| 国产在线91| 国产欧美中文在线| 亚洲黄色成人久久久| av网站在线免费观看| 国产精品嫩草影院com| 亚洲一区bb| 麻豆视频在线| 亚洲麻豆国产自偷在线| 喜爱夜蒲2在线| 日本精品600av| 亚洲成人一区在线| 99999精品视频| 成人午夜精品| 欧美老女人第四色| 亚洲制服在线观看| 91免费精品国偷自产在线在线| 精品久久久久久无| 日本黄色片在线播放| 免费看成人哺乳视频网站| 亚洲午夜国产成人av电影男同| 精品成人无码一区二区三区| 久久精品国产亚洲夜色av网站| 久久精品久久精品亚洲人| 日本午夜在线观看| 亚洲毛片一区| 国产精品jizz在线观看麻豆| 一区二区的视频| 国产·精品毛片| 久久伊人一区| 久草免费在线观看| 午夜精品福利在线| 中文字幕在线观看第三页| 国产一区二区三区国产精品| 亚洲精品动漫100p| 91禁男男在线观看| 黑人一区二区| 国产精品成人一区二区| 国产偷拍一区二区| 91理论电影在线观看| 亚洲精品中文字幕在线| 国内在线视频| 在线精品亚洲一区二区不卡| 极品人妻一区二区| 欧美日韩播放| 九九九久久久久久| 国产亚洲欧美日韩高清| 国产精品中文有码| 日本一区二区三区四区在线观看 | 国产精品黑丝在线播放| 高清在线视频日韩欧美| 亚洲视屏在线观看| 成人午夜在线视频| 在线国产精品网| 在线人成日本视频| 日韩欧美一级二级三级久久久| 国产国语性生话播放| 亚洲乱码在线| 国产精品免费一区豆花| 乱色精品无码一区二区国产盗| 日本一区二区高清| 噜噜噜久久亚洲精品国产品麻豆| 99tv成人影院| 中文字幕日韩在线观看| 亚洲精品1区2区3区| 国产91在线看| 成年人免费观看的视频| 日韩三区免费| 亚洲精品国产成人| 免费一级片视频| 久久成人久久爱| 久久综合九色欧美狠狠| gogo久久| 少妇精品久久久| 欧美日韩国产成人在线免费| 久久无码人妻精品一区二区三区| 女生裸体视频一区二区三区| 国产精品日韩在线播放| 91精品国产综合久久男男| 天堂中文字幕在线| 亚洲一区二区精品3399| 肉色超薄丝袜脚交| 欧美日一区二区| 秋霞av国产精品一区| 三级视频在线看| 亚洲国产日韩a在线播放| 人妻换人妻仑乱| 久久精品一区二区不卡| 国产一区红桃视频| 欧美黑人激情| 欧美精品自拍偷拍| 国产精品综合激情| 免费成人在线视频观看| 日韩免费三级| 电影一区二区| 综合国产在线视频| 一级黄色片在线观看| 国产精品久久看| 日韩在线不卡一区| 国产精品手机在线播放| 国产精品成人免费视频| av中文资源在线| 欧美日本国产视频| 51精品免费网站| 国产91精品一区二区| 日韩精品综合在线| 欧美重口另类| 国产成人精品免费视频| 番号在线播放| 欧美精品丝袜久久久中文字幕| 日本二区三区视频| 国产精品77777竹菊影视小说| 99热这里只有精品免费| 国产精品香蕉| 国产成人精彩在线视频九色| av网站无病毒在线| 日韩无一区二区| 日本一级淫片免费放| 国产成人久久精品77777综合 | 在线国产日韩| 国产在线精品一区二区三区| 在线天堂中文资源最新版| 亚洲欧美在线播放| 亚洲天堂一二三| 一区二区三区四区不卡视频 | 国产清纯美女被跳蛋高潮一区二区久久w | 51国偷自产一区二区三区的来源| 97久久人人超碰caoprom| 亚洲欧美激情精品一区二区| 国产精品久久久久久久免费看| 一区二区三区中文字幕精品精品| 人妻无码中文久久久久专区| 日韩精品一区第一页| 9色视频在线观看| 西瓜成人精品人成网站| 成人日韩av在线| 日韩欧美一中文字暮专区| 日韩在线免费高清视频| 欧美熟妇另类久久久久久不卡 | 午夜精品久久久久久久久久久久| 户外极限露出调教在线视频| 91精品国产免费久久综合| 国产性xxxx高清| 国产精品初高中害羞小美女文| 国产精品嫩草69影院| 久久精品人人做人人爽电影蜜月| 天天干天天操天天干天天操| 亚州综合一区| 亚洲伊人成综合成人网| 免费福利视频一区二区三区| 久热国产精品视频| 日韩专区一区二区| 欧美一级久久久久久久大片| 黑人精品无码一区二区三区AV| 最新久久zyz资源站| 国产美女精品久久| 国产成人免费视频网站| 17c国产在线| 疯狂欧洲av久久成人av电影| 国产蜜臀97一区二区三区| 91女神在线观看| 校园激情久久| 男的插女的下面视频| 国产高清久久| 日韩欧美亚洲区| 欧美日韩一本| av在线不卡一区| 国产高清亚洲| 国产精品丝袜久久久久久不卡| 这里有精品可以观看| 欧美黑人xxxⅹ高潮交| 视频一区二区三区不卡 | av在线资源网| 亚洲欧洲自拍偷拍| 天天操天天射天天| 精品精品国产高清a毛片牛牛| 91久久国语露脸精品国产高跟| 一本大道综合伊人精品热热| 日本一级黄色大片| 午夜精品国产更新| 国产精品美女毛片真酒店| 一区二区在线观看视频| 天天操天天操天天操天天操天天操| 91亚洲精品久久久蜜桃网站 | 久久久久久中文字幕| 成人日韩欧美| 不卡av电影在线观看| 久久99精品久久久久久野外| 色噜噜国产精品视频一区二区 | 亚洲专区一二三| 青春草免费视频| 亚洲永久精品国产| 国产一级一片免费播放| 亚洲国产精品久久久久秋霞影院| 九九热精彩视频| 一级做a爱片久久| 久一区二区三区| 午夜电影久久久| 国产无套丰满白嫩对白| 日韩欧美亚洲一二三区| 黄色污污网站在线观看| 91久久香蕉国产日韩欧美9色| 国产精品免费无遮挡无码永久视频| 日韩欧美福利视频| 亚洲国产av一区二区三区| 欧美性感一类影片在线播放| 中文字幕一二三四| 3atv在线一区二区三区| 午夜精品小视频| 日韩成人激情在线| 国产女主播在线写真| 最新国产精品亚洲| 操你啦在线视频| 国外成人在线播放| 无遮挡爽大片在线观看视频| 国产成人久久久精品一区| 成人精品国产亚洲| 91久久精品国产91久久性色tv| 福利在线一区| 日韩av一区二区三区在线| 色小子综合网| 99色这里只有精品| 日本女优在线视频一区二区| 黄色a级三级三级三级| 99精品国产热久久91蜜凸| 欧美日韩生活片| 亚洲一区二区美女| 婷婷激情五月综合| 日韩一级高清毛片| 久久精品国产亚洲a∨麻豆| 日韩在线欧美在线国产在线| 欧美草逼视频| 国产精品91免费在线| 久久在线观看| 欧美日韩视频在线一区二区观看视频| 国产精品精品国产一区二区| 妺妺窝人体色777777| 日本大胆欧美人术艺术动态| 无码国产精品久久一区免费| 久久久.com| 久久97人妻无码一区二区三区| 日韩欧美视频一区二区三区| 国产福利免费视频| 亚洲天堂av图片| av男人的天堂在线观看| 国产精品午夜国产小视频| 精品一区二区男人吃奶| 在线观看成人av| 免费日韩av片| 激情综合激情五月| 中文字幕欧美激情一区| 伊人国产在线观看| 欧美丰满一区二区免费视频| 蝌蚪视频在线播放| 久久久久久久久国产精品| 国产一区二区三区四区五区3d | 久久黄色一级视频| 中文字幕 久热精品 视频在线 | 另类综合日韩欧美亚洲| 欧美精品欧美极品欧美激情| 亚洲另类色综合网站| 人妻中文字幕一区二区三区| 日韩久久午夜影院| 女同一区二区免费aⅴ| 91精品久久久久久久久中文字幕 | 亚洲视频在线观看网站| 91福利区在线观看| 91精品天堂| 91精品推荐| 日韩va在线观看| 欧美国产精品一区二区| 特级做a爱片免费69| 亚洲国产美女久久久久| 欧美大片黄色| 99三级在线| 亚洲国产精品久久久久蝴蝶传媒| 青青青在线视频免费观看| 久久综合精品国产一区二区三区| 久久精品人妻一区二区三区| 日韩亚洲欧美综合| 成人直播在线| 亚洲xxx大片| 91精品亚洲| 97超碰免费在线观看| 亚洲精品日日夜夜| 国产av一区二区三区精品| 久久久91精品国产| 国产精品日韩精品在线播放| 影音先锋在线亚洲| 另类小说一区二区三区| 后入内射无码人妻一区| 欧美精品v日韩精品v韩国精品v| 91se在线| 成人亚洲综合色就1024| 国产国产精品| 久久精品一卡二卡| 亚洲黄色av一区| 黑人乱码一区二区三区av| 欧美激情视频播放| 理论片一区二区在线| 5月婷婷6月丁香| 久久精品在线免费观看| 国产精品午夜一区二区| 最近2019年手机中文字幕 | 日韩av一级片| 91动漫免费网站| 日韩欧美一区二区视频| 污网站在线免费看| 国精产品一区二区| 免费永久网站黄欧美| 99久久99久久精品免费看小说.| 欧美日韩亚洲另类| 成人在线免费看片| 国产精品三区四区| 久久激情中文| 青青草华人在线视频| 91精品啪在线观看国产60岁| 欧美hdxxxx| 欧美日韩亚洲免费| 久久99久久99小草精品免视看| 草视频在线观看| 亚洲精品美女视频| 四虎成人在线| 色婷婷777777仙踪林| 成人av资源在线观看| 免费无码国产精品| 久久综合五月天| 自拍亚洲一区| 亚洲小视频网站| 午夜精品在线视频一区| 成人免费高清在线播放| 99电影网电视剧在线观看| 999在线观看精品免费不卡网站| 国产美女免费无遮挡| 欧美一级搡bbbb搡bbbb| 日韩伦理精品| 警花观音坐莲激情销魂小说| 97精品超碰一区二区三区| 91精品国自产| 青青久久aⅴ北条麻妃| 一区二区国产在线| 性欧美一区二区| 精品国产乱码久久久久久免费| 快播电影网址老女人久久| 国产欧美123| 国产精品水嫩水嫩|