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

如何創建與框架無關的JavaScript插件

開發 前端
JavaScript中的插件使我們能夠擴展語言,以實現所需的某些強大(或不夠強大)的功能。插件/庫本質上是打包的代碼,可以使我們免于一遍又一遍地編寫相同的東西(功能)。

[[350505]]

 JavaScript中的插件使我們能夠擴展語言,以實現所需的某些強大(或不夠強大)的功能。插件/庫本質上是打包的代碼,可以使我們免于一遍又一遍地編寫相同的東西(功能)。

在JavaScript生態系統中,有數百個框架,這些框架中的每一個都為我們提供了一個創建插件的系統,以便為框架添加新的東西。

如果你看一下NPM注冊表,幾乎所有的JavaScript插件都是在那里發布的,你會看到有超過一百萬個插件以簡單庫和框架的形式發布。

為每個框架創建插件的方式可能會有很大不同。例如,Vue.js有自己的插件系統,這與你為React.js創建插件的方式不同。然而,這一切都歸結為相同的JavaScript代碼。

因此,使用普通JavaScript創建插件,讓你有能力創建一個無論在哪個框架下都能使用。

“與框架無關的JavaScript插件是無需框架上下文即可工作的插件,您可以在任何框架(甚至沒有框架)中使用插件”

構建庫時要記住的事項

  • 您應該對插件有一個目標——這是插件要實現的關鍵
  • 您的插件應易于使用以達到預期用途
  • 您的插件應在很大程度上可定制
  • 您的插件應該有一個文檔,指導將要使用該插件的開發人員

現在,讓我們著眼于上述幾點。

我們將創造什么

在本文中,我將向您展示如何創建與框架無關的插件。在本教程中,我們將創建一個旋轉木馬/幻燈片插件——該插件的目標。

這個插件會暴露一些方法,可以被插件的用戶調用 .next() 和 .prev()

起步

讓我們創建一個新的文件夾來存放我們的插件代碼和任何其他必要的文件,我將把我的文件夾稱為 TooSlidePlugin。

在這個文件夾中,在你喜歡的編輯器中創建一個新的JavaScript文件。這個文件將包含插件的代碼,我把我的文件叫做 tooSlide.js。

有時,我什至想像在開始創建插件之前(從最終開發人員的角度)如何使用插件。

  1. var slider = new ToolSidePlugin({ 
  2.   slideClass: ".singleSlide"
  3.   container: ".slideContainer"
  4.   nextButton: ".next"
  5.   previousButton: ".prev" 
  6. }) 

上面的代碼假定有一個名為 TooSlides 的構造函數,該構造函數接收具有某些屬性的對象作為參數。對象的屬性是 slidesClass、container、nextButton 和 previousButton,這些是我們希望用戶能夠自定義的屬性。

我們將從將插件創建為單個構造函數開始,以便其本身具有名稱空間。

  1. function ToolSidePlugin() { 
  2.    

Options

由于我們的插件,TooSlides 需要一個選項參數,所以我們會定義一些默認的屬性,這樣如果我們的用戶沒有指定自己的屬性,就會使用默認的屬性。

  1. function ToolSidePlugin(options) { 
  2.   let defaultOptions = { 
  3.     slideClass: ".singleSlide"
  4.     container: ".slideContainer"
  5.     nextButton: ".nextSlide"
  6.     previousButton: ".previousSlide" 
  7.   } 
  8.    
  9.   options = { ...defaultOptions, ...options}; 
  10.    
  11.   let _this = this; 
  12.   let slides = []; 
  13.   let currentSlideIdex = 0; 

我們創建了一個 defaultOptions 對象來保存一些屬性,我們還使用JavaScript擴展操作符將傳入的選項與默認選項合并。我們將 this 分配給另一個變量,因此我們仍然可以在內部函數中對其進行訪問。

我們還創建了兩個變量 slides,它將保存所有我們想要用作幻燈片的圖片,以及 currentSlideIndex,它保存當前正在顯示的幻燈片的索引。

接下來,由于我們的幻燈片需要有一些控制,可以用來向前和向后移動幻燈片,我們將在構造函數中添加下面的方法。

  1. this.prepareControls = function() { 
  2.   const nextButton = document.createElement("button"); 
  3.   const previousButton = document.createElement("button"); 
  4.    
  5.   nextButton.setAttribute("class""next"); 
  6.   nextButton.InnerHTML = "Next"
  7.    
  8.   previousButton.setAttribute("class""prev"); 
  9.   nextButton.InnerHTML = "Prev"
  10.    
  11.   let controleContainer = document.createElement("div"); 
  12.    
  13.   controleContainer.setAttribute("class""too-slide-control-container"); 
  14.    
  15.   controleContainer.appendChild(previousButton); 
  16.   controleContainer.appendChild(nextButton); 
  17.    
  18.   document.querySelector(options.container).appendChild(controleContainer); 
  19.    
  20.   nextButton.addEventListener("click"function() { 
  21.     _this.next(); 
  22.   }); 
  23.   previousButton.addEventListener("click"function() { 
  24.     _this.previous(); 
  25.   }); 

在 .prepareControls() 方法中,我們創建了一個容器DOM元素來保存控件按鈕,我們自己創建了下一個和上一個按鈕,并將它們附加到 controlContainer。

然后我們給兩個按鈕附加事件監聽器,分別調用 .next() 和 .previous() 方法。別擔心,我們很快就會創建這些方法。

接下來,我們將添加兩個方法:.goToSlide()和 .hideOtherSlides()。

  1. this.goToSlide = function(index) { 
  2.   this.hideOtherSlides(); 
  3.   if(index > slides.length - 1) { 
  4.     index = 0; 
  5.   } 
  6.   if(index < 0) { 
  7.     index = slides.length - 1; 
  8.   } 
  9.   slides[index].style = "display:block"
  10.   currentSlideIndex = index
  11.  
  12. this.hideOtherSlides = function() { 
  13.   document.querySelectorAll(options.slidesClass).forEach((slide, index) => { 
  14.     slides[index].style = "display: none" 
  15.   }) 

.goToSlide() 方法采用參數 index,這是我們要顯示的幻燈片的索引,此方法首先隱藏當前正在顯示的任何幻燈片,然后僅顯示我們要顯示的幻燈片。

接下來,我們將添加 .next() 和 .previous() 輔助方法,分別幫助我們向前一步,或者向后一步(還記得我們之前附加的事件監聽器嗎?

  1. this.next = function() { 
  2.   this.goToSlide(currentSlideIndex + 1); 
  3. this.previous = function() { 
  4.   this.goToSlide(currentSlideIndex - 1); 

這兩個方法基本上調用 .goToSlide() 方法,并將 currentSlideIndex 移動 1。

現在,我們還將創建一個 .init() 方法,該方法將在實例化構造函數時幫助我們進行設置。

  1. this.init = function() { 
  2.   document.querySelectorAll(options.container).className += " too-slide-slider-container"
  3.   document.querySelectorAll(options.slidesClass).forEach((slide, index) => { 
  4.     slides[index] = index
  5.     slides[index].style = "display:none"
  6.     slides[index].className = " too-slide-single-slide too-slide-fade"
  7.   }); 
  8.    
  9.   this.goToSlide(0); 
  10.   this.prepareControls(); 

如您所見,.init() 方法獲取所有幻燈片圖像并將其存儲在我們之前聲明的 slides 數組中,并默認隱藏所有圖像。

然后,它通過調用 .goToSlide(0) 方法顯示幻燈片中的第一張圖像,并且還通過調用 .prepareControls() 設置我們的控制按鈕。

為了收尾我們的構造函數代碼,我們將在構造函數中調用 .init() 方法,這樣每當構造函數被初始化時,.init() 方法總是被調用。

最終代碼如下所示:

  1. function ToolSidePlugin(options) { 
  2.   let defaultOptions = { 
  3.     slidesClass: ".singleSlide"
  4.     container: ".slideContainer"
  5.     nextButton: ".nextSlide"
  6.     previousButton: ".previousSlide" 
  7.   } 
  8.    
  9.   options = { ...defaultOptions, ...options}; 
  10.    
  11.   let _this = this; 
  12.   let slides = []; 
  13.   let currentSlideIdex = 0; 
  14.  
  15.   this.init = function() { 
  16.     document.querySelectorAll(options.container).className += " too-slide-slider-container"
  17.     document.querySelectorAll(options.slidesClass).forEach((slide, index) => { 
  18.       slides[index] = index
  19.       slides[index].style = "display:none"
  20.       slides[index].className = " too-slide-single-slide too-slide-fade"
  21.     }); 
  22.      
  23.     this.goToSlide(0); 
  24.     this.prepareControls(); 
  25.   } 
  26.  
  27.   this.prepareControls = function() { 
  28.     const nextButton = document.createElement("button"); 
  29.     const previousButton = document.createElement("button"); 
  30.      
  31.     nextButton.setAttribute("class""next"); 
  32.     nextButton.InnerHTML = "Next"
  33.      
  34.     previousButton.setAttribute("class""prev"); 
  35.     nextButton.InnerHTML = "Prev"
  36.      
  37.     let controleContainer = document.createElement("div"); 
  38.      
  39.     controleContainer.setAttribute("class""too-slide-control-container"); 
  40.      
  41.     controleContainer.appendChild(previousButton); 
  42.     controleContainer.appendChild(nextButton); 
  43.      
  44.     document.querySelector(options.container).appendChild(controleContainer); 
  45.      
  46.     nextButton.addEventListener("click"function() { 
  47.       _this.next(); 
  48.     }); 
  49.     previousButton.addEventListener("click"function() { 
  50.       _this.previous(); 
  51.     }); 
  52.   } 
  53.  
  54.   this.goToSlide = function(index) { 
  55.     this.hideOtherSlides(); 
  56.     if(index > slides.length - 1) { 
  57.       index = 0; 
  58.     } 
  59.     if(index < 0) { 
  60.       index = slides.length - 1; 
  61.     } 
  62.     slides[index].style = "display:block"
  63.     currentSlideIndex = index
  64.   } 
  65.    
  66.   this.hideOtherSlides = function() { 
  67.     document.querySelectorAll(options.slidesClass).forEach((slide, index) => { 
  68.       slides[index].style = "display: none" 
  69.     }) 
  70.   } 
  71.  
  72.   this.next = function() { 
  73.     this.goToSlide(currentSlideIndex + 1); 
  74.   } 
  75.   this.previous = function() { 
  76.     this.goToSlide(currentSlideIndex - 1); 
  77.   } 
  78.  
  79.   this.init(); 

添加CSS

在存放我們的插件項目的文件夾中,我們將添加一個CSS文件,其中包含我們的滑塊的基本樣式。我將把這個文件稱為 tooSlide.css。

  1. * {box-sizing: border-box} 
  2.   
  3. body {font-family: Verdana, sans-serif; margin:0; padding: 30px;} 
  4.  
  5. .too-slide-single-slide { 
  6.   display: none;  
  7.   max-height: 100%; 
  8.   width: 100%;  
  9.   
  10. .too-slide-single-slide img{ 
  11.   height: 100%; 
  12.   width: 100%; 
  13. img {vertical-align: middle;} 
  14.   
  15. /* Slideshow container */ 
  16. .too-slide-slider-container { 
  17.   width: 100%; 
  18.   max-width: 100%; 
  19.   position: relative
  20.   margin: auto; 
  21.   height: 400px; 
  22.  
  23. .prev, .next { 
  24.   cursor: pointer; 
  25.   position: absolute
  26.   top: 50%; 
  27.   width: auto; 
  28.   padding: 10px; 
  29.   margin-right: 15px; 
  30.   margin-left: 15px; 
  31.   margin-top: -22px; 
  32.   color: white; 
  33.   font-weight: bold; 
  34.   font-size: 18px; 
  35.   transition: 0.6s ease; 
  36.   border-radius: 0 3px 3px 0; 
  37.   user-select: none; 
  38.   border-style: unset; 
  39.   background-color: blue; 
  40.  
  41. .next { 
  42.   right: 0; 
  43.   border-radius: 3px 0 0 3px; 
  44.  
  45. .prev:hover, .next:hover { 
  46.   background-color: rgba(0,0,0,0.8); 
  47.   
  48. .too-slide-fade { 
  49.   -webkit-animation-name: too-slide-fade; 
  50.   -webkit-animation-duration: 1.5s; 
  51.   animation-name: too-slide-fade; 
  52.   animation-duration: 1.5s; 
  53.   
  54. @-webkit-keyframes too-slide-fade { 
  55.   from {opacity: .4}  
  56.   to {opacity: 1} 
  57.   
  58. @keyframes too-slide-fade { 
  59.   from {opacity: .4}  
  60.   to {opacity: 1} 
  61.   
  62. /* On smaller screens, decrease text size */ 
  63. @media only screen and (max-width: 300px) { 
  64.   .prev, .next,.text {font-size: 11px} 

測試我們的插件

為了測試我們的插件,我們將創建一個HTML文件,我將其命名為 index.html。我們還將添加4張圖片用作幻燈片,所有圖片都與我們的插件JavaScript代碼位于同一目錄中。

我的HTML文件如下所示:

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3. <head> 
  4.   <meta charset="UTF-8"
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0"
  6.   <title>測試幻燈片</title> 
  7.   <link rel="stylesheet" href="tooSlide.css"
  8. </head> 
  9. <body> 
  10.   <div class="contaoner"
  11.     <div class="slideContainer"
  12.       <div class="singleSlide"><img src="slide1.png" alt="slide1" class="slideImage"></div> 
  13.       <div class="singleSlide"><img src="slide2.png" alt="slide2" class="slideImage"></div> 
  14.       <div class="singleSlide"><img src="slide3.png" alt="slide3" class="slideImage"></div> 
  15.       <div class="singleSlide"><img src="slide4.png" alt="slide4" class="slideImage"></div> 
  16.     </div> 
  17.   </div> 
  18.  
  19.   <script src="tooSlide.js"></script> 
  20.   <script> 
  21.     var slider = new ToolSidePlugin({ 
  22.       slideClass: ".singleSlide"
  23.       container: ".slideContainer"
  24.       nextButton: ".next"
  25.       previousButton: ".prev" 
  26.     }) 
  27.   </script> 
  28. </body> 
  29. </html> 

在HTML文件的頭部分,我調用了 tooSlide.css 文件,而在文件的末尾,我調用了 tooSlide.js 文件。

完成此操作后,我們將能夠實例化我們的插件構造函數:

  1. var slider = new ToolSidePlugin({ 
  2.   slideClass: ".singleSlide"
  3.   container: ".slideContainer"
  4.   nextButton: ".next"
  5.   previousButton: ".prev" 
  6. }) 

最后的效果:

為您的JavaScript項目編寫文檔

文檔是你教人們如何使用你的插件。因此,它需要你花一些心思。

對于我們新創建的插件,我將從在項目目錄中創建README.md文件開始。

發布你的插件

在編寫了您的插件之后,您很可能希望其他開發人員從您的新創建中受益,因此我將向您展示如何做到這一點。

你可以通過兩種方式讓你的插件對其他人可用:

  • 在Github上托管它,當您這樣做時,任何人都可以下載倉庫,包括文件(.js和.css),并立即使用您的插件。
  • 發布在npm上,請查看官方的npm文檔來指導您。

就是這樣。

結束

在本文中,我們構建了一個插件來完成一件事:幻燈片圖像。

它也是零依賴的,現在我們可以開始用我們的代碼來幫助別人,就像我們也得到了幫助一樣。

該插件教程的代碼可在我的github上找到:https://github.com/dunizb/CodeTest/tree/master/JavaScript/TooSlidePlugin

原文:https://blog.logrocket.com/how-to-create-a-framework-agnostic-javascript-plugin/

作者:Sodeeq Elusoji

本文轉載自微信公眾號「前端全棧開發者」,可以通過以下二維碼關注。轉載本文請聯系前端全棧開發者公眾號。

 

責任編輯:武曉燕 來源: 前端全棧開發者
相關推薦

2014-11-20 14:32:39

Android 5.0Google

2022-01-09 17:36:26

網絡代碼安全

2012-02-07 17:33:24

容錯服務器關鍵業務

2019-07-10 10:51:20

jqueryJavaScript前端

2010-09-10 10:39:57

2024-09-06 10:46:04

2020-05-12 10:06:52

JavaScript開發框架

2017-02-06 09:20:23

JavaScript實踐

2016-06-20 11:32:27

JS原型class

2012-05-10 13:45:45

jQuery

2022-09-20 14:28:12

物聯網IoT

2020-09-02 07:22:17

JavaScript插件框架

2023-05-11 08:00:00

JavaScript柱狀圖

2014-06-04 12:45:08

硅谷創業

2020-04-10 21:33:10

物聯網大數據物聯網工廠

2009-09-04 09:40:50

諾西CEO離職北電并購

2011-06-23 14:38:44

諾基亞埃洛普MeeGo

2009-03-13 16:56:50

Linux企業投資昂貴

2011-05-04 16:58:26

2013-03-13 04:23:35

點贊
收藏

51CTO技術棧公眾號

久久久久久人妻一区二区三区| 91精品免费视频| 伊人网在线视频观看| 在线国产成人影院| 亚洲人妖av一区二区| 国产精品美女诱惑| 中文有码在线播放| 欧美性色综合| 伊人久久久久久久久久| 最好看的中文字幕| 中文另类视频| 亚洲成av人在线观看| 欧美成人免费在线| 国内毛片毛片毛片毛片| 三级一区在线视频先锋| 欧美老少配视频| 色欲AV无码精品一区二区久久| 精品91福利视频| 色综合天天天天做夜夜夜夜做| 一本色道久久99精品综合| 无码精品黑人一区二区三区| 久久精品国产99久久6| 2018日韩中文字幕| 亚洲不卡在线播放| 成人免费在线观看av| 亚洲第一精品夜夜躁人人躁| 欧美一级特黄aaa| 深夜成人福利| 天天色天天爱天天射综合| 中文字幕精品在线播放| 成人在线观看网站| 91香蕉视频mp4| 成人免费在线一区二区三区| 国产又粗又长视频| 麻豆国产精品官网| 国产精品毛片a∨一区二区三区|国 | av一二三不卡影片| 91视频在线免费观看| 97精品人妻一区二区三区香蕉| 久久性色av| 78色国产精品| 亚洲欧美在线观看视频| 亚洲调教视频在线观看| 久久99国产综合精品女同 | 亚洲一区二区三区在线播放| 中文字幕久精品免| 中文字幕在线看高清电影| 高清久久精品| 91.com在线观看| xx欧美撒尿嘘撒尿xx| 免费在线观看一区| 在线欧美一区二区| 成人一区二区三| 日本综合字幕| 欧美午夜片在线看| 网站一区二区三区| 国产91亚洲精品久久久| 色94色欧美sute亚洲线路一久 | 91狠狠综合久久久| 天天综合一区| 欧美理论电影在线观看| 久久国产在线观看| 亚洲三级视频| 欧美怡红院视频一区二区三区| 西西44rtwww国产精品| 国产女优一区| 国产精品久久一区主播| 国产原创中文av| 国产成人一区二区精品非洲| 成人欧美一区二区| 日本亚洲一区| 国产精品毛片久久久久久久| 艳母动漫在线观看| 国精一区二区三区| 日韩欧美国产网站| 天天综合网久久| 日本综合精品一区| 日韩成人av一区| 日本美女xxx| 伊人久久大香线蕉精品组织观看| 欧美激情视频免费观看| 亚洲GV成人无码久久精品| 日韩高清一区二区| 96精品久久久久中文字幕| 日韩一级片免费看| 国产欧美日产一区| 免费观看亚洲视频| 国产免费不卡| 欧美一区二区日韩| 国精产品一区二区三区| 国产精品久久久久9999赢消| 久久久久久久国产精品视频| 婷婷激情五月综合| 国产麻豆精品久久一二三| 久久艳妇乳肉豪妇荡乳av| 香蕉视频在线看| 欧美日韩国产综合视频在线观看中文| 亚洲色图久久久| 国产三级精品三级在线观看国产| 亚洲欧美国内爽妇网| 免费成年人视频在线观看| 伊人久久亚洲影院| 国产美女主播一区| 污污网站免费在线观看| 亚洲欧美成aⅴ人在线观看 | 激情综合网激情| 国产综合动作在线观看| 日本在线人成| 欧美午夜女人视频在线| 久久人人爽人人片| 都市激情亚洲一区| 日韩西西人体444www| 自拍偷拍中文字幕| 欧美久久视频| 国产一区二中文字幕在线看| 国产精品国产高清国产| 亚洲欧美激情一区二区| 亚洲最大综合网| 亚洲欧洲色图| 高清在线视频日韩欧美| 国产精品无码一区二区桃花视频| 久久综合狠狠综合久久激情| 欧美国产视频一区| 91精品国产色综合久久不卡粉嫩| 日韩国产欧美精品在线| 久久精品国产亚洲av香蕉| 精品一区在线看| 手机成人在线| 校园春色亚洲色图| 亚洲老板91色精品久久| 国产特黄大片aaaa毛片| 成人性生交大片免费看中文网站| 一区二区三区在线视频111| 成人性生活视频| 亚洲精品国产精品久久清纯直播 | 91免费欧美精品| 成人免费视频| 欧美又粗又大又爽| 国产免费一区二区三区网站免费| 夜久久久久久| 国产伦精品一区二区三毛| 色呦呦在线看| 日韩精品一区国产麻豆| 欧美黄色一级网站| 国产精品18久久久久久久网站| 一区二区三区视频在线播放| 成人黄色图片网站| 搡老女人一区二区三区视频tv| 特级西西444www大胆免费看| 国产日韩欧美综合一区| www黄色在线| 久久国产电影| 欧美尺度大的性做爰视频| 国产精品无码AV| 综合av第一页| 免费看三级黄色片| 在线国产欧美| 欧美激情专区| 91九色综合| 久久亚洲精品一区二区| 性一交一乱一透一a级| 亚洲第一福利视频在线| 无码人妻aⅴ一区二区三区| 91中文字幕精品永久在线| 国产精品网站视频| 黄色网页在线看| 欧美成人精品高清在线播放 | melody高清在线观看| 欧美亚洲高清一区| 亚洲女人久久久| 国产成人精品午夜视频免费| 日本日本19xxxⅹhd乱影响| 久久99高清| 国产综合视频在线观看| 欧美人与牲禽动交com| 日韩成人在线视频观看| 超碰在线免费97| 一区二区三区在线视频观看| 亚洲av片不卡无码久久| 美女视频免费一区| 91精品国产毛片武则天| 亚洲免费福利一区| 成人黄色免费片| 丁香高清在线观看完整电影视频| 亚洲天堂网在线观看| 国产视频手机在线观看| 狠狠爱在线视频一区| 纪美影视在线观看电视版使用方法| 国产精品综合久久| 99爱视频在线| 亚洲色图国产| 欧美人与物videos另类| 国产精品久一| 日韩女优人人人人射在线视频| 国产欧美黑人| 亚洲丝袜一区在线| www.精品久久| 欧美日精品一区视频| 日本少妇全体裸体洗澡| 国产精品夫妻自拍| 欧美图片一区二区| 国产一区二区精品久久91| 欧美激情国产精品日韩| 国产精品www.| 正义之心1992免费观看全集完整版| 国产精品久久久久久久久久白浆| 国产成人高潮免费观看精品| 色www永久免费视频首页在线| 亚洲午夜性刺激影院| 国产 欧美 自拍| 7777精品伊人久久久大香线蕉超级流畅 | 91精品国产成人观看| 欧美日韩一区在线视频| 成人台湾亚洲精品一区二区| 成人黄在线观看| 666av成人影院在线观看| 国内精品久久久| 综合图区亚洲| 久久精品视频在线| 成人性生交大片免费看午夜| 日韩电影网在线| 亚洲国产精品成人久久蜜臀| 制服丝袜一区二区三区| 视频一区二区三区四区五区| 亚洲国产成人av| 免费一级片在线观看| 亚洲欧美色一区| 五月天免费网站| 日本一区二区免费在线观看视频| 亚洲一区二区三区综合| 懂色中文一区二区在线播放| 日韩欧美色视频| 蜜乳av一区二区| 超碰在线人人爱| 丝袜a∨在线一区二区三区不卡| 毛片在线视频播放| 国产欧美成人| 一女被多男玩喷潮视频| 亚洲免费成人| 久久久久久久午夜| 亚洲自啪免费| 日本成人三级电影网站| 激情小说亚洲色图| 精品免费视频123区| 久久97久久97精品免视看秋霞| 动漫3d精品一区二区三区| 日本一区二区三区视频在线看 | 综合色中文字幕| 免费在线观看a级片| 亚洲视频你懂的| 欧美黄色免费看| 亚洲成人动漫一区| 九九精品免费视频| 在线观看免费亚洲| 一级片视频网站| 欧美一卡二卡三卡| 欧美77777| 亚洲美女视频网| av在线免费观看网| 久久九九亚洲综合| 丁香花在线影院| 日本精品免费一区二区三区| 午夜av成人| 中文字幕精品在线不卡| 这里精品视频免费| 国产伦理片在线观看| 91免费看片在线观看| mm131丰满少妇人体欣赏图| 欧美极品少妇xxxxⅹ高跟鞋| 性少妇xx生活| 一区二区三区在线视频观看| 免费观看一区二区三区毛片| 色狠狠av一区二区三区| 夜夜爽8888| 精品少妇一区二区三区在线播放| 性xxxx搡xxxxx搡欧美| 亚洲欧美一区二区三区情侣bbw | 中文字幕亚洲情99在线| 麻豆tv在线| 久久免费视频网站| av激情成人网| 亚洲综合中文字幕在线| 日韩极品在线| 伊人久久婷婷色综合98网| 国产精品v欧美精品v日本精品动漫| 免费在线激情视频| 国产伦精品一区二区三区视频青涩| 日本人添下边视频免费| 日本一区二区免费在线| 国产在线观看你懂的| 欧美亚洲综合另类| 黑人乱码一区二区三区av| 国产亚洲a∨片在线观看| 99热国产在线| 国产精品第100页| 91成人福利| 亚洲国产精品久久久久久女王| 亚洲国产导航| 日本中文字幕二区| 91美女在线观看| 久久久久久欧美精品se一二三四| 在线精品观看国产| 色wwwwww| 久久人人爽人人爽人人片亚洲| 亚洲黄色中文字幕| 99九九视频| 99久久国产综合精品成人影院| 日韩少妇内射免费播放| 国产精品一区二区免费不卡 | 亚洲一级黄色| 日本中文字幕精品—区二区| 91婷婷韩国欧美一区二区| 国产97免费视频| 欧美性生活久久| 天堂av中文在线资源库| 色综合久综合久久综合久鬼88 | 久久精品99国产精品日本| 久久久久国产精品区片区无码| 樱桃视频在线观看一区| 在线观看毛片av| 亚洲视频在线免费观看| 日韩精品av| 国产亚洲精品久久飘花| 在线成人超碰| 免费在线观看污网站| 欧美国产日本韩| 国产一级片av| 亚洲视频在线观看| av伦理在线| 欧美大胆a视频| 日本免费在线一区| 天天爽天天狠久久久| 亚洲女优在线| 在线观看av中文字幕| 午夜影视日本亚洲欧洲精品| 亚洲不卡免费视频| 久久久久久久久国产| 一区二区三区视频播放| 欧美精品久久96人妻无码| 久久国产精品72免费观看| 天天摸日日摸狠狠添| 欧美午夜一区二区三区| 91在线品视觉盛宴免费| 国产精品视频自拍| 日韩欧美高清在线播放| 人人干人人干人人| 1024成人网色www| 国产毛片久久久久| 久久99视频免费| 国产一区二区三区亚洲| 久久国产亚洲精品无码| 久久免费电影网| 波多野结衣在线电影| 中文字幕日韩在线播放| 只有精品亚洲| 韩国无码av片在线观看网站| 成人sese在线| 国产精品久免费的黄网站| 国产亚洲精品va在线观看| 天然素人一区二区视频| 国产四区在线观看| 国产aⅴ综合色| 欧美特黄aaaaaa| 一区二区三区回区在观看免费视频| 粉嫩av一区二区三区四区五区| 在线不卡日本| 成人性视频网站| 成年人av网站| 久久精品一本久久99精品| 一区二区免费| 美女福利视频在线| 国产精品拍天天在线| 精品人妻少妇AV无码专区| 97成人在线视频| 日本电影一区二区| 女同性αv亚洲女同志| 色综合天天性综合| 国产福利视频在线| 精品乱色一区二区中文字幕| 日本三级亚洲精品| 欧美日韩中文字幕在线观看| 亚洲国产精品久久久| 高清在线一区| www.av中文字幕| 国产精品免费免费| 手机看片国产1024| 国产精品一区久久久| 亚洲经典视频在线观看| 一级黄色片网址| 精品电影一区二区| 四虎视频在线精品免费网址| 无码熟妇人妻av在线电影| 欧美极品美女视频| 婷婷伊人综合中文字幕| 国产日韩在线亚洲字幕中文| 亚洲激情精品| 天天爽天天爽天天爽| 日韩精品中文字幕在线播放| 国产美女亚洲精品7777| 日韩中文字幕二区|