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

這款國外開源框架, 讓你輕松構建自己的頁面編輯器

開源
乍眼一看我們可能會認為它只是一個頁面/HTML 編輯器,但它能做的不僅僅如此。GrapesJS 是一個多用途的 Web 頁面搭建框架,這意味著它允許我們輕松創建一個支持拖放的任何具有類似 HTML 結構的構建器。它所包含的內容遠不止網頁。

[[416380]]

按照我一向的寫作風格,我會在下面列出文章的大綱,以便大家有選擇且高效率的閱讀和學習:

  • GrapesJS 框架基本介紹
  • 如何使用 GrapesJS 構建 web 編輯器
  • 基于 GrapesJS 構建的開源網頁編輯器 craft.js
  • 更多可視化編輯器推薦

基本介紹

chrome-capture.gif

乍眼一看我們可能會認為它只是一個頁面/HTML 編輯器,但它能做的不僅僅如此。GrapesJS 是一個多用途的 Web 頁面搭建框架,這意味著它允許我們輕松創建一個支持拖放的任何具有類似 HTML 結構的構建器。它所包含的內容遠不止網頁。我們使用類似 HTML 的結構的場景有:

  • 時事通訊(例如 MJML)
  • 原生移動應用程序(例如 React Native)
  • 本機桌面應用程序(例如 Vuido)
  • PDF (例如 React PDF)

并且 GrapesJS 附帶的功能和工具使我們能夠制作易于使用的編輯器。這使用戶無需任何編碼知識即可創建復雜的類似 HTML 的模板。

同時 GrapesJS 官網上還給我們提供了3個不同場景的案例, 我們可以參考這些案例快速制作屬于我們自己的web編輯器:

  • Webpage Builder
  • Newsletter Builder
  • Newsletter Builder with MJML

那么至于這些搭建框架的實現原理, 我之前的文章中也做了很多剖析和設計, 大家如果感興趣可以參考研究一下, 接下來我們看看如何安裝和使用它.

如何使用 GrapesJS 構建 web 編輯器

1. 安裝

我們可以用 umd 的方式來導入:

  1. <link rel="stylesheet" href="//unpkg.com/grapesjs/dist/css/grapes.min.css"
  2. <script src="//unpkg.com/grapesjs"></script> 

也可以通過 npm 來安裝:

  1. npm i grapesjs -S 

之后我們可以通過如下方式導入到項目:

  1. import 'grapesjs/dist/css/grapes.min.css'
  2. import grapesjs from 'grapesjs'

2. 第一個demo

在安裝完之后, 我們先實現一個基本的頁面編輯demo:

chrome-capture (1).gif

相關代碼如下:

  1. <html> 
  2.   <head> 
  3.     <link rel="stylesheet" href="//unpkg.com/grapesjs/dist/css/grapes.min.css"
  4.     <script src="//unpkg.com/grapesjs"></script> 
  5.     <style> 
  6.         #gjs { 
  7.           border: 3px solid #444; 
  8.         } 
  9.         .gjs-cv-canvas { 
  10.           top: 0; 
  11.           width: 100%; 
  12.           height: 100%; 
  13.         } 
  14.     </style> 
  15.   </head> 
  16.   <body> 
  17.     <div id="gjs"
  18.       <h1>Hello World Component!</h1> 
  19.     </div> 
  20.     <script> 
  21.        const editor = grapesjs.init({ 
  22.           container: '#gjs'
  23.           // 我們也可以使用可選的: `components: '<h1>Hello World Component!</h1>'`, 
  24.           fromElement: true
  25.           // 編輯器尺寸 
  26.           height: '300px'
  27.           width: 'auto'
  28.           // 禁用存儲管理, 下面的文章我會介紹 
  29.           storageManager: false
  30.           panels: { defaults: [] }, 
  31.          }); 
  32.     </script> 
  33.   </body> 
  34. </html> 

這樣就實現了一個簡單的編輯器, 是不是很簡單呢? 我們接下來繼續探索更強大的功能。

3. 添加和定義組件

我們都知道網頁編輯器需要提供非常豐富的組件, 這樣能幫助用戶更輕松的搭建頁面, 同樣 grapesjs 支持添加各種自定義組件, 也內置了常用的基礎組件, 我們來看一個 demo :

chrome-capture (2).gif

由以上 demo 我們可以看到添加了3個基本組件: 區塊, 文本, 圖片。基本實現代碼如下:

  1. const editor = grapesjs.init({ 
  2.   // ...其他配置 
  3.   blockManager: { 
  4.     appendTo: '#blocks'
  5.     blocks: [ 
  6.       { 
  7.         id: 'section'
  8.         label: '<b>Section</b>',  
  9.         attributes: { class:'gjs-block-section' }, 
  10.         content: `<section
  11.           <h1>H5-Dooring</h1> 
  12.           <div>積木式搭建H5頁面</div> 
  13.         </section>`, 
  14.       }, { 
  15.         id: 'text'
  16.         label: 'Text'
  17.         content: '<div data-gjs-type="text">My Baby</div>'
  18.       }, { 
  19.         id: 'image'
  20.         label: 'Image'
  21.         selecttrue
  22.         content: { type: 'image' }, 
  23.         activate: true
  24.       } 
  25.     ] 
  26.   }, 
  27. }); 

由代碼我們可以發現我們只需要在 blockManager 的 blocks 里添加指定的組件即可。同時我們還可以動態的添加組件:

  1. editor.BlockManager.add('my-block-id', { 
  2.     // ...其他配置如label 
  3.     content: { 
  4.         tagName: 'div'
  5.         draggable: false
  6.         attributes: { 'some-attribute''some-value' }, 
  7.         components: [ 
  8.           { 
  9.             tagName: 'span'
  10.             content: '<b>DooringX</b>'
  11.           }, { 
  12.             tagName: 'div'
  13.             components: '<span>無限可能</span>'
  14.           } 
  15.         ] 
  16.       } 
  17. }) 

至于更詳細的組件配置文檔, 大家可以參考文檔: grapesjs組件如何工作

image.png

4. 添加功能面板

僅僅實現組件添加還不夠, 一個有尊嚴的編輯器還應該有各種功能按鈕, 來實現不同用戶的需求。

現在我們有了畫布和自定義組件,讓我們看看如何創建一個功能面板,里面有按鈕(使用Panels API)。

chrome-capture (3).gif

我們可以看到頂部有3個功能按鈕:

  • 是否顯示組件邊線
  • 顯示源碼
  • 顯示json

首先我們需要定義用來展示功能面板的元素(樣式可以自定義):

  1. <div class="panel__top"
  2.     <div class="panel__basic-actions"></div> 
  3. </div> 

其次我們來定義掛載功能面板:

  1. editor.Panels.addPanel({ 
  2.   id: 'panel-top'
  3.   el: '.panel__top'
  4. }); 
  5. editor.Panels.addPanel({ 
  6.   id: 'basic-actions'
  7.   el: '.panel__basic-actions'
  8.   buttons: [ 
  9.     { 
  10.       id: 'visibility'
  11.       active: true
  12.       className: 'btn-toggle-borders'
  13.       label: '<u>B</u>'
  14.       command: 'sw-visibility'
  15.     }, { 
  16.       id: 'export'
  17.       className: 'btn-open-export'
  18.       label: 'Exp'
  19.       command: 'export-template'
  20.       context: 'export-template',  
  21.     }, { 
  22.       id: 'show-json'
  23.       className: 'btn-show-json'
  24.       label: 'JSON'
  25.       context: 'show-json'
  26.       command(editor) { 
  27.         editor.Modal.setTitle('Components JSON'
  28.           .setContent(`<textarea style="width:100%; height: 250px;"
  29.             ${JSON.stringify(editor.getComponents())} 
  30.           </textarea>`) 
  31.           .open(); 
  32.       }, 
  33.     } 
  34.   ], 
  35. }); 

我們可以定義更多的功能, 大家可以參考文檔來學習使用。

5. 添加圖層管理面板

在處理 Web 元素時,我們可能會發現另一個常見的工具是圖層管理器。它是樹狀結構的,使我們能夠輕松地對頁面元素進行管理。要啟用它,我們只需指定要渲染它的位置:

  1. const editor = grapesjs.init({ 
  2.   // ... 
  3.   layerManager: { 
  4.     appendTo: '.layers-container' 
  5.   }, 
  6.   // 我們能定義一個默認的面板作為側邊圖層管理器 
  7.   panels: { 
  8.     defaults: [{ 
  9.       id: 'layers'
  10.       el: '.panel__right'
  11.       // 定義面板能否拖拽 
  12.       resizable: { 
  13.         maxDim: 350, 
  14.         minDim: 200, 
  15.         tc: 0, 
  16.         cl: 1, // 左側可拖拽 
  17.         cr: 0, 
  18.         bc: 0, 
  19.         keyWidth: 'flex-basis'
  20.       }, 
  21.     }] 
  22.   } 
  23. }); 

效果如下:

chrome-capture (4).gif

我們可以看到右側的圖層面板, 可以輕松管理我們頁面上的元素。

6. 添加樣式配置面板

樣式面板也很簡單, 我們先定義對應的容器:

  1. <div class="panel__right"
  2.     <div class="layers-container"></div> 
  3.     <div class="styles-container"></div> 
  4. </div> 

然后初始化對應的配置腳本:

  1. const editor = grapesjs.init({ 
  2.   // ... 
  3.   panels: { 
  4.     defaults: [ 
  5.       // ... 
  6.       { 
  7.         id: 'panel-switcher'
  8.         el: '.panel__switcher'
  9.         buttons: [{ 
  10.             id: 'show-layers'
  11.             active: true
  12.             label: 'Layers'
  13.             command: 'show-layers'
  14.             // Once activated disable the possibility to turn it off 
  15.             togglable: false
  16.           }, { 
  17.             id: 'show-style'
  18.             active: true
  19.             label: 'Styles'
  20.             command: 'show-styles'
  21.             togglable: false
  22.         }], 
  23.       } 
  24.     ] 
  25.   }, 
  26.   selectorManager: { 
  27.     appendTo: '.styles-container' 
  28.   }, 
  29.   styleManager: { 
  30.     appendTo: '.styles-container'
  31.     sectors: [{ 
  32.         name'Dimension'
  33.         openfalse
  34.         buildProps: ['width''min-height''padding'], 
  35.         properties: [ 
  36.           { 
  37.             type: 'integer'
  38.             name'The width'
  39.             property: 'width',  
  40.             units: ['px''%'],  
  41.             defaults: 'auto',  
  42.             min: 0,  
  43.           } 
  44.         ] 
  45.       },{ 
  46.         name'Extra'
  47.         openfalse
  48.         buildProps: ['background-color''box-shadow''custom-prop'], 
  49.         properties: [ 
  50.           { 
  51.             id: 'custom-prop'
  52.             name'Custom Label'
  53.             property: 'font-size'
  54.             type: 'select'
  55.             defaults: '32px'
  56.             options: [ 
  57.               { value: '12px'name'Tiny' }, 
  58.               { value: '18px'name'Medium' }, 
  59.               { value: '32px'name'Big' }, 
  60.             ], 
  61.          } 
  62.         ] 
  63.       }] 
  64.   }, 
  65. }); 
  66.  
  67. // 定義指令 
  68. editor.Commands.add('show-layers', { 
  69.   getRowEl(editor) { return editor.getContainer().closest('.editor-row'); }, 
  70.   getLayersEl(row) { return row.querySelector('.layers-container') }, 
  71.  
  72.   run(editor, sender) { 
  73.     const lmEl = this.getLayersEl(this.getRowEl(editor)); 
  74.     lmEl.style.display = ''
  75.   }, 
  76.   stop(editor, sender) { 
  77.     const lmEl = this.getLayersEl(this.getRowEl(editor)); 
  78.     lmEl.style.display = 'none'
  79.   }, 
  80. }); 
  81. editor.Commands.add('show-styles', { 
  82.   getRowEl(editor) { return editor.getContainer().closest('.editor-row'); }, 
  83.   getStyleEl(row) { return row.querySelector('.styles-container') }, 
  84.  
  85.   run(editor, sender) { 
  86.     const smEl = this.getStyleEl(this.getRowEl(editor)); 
  87.     smEl.style.display = ''
  88.   }, 
  89.   stop(editor, sender) { 
  90.     const smEl = this.getStyleEl(this.getRowEl(editor)); 
  91.     smEl.style.display = 'none'
  92.   }, 
  93. }); 

我們可以看看配置后的效果:

chrome-capture (5).gif

7. 更多用法演示

除了以上介紹的功能, 我們還能實現:

  • 定義響應模式(pc, 移動, ipad),
  • 設置存儲和加載數據的模式
  • 自定義主題
  • 國際化 i18n 支持

這里就不一一介紹了, 我們直接看一下配置后的演示效果:

chrome-capture (6).gif

基于 GrapesJS 構建的開源網頁編輯器 craft.js

那么 GrapesJS 還有很多有意思的功能我們可以挖掘, 接下來我和大家分享一款基于GrapesJS 二次封裝的一個開源編輯器框架 craft.js。

chrome-capture (7).gif

我們可以使用它插件化的搭建我們自己的編輯器, 如下是一個應用在React中的例子:

  1. import {Editor, Frame, Canvas, Selector} from "@craftjs/core"
  2. // 定義本文組件 
  3. import {useNode} from "@craftjs/core"
  4.  
  5. const TextComponent = ({text}) => { 
  6.   const { connectors: {drag} } = useNode(); 
  7.  
  8.   return ( 
  9.     <div ref={drag}> 
  10.       <h2>{text}</h2> 
  11.     </div> 
  12.   ) 
  13.  
  14. // 初始化編輯器 
  15. const App = () => { 
  16.   return ( 
  17.     <div> 
  18.       <Editor> 
  19.         // 可編輯的區域 
  20.         <Frame resolver={TextComponent, Container}> 
  21.           <Canvas> 
  22.             <TextComponent text="趣談前端 - 徐小夕" /> 
  23.           </Canvas> 
  24.         </Frame> 
  25.       </Editor> 
  26.     </div> 
  27.   ) 

更多可視化編輯器推薦

  • h5-Dooring | H5編輯器, 積木式搭建H5頁面
  • v6.dooring | 可視化大屏搭建解決方案
  • craft | 基于React的拖拽頁面生成器
  • dooringx-lib | 快速高效搭建可視化拖拽平臺

最后

后期我會在數據可視化和工程化上輸出更多實用的開源項目和框架,如果有其他問題或需求,可以和筆者交流學習。

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

 

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

2021-01-21 16:03:15

Java文本編輯器編程語言

2020-04-09 14:23:44

PythonMarkdown編輯器

2022-01-10 18:16:24

編輯器Typora Markdown

2022-04-15 09:59:08

Lexical開源Meta

2020-10-14 12:29:51

開源圖表 開發

2020-09-18 06:00:51

開源Markdown編輯器

2011-10-31 10:17:05

插件

2019-06-10 11:06:04

JavaScript編輯器HTML5

2017-05-23 19:19:16

開源Markdown編輯器

2023-12-15 09:59:14

開源GIF編輯器圖片格式

2020-08-22 07:46:58

Photoflare開源圖像編輯器

2020-12-21 13:33:00

medit編輯器Linux

2019-06-14 15:28:13

程序員文本編輯器

2022-03-20 18:12:03

Shotcut開源視頻編輯器

2019-06-18 09:40:57

Graviton開源代碼編輯器

2024-04-03 08:22:54

代碼編輯器組件

2020-03-25 14:16:58

文本編輯器語言開發

2024-02-21 16:40:06

Web代碼編輯器開源

2011-01-10 16:17:49

2017-06-22 12:45:12

JavaScript編輯器Sublime Tex
點贊
收藏

51CTO技術棧公眾號

无码 制服 丝袜 国产 另类| 成人av在线电影| 亚洲日本欧美中文幕| 很污的网站在线观看| 久草福利在线视频| 精品在线播放免费| 欧美极品欧美精品欧美视频 | 麻豆国产91在线播放| 久久香蕉国产线看观看网| 日韩无码精品一区二区| 成人四虎影院| 五月天激情小说综合| 视频一区二区三| 好吊色一区二区| 毛片不卡一区二区| 欧美亚洲在线观看| 亚洲精品电影院| 性人久久久久| 77成人影视| 91小视频在线免费看| 91精品久久久久久久久久久久久久| 波多野结衣在线网址| 蜜桃精品噜噜噜成人av| 欧美大黄免费观看| 亚洲黄色a v| 免费看电影在线| 中文字幕一区二区三区四区 | 国内精品久久久久久久久久久| 欧美亚洲专区| 欧美日韩第一视频| 国产极品美女在线| 日本成人小视频| 亚洲国产97在线精品一区| 久久精品亚洲天堂| 国产福利亚洲| 91官网在线观看| 91免费视频网站在线观看| 538在线观看| 欧美激情在线看| 精品国产免费久久久久久尖叫| 国产成人精品亚洲精品色欲| 麻豆精品国产91久久久久久| 国产mv免费观看入口亚洲| 中文字幕在线有码| 欧美日韩爱爱| 欧美一级二级在线观看| 91猫先生在线| 欧美24videosex性欧美| 国产精品成人免费精品自在线观看| 久久久久久亚洲精品不卡4k岛国 | 2023国产精品自拍| 在线电影国产精品| 性欧美videossex精品| 日韩视频网站在线观看| 精品久久中文字幕| www.国产在线视频| brazzers在线观看| 亚洲成在线观看| 国产a级片网站| 第一福利在线视频| 亚洲va欧美va国产va天堂影院| 亚洲不卡1区| 男女污视频在线观看| 久久久蜜桃精品| 亚洲国产精品毛片| 91porn在线观看| 日韩一区在线播放| 亚洲国产精品一区二区第四页av| 激情福利在线| 国产精品久久综合| 香蕉久久夜色| 影音先锋在线视频| 婷婷国产v国产偷v亚洲高清| 欧美视频第三页| 欧美成人高清视频在线观看| 91精品欧美久久久久久动漫| 26uuu国产| 国产毛片久久久| 亚洲欧美日韩精品久久亚洲区 | 久久精品亚洲乱码伦伦中文| 久久另类ts人妖一区二区| 青青草视频在线免费观看| 成人福利视频在线看| 久久五月天婷婷| 免费在线看黄色| 亚洲一二三级电影| 国产成人精品无码播放| jizz亚洲女人高潮大叫| 欧美精品电影在线播放| 无码成人精品区在线观看| 1204国产成人精品视频| 亚洲美女av网站| 精品国产视频在线观看| 亚洲一区日本| 国产精品一区二区三| 性生交大片免费看女人按摩| 国产亚洲精品精华液| 久久久无码中文字幕久...| 中文在线8资源库| 在线观看日韩精品| 美女露出粉嫩尿囗让男人桶| 精品99久久| 欧美激情视频网站| 中文无码av一区二区三区| 国产盗摄一区二区三区| 欧美一区二区综合| 羞羞的视频在线看| 在线欧美日韩国产| 搡的我好爽在线观看免费视频| 动漫视频在线一区| www.亚洲成人| 国产无遮挡又黄又爽又色| 国产精品综合色区在线观看| 国产精品久久久久久网站| 午夜精品久久久久久久爽| 91在线精品一区二区| 国产成人免费高清视频| 福利一区二区免费视频| 日韩hd视频在线观看| 欧美黄色一级网站| 精品综合免费视频观看| 欧美极品色图| 国产网红女主播精品视频| 制服丝袜在线91| 粉嫩精品久久99综合一区| 国产精品日韩欧美一区| 懂色av一区二区三区在线播放| 久久精品国产亚洲a∨麻豆| 亚洲第一成人在线| 潘金莲一级淫片aaaaa| 成人一二三区| 午夜精品福利视频| 亚洲国产成人在线观看| 亚洲视频在线一区二区| 在线看的黄色网址| 国产一区二区三区四区五区| 久久久久久国产精品| 精品国产av一区二区| 欧美高清一级片在线观看| 日本www高清视频| 中文字幕av一区二区三区人| 久久久久中文字幕| 97超碰国产在线| 18欧美亚洲精品| 日韩在线一区视频| 91超碰成人| 国产精品劲爆视频| 黄网在线观看| 欧美四级电影网| 影音先锋男人看片资源| 精品综合久久久久久8888| 日本不卡一区二区三区四区| 国产高清亚洲| 欧美极品在线播放| 国产jzjzjz丝袜老师水多| 一区二区在线观看av| 国产成人av片| 自拍欧美日韩| 国产欧美日韩一区二区三区| 麻豆蜜桃在线观看| 亚洲人成在线一二| 精品乱码一区内射人妻无码| 国产精品毛片a∨一区二区三区| 中日韩av在线播放| 欧美日本亚洲韩国国产| 国产欧美亚洲日本| 亚洲高清黄色| 精品国产一区av| 亚洲爆乳无码一区二区三区| 精品国产1区2区| 日韩女同一区二区三区| 激情文学综合插| 欧美成人精品免费| 免费一区二区三区视频导航| 国产精品入口免费视频一| 黄黄的网站在线观看| 日韩欧美一级二级三级| 天天操天天操天天操天天| 国产精品网站在线播放| 国偷自产av一区二区三区麻豆| 欧美在线网址| 久久久久高清| 一区在线影院| 欧美第一淫aaasss性| 亚洲人视频在线观看| 色综合天天综合网天天狠天天| 色一情一交一乱一区二区三区 | av女优在线| 欧美成人猛片aaaaaaa| 日韩精品在线免费看| 国产欧美一区二区精品久导航 | 无遮挡又爽又刺激的视频| 国产91久久精品一区二区| 91色视频在线导航| 亚洲午夜天堂| 久久伊人色综合| 青青青草原在线| 欧美mv日韩mv| 波多野结衣在线观看视频| 国产宾馆实践打屁股91| 91av俱乐部| 亚洲久久视频| 永久免费在线看片视频| 神马电影久久| 国产精品免费观看高清| 久久免费资源| 国内精品久久久久久中文字幕| 欧美色综合一区二区三区| 日韩一区二区三区三四区视频在线观看| 国产一级性生活| 亚洲国产精品高清| 美女黄色一级视频| 九九久久精品视频| 久久久久国产一区| 外国成人免费视频| 久久久久久久久久久久久久一区| 日韩精品视频一区二区三区| 国产日韩欧美一二三区| 国产精品亚洲一区二区三区在线观看| 久久中国妇女中文字幕| 你懂的在线免费观看| 亚洲高清久久网| 亚洲h视频在线观看| 51久久夜色精品国产麻豆| 日韩视频在线观看一区| 亚洲一级二级三级| 男女性高潮免费网站| 中文字幕日韩一区二区| 丰满的亚洲女人毛茸茸| 久久精品亚洲麻豆av一区二区| 超碰97在线资源站| 成人黄色777网| 午夜福利三级理论电影| 东方aⅴ免费观看久久av| 黄色一级片免费播放| 巨乳诱惑日韩免费av| 无码人妻精品一区二区三区在线 | 中文字幕最新精品| 福利成人在线观看| 亚洲男子天堂网| 男女污视频在线观看| 亚洲人成电影在线观看天堂色| 三级av在线播放| 精品无人区太爽高潮在线播放 | 欧美91在线| 福利视频久久| 日韩一二三区在线观看| 999国内精品视频在线| 亚洲啊v在线免费视频| av一区观看| 久久精品色综合| 国产一区二区久久久| 女人抽搐喷水高潮国产精品| 久久精品国产第一区二区三区最新章节 | 国模大胆一区二区三区| 欧美一级片免费播放| 一本色道久久综合亚洲精品不| 亚洲午夜精品久久久久久人妖| 久久福利毛片| 国产三级日本三级在线播放| 人妖欧美一区二区| 亚洲一二区在线观看| 国产精品99久| 伊人久久一区二区三区| 91麻豆国产在线观看| 国产肥白大熟妇bbbb视频| 国产色一区二区| 国产视频精品免费| 一级日本不卡的影视| 国产污视频在线看| 91福利视频在线| av av片在线看| 亚洲精品国产拍免费91在线| 黄色电影免费在线看| 在线国产精品播放| 一二三四区在线观看| 91av在线不卡| 女生影院久久| 成人欧美一区二区三区黑人| 成人台湾亚洲精品一区二区| 欧美日韩精品久久久免费观看| 成人3d精品动漫精品一二三| 黑人巨茎大战欧美白妇| 99国产精品久久久久久久| 五月天亚洲视频| 九九**精品视频免费播放| 亚洲欧美日韩色| 亚洲国产精品v| 国产亚洲成人精品| 欧美性高清videossexo| 国产香蕉在线观看| 国产亚洲综合久久| 精品精品导航| 欧美在线一区二区三区四| 国产精品**亚洲精品| 欧美大香线蕉线伊人久久| 伊人情人综合网| 国产第一页视频| 成人性视频免费网站| 国产视频三区四区| 亚洲成国产人片在线观看| 亚洲视频一区在线播放| 日韩成人激情视频| 婷婷成人激情| 日本久久中文字幕| 嗯用力啊快一点好舒服小柔久久| 这里只有精品66| 视频在线观看国产精品| 国内自拍第二页| 久久久三级国产网站| 国产真人真事毛片| 欧美一区二区三区免费| 成人在线免费电影| 欧美自拍视频在线| 中文字幕av一区二区三区四区| 一区精品在线| 日韩成人精品在线| 国产艳俗歌舞表演hd| 亚洲一区二区三区影院| 国产美女免费看| 亚洲欧美中文日韩在线v日本| 天天视频天天爽| 国产一区二区福利| 黄色aaa视频| 亚洲精品国产第一综合99久久| 中文亚洲av片在线观看| 亚洲欧美国产一本综合首页| 激情aⅴ欧美一区二区欲海潮| 亚洲xxxx视频| 久久中文字幕av| av污在线观看| 久久嫩草精品久久久久| 日韩精品1区2区| 亚洲国产精品福利| 在线午夜影院| 91亚洲精品久久久| 亚洲视频在线免费| 污污视频在线免费| 亚洲精品伦理在线| 国产黄色一区二区| 中文字幕亚洲综合| 激情中国色综合| 亚洲国产精品一区二区第一页| 日韩av中文字幕一区二区| 日韩在线免费观看av| 亚洲第一成人在线| 天堂中文资源在线观看| 97国产在线观看| 羞羞答答一区二区| 九色在线视频观看| 成人在线一区二区三区| 免费一级片在线观看| 日韩精品一区二区三区视频在线观看| 欧美色图天堂| 99精品国产高清一区二区| 国内揄拍国内精品久久| 岛国av免费观看| 无码av中文一区二区三区桃花岛| 性xxxxbbbb| 国产精品免费一区豆花| 日韩精品中文字幕吗一区二区| 超碰超碰超碰超碰超碰| 成人免费视频播放| 91美女免费看| 在线中文字幕日韩| 91亚洲视频| 粉嫩av一区二区三区天美传媒| 成人精品免费网站| 日本高清不卡码| 亚洲人成五月天| 国产一区二区三区影视| 日本久久高清视频| 成人精品在线视频观看| www日韩精品| 在线午夜精品自拍| 成人av资源网址| 国产福利一区视频| 国产精品天干天干在线综合| 国产黄色免费大片| 热re91久久精品国99热蜜臀| 国产麻豆一区二区三区精品视频| 欧美黄色性生活| 亚洲男人的天堂在线aⅴ视频| 深夜福利视频网站| 国产精品视频yy9099| 国一区二区在线观看| 国产精品天天干| 日韩一区二区免费在线观看| 黑人玩欧美人三根一起进| 日本福利一区二区三区| 奇米色一区二区| 国产主播在线观看| 中文字幕av一区中文字幕天堂| 中文字幕区一区二区三| 亚洲熟妇av一区二区三区漫画| 中文字幕一区二区三区乱码在线| 婷婷开心激情网| 成人亲热视频网站| 麻豆9191精品国产| 欧日韩不卡视频|