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

我熬夜開發了一款簡約實用、支持多平臺的Markdown在線編輯器(開源)

開發 開發工具
之前,一直想開發一款屬于自己的Markdown編輯器,主要是自己平常寫文章可以更加靈活操作,另外擴寬自己的視野也是非常不錯的選擇啊!所以在周末就決定玩耍一番。首先我調研了很多線上熱門的md編輯器,都很優秀。不為超過他們,主要自己用著舒服點。這篇文章主要是記錄下我是如何從0到1是完成一款還算拿得出手的Markdown編輯器。

[[385871]]

 前言

之前,一直想開發一款屬于自己的Markdown編輯器,主要是自己平常寫文章可以更加靈活操作,另外擴寬自己的視野也是非常不錯的選擇啊!所以在周末就決定玩耍一番。首先我調研了很多線上熱門的md編輯器,都很優秀。不為超過他們,主要自己用著舒服點。這篇文章主要是記錄下我是如何從0到1是完成一款還算拿得出手的Markdown編輯器。

完成項目一覽



調研Markdown編輯器

國內、國外關于Markdown編輯器有很多。

editor.md

網址:https://pandao.github.io/editor.md/

是一款開源的、可嵌入的 Markdown 在線編輯器(組件),基于 CodeMirror、jQuery 和 Marked 構建。這個組件好像是國內開發的,個人之前用著還可以。

typora

網址:https://www.typora.io/

Typora是一款免費的輕量級Markdown編輯器,它沒有Mou,Haroopad等Markdown編輯器那么大名鼎鼎,算是較為小眾的一款產品。憑良心說話,我用過的Markdown編輯器也有好幾款,其中包括:小書匠,Haroopad,Atom等,但Typora是最合我心意的一款編輯器了,其輕量、快速、易于上手,使用起來簡直不要太舒服!!

tui-editor

網址:https://ui.toast.com/tui-editor

這是一款Markdown組件,通過調研決定用它。為什么?確認過眼神~

技術棧

  • Vue.js
  • tui-editor

實戰

確定好技術棧之后,我們就得腳踏實地地干活了。

1. 搭建Vue腳手架

我們會使用VueCLI搭建一個最基礎的項目,這里暫時不需要Vue-router、Vuex這些插件,所以盡可能輕裝。

2. 創建編輯器組件

我們會在components文件目錄下創建一個Editor.vue文件,這個文件也就是我們的主戰場,大部分操作都會在這個文件。

3. 配置編輯器組件

在配置編輯器時,有以下幾點使我非常困惑,以致于花費了大量時間。

  1. 代碼沒有被高亮
  2. 語言不是中文
  3. 編輯器樣式有問題

以上這幾個問題通過以下措施才得以解決:

  1. 通過閱讀文檔:https://nhn.github.io/tui.editor/latest/
  2. 訪問Github網站:https://github.com/nhn/tui.editor

Editor.vue

  1. <template> 
  2.   <div class="main"
  3.     <div id="editor"></div> 
  4.   </div> 
  5. </template> 
  6. <script> 
  7. import Editor from "@toast-ui/editor"
  8. import hljs from "highlight.js"
  9. import codeSyntaxHighlight from "@toast-ui/editor-plugin-code-syntax-highlight"
  10. import '@toast-ui/editor/dist/i18n/zh-cn.js'
  11.  
  12. import "highlight.js/styles/github.css"
  13. import "codemirror/lib/codemirror.css"; // Editor's Dependency Style 
  14. import "@toast-ui/editor/dist/toastui-editor.css"; // Editor's Style 
  15. import "@/styles/index.css"
  16. export default { 
  17.   components: {}, 
  18.   data() { 
  19.     return { 
  20.       editor: null 
  21.     }; 
  22.   }, 
  23.   mounted() { 
  24.     this.editor = new Editor({ 
  25.       el: document.getElementById("editor"), 
  26.       plugins: [[codeSyntaxHighlight, {hljs}]], 
  27.       previewStyle: "vertical"
  28.       height: "100vh"
  29.       initialEditType: "markdown"
  30.       minHeight: "200px"
  31.       initialValue: ""
  32.       placeholder: "你想寫點什么..."
  33.       language:'zh-CN'
  34.       useCommandShortcut: true
  35.       useDefaultHTMLSanitizer: true
  36.       usageStatistics: false
  37.       hideModeSwitch: false
  38.       viewer: true
  39.       toolbarItems: [ 
  40.         "heading"
  41.         "bold"
  42.         "italic"
  43.         "strike"
  44.         "divider"
  45.         "hr"
  46.         "quote"
  47.         "divider"
  48.         "ul"
  49.         "ol"
  50.         "task"
  51.         "indent"
  52.         "outdent"
  53.         "divider"
  54.         "table"
  55.         "image"
  56.         "link"
  57.         "divider"
  58.         "code"
  59.         "codeblock"
  60.       ], 
  61.     }); 
  62.     this.editor.getUI().getToolbar().removeItem("21"); 
  63.   }, 
  64. }; 
  65. </script> 

看似上面幾行代碼,但是也是很費勁才得以完成。

增加功能

首先,我開發這個程序的初衷是更好地方便自己寫文章,所以,我定下了這幾個需求:

  1. 可復制HTML格式文本,方便復制到微信公眾號
  2. 可復制Markdown文本,方便可以復制到稀土掘金、csdn這些博客網站上發布
  3. 可下載Markdown文件,更加方便保存和移動

因篇幅原因,先奉上主要邏輯代碼。這里我使用了clipboard這個將文本復制到剪貼板的插件。網址:https://clipboardjs.com/。

另外,downloadBlobAsFile方法主要是創建Blob對象,然后通過a標簽的download屬性進行下載。

downloadBlobAsFile.js

  1. export default function downloadBlobAsFile(data, filename) { 
  2.     const contentType = 'application/octet-stream'
  3.     if (!data) { 
  4.         console.error(' No data'); 
  5.         return
  6.     } 
  7.  
  8.     if (!filename) { 
  9.         filename = 'filetodonwload.txt'
  10.     } 
  11.  
  12.     if (typeof data === 'object') { 
  13.         data = JSON.stringify(data, undefined, 4); 
  14.     } 
  15.  
  16.     let blob = new Blob([data], {type: contentType}); 
  17.     let e = document.createEvent('MouseEvents'); 
  18.     let a = document.createElement('a'); 
  19.  
  20.     a.download = filename; 
  21.     a.href = URL.createObjectURL(blob); 
  22.     a.dataset.downloadurl = [contentType, a.download, a.href].join(':'); 
  23.     e.initMouseEvent('click'truefalse, window, 0, 0, 0, 0, 0, falsefalsefalsefalse, 0, null); 
  24.     a.dispatchEvent(e); 

Editor.vue

  1. <template> 
  2.   <div class="main"
  3.     <div class="tools"
  4.       <el-button 
  5.           size="mini" 
  6.           type="primary" 
  7.           @click="drawer = true" 
  8.       >工具</el-button> 
  9.       <el-button 
  10.           size="mini" 
  11.           type="primary" 
  12.           @click="aboutView = true" 
  13.       >關于</el-button> 
  14.       <el-dialog 
  15.           :title="'工具'" 
  16.           :visible.sync="drawer" 
  17.           :append-to-body="true" 
  18.       > 
  19.         <div class="tool-innter"
  20.           <el-button type="primary" @click="getHtml" class="htmlbtn" 
  21.           >復制HTML 
  22.           </el-button 
  23.           > 
  24.           <el-button type="primary" @click="getMd" class="mdbtn" 
  25.           >復制MarkDown 
  26.           </el-button 
  27.           > 
  28.           <el-button type="primary" @click="downloadMd" class="downloadbtn" 
  29.           >下載MarkDown 
  30.           </el-button 
  31.           > 
  32.         </div> 
  33.       </el-dialog> 
  34.       <el-dialog 
  35.           :title="'關于'" 
  36.           :visible.sync="aboutView" 
  37.           :append-to-body="true" 
  38.       > 
  39.         <h3>Simple·MarkDown編輯器</h3> 
  40.         <ul class="functionList"
  41.           <li v-for="(item,index) in functionList" :key="index"
  42.             {{item}} 
  43.           </li> 
  44.         </ul> 
  45.         <h3>作者</h3> 
  46.         <ul class="functionList"
  47.           <li v-for="(item,index) in authorList" :key="index">{{item}}</li> 
  48.         </ul> 
  49.         <div class="wxcode"
  50.           <img src="../assets/wxcode.jpeg" alt=""
  51.         </div> 
  52.       </el-dialog> 
  53.     </div> 
  54.     <div id="editor"></div> 
  55.   </div> 
  56. </template> 
  57. <script> 
  58. import Editor from "@toast-ui/editor"
  59. import Clipboard from "clipboard"
  60. import hljs from "highlight.js"
  61. import codeSyntaxHighlight from "@toast-ui/editor-plugin-code-syntax-highlight"
  62. import '@toast-ui/editor/dist/i18n/zh-cn.js'
  63. import downloadBlobAsFile from "../utils/download"
  64.  
  65. import "highlight.js/styles/github.css"; //https://github.com/highlightjs/highlight.js/tree/master/src/styles 
  66. import "codemirror/lib/codemirror.css"; // Editor's Dependency Style 
  67. import "@toast-ui/editor/dist/toastui-editor.css"; // Editor's Style 
  68. import "@/styles/index.css"
  69. export default { 
  70.   components: {}, 
  71.   data() { 
  72.     return { 
  73.       editor: null
  74.       drawer: false
  75.       aboutView: false
  76.       functionList:['頁面簡約','功能實用','支持稀土掘金、CSDN、微信公眾號、知乎','可復制HTML、MarkDown','可下載MarkDown文件'], 
  77.       authorList:['作者:Vam的金豆之路','歡迎關注我的公眾號:前端歷劫之路','我創建了一個技術交流、文章分享群,群里有很多大廠的前端大佬,關注公眾號后,點擊下方菜單了解更多即可加我微信,期待你的加入'
  78.     }; 
  79.   }, 
  80.   methods: { 
  81.     // 復制HTML 
  82.     getHtml() { 
  83.       const clipboard = new Clipboard(".htmlbtn", { 
  84.         target: () => this.editor.preview.el, 
  85.       }); 
  86.       clipboard.on("success", () => { 
  87.         this.$message({ 
  88.           message: "復制成功"
  89.           type: "success"
  90.         }); 
  91.         clipboard.destroy(); 
  92.       }); 
  93.       clipboard.on("error", () => { 
  94.         this.$message.error("復制失敗"); 
  95.         clipboard.destroy(); 
  96.       }); 
  97.     }, 
  98.     // 復制Markdown 
  99.     getMd() { 
  100.       const clipboard = new Clipboard(".mdbtn", { 
  101.         text: () => this.editor.getMarkdown(), 
  102.       }); 
  103.       clipboard.on("success", () => { 
  104.         this.$message({ 
  105.           message: "復制成功"
  106.           type: "success"
  107.         }); 
  108.         clipboard.destroy(); 
  109.       }); 
  110.       clipboard.on("error", () => { 
  111.         this.$message.error("復制失敗"); 
  112.         clipboard.destroy(); 
  113.       }); 
  114.     }, 
  115.     // 下載Markdown 
  116.     downloadMd() { 
  117.       if (this.editor.getMarkdown().trim()) { 
  118.         downloadBlobAsFile(this.editor.getMarkdown(), "unnamed.md"); 
  119.       } else { 
  120.         this.$message.error("下載失敗"); 
  121.       } 
  122.     }, 
  123.   }, 
  124.   mounted() { 
  125.     this.editor = new Editor({ 
  126.       el: document.getElementById("editor"), 
  127.       plugins: [[codeSyntaxHighlight, {hljs}]], 
  128.       previewStyle: "vertical"
  129.       height: "100vh"
  130.       initialEditType: "markdown"
  131.       minHeight: "200px"
  132.       initialValue: ""
  133.       placeholder: "你想寫點什么..."
  134.       language:'zh-CN'
  135.       useCommandShortcut: true
  136.       useDefaultHTMLSanitizer: true
  137.       usageStatistics: false
  138.       hideModeSwitch: false
  139.       viewer: true
  140.       toolbarItems: [ 
  141.         "heading"
  142.         "bold"
  143.         "italic"
  144.         "strike"
  145.         "divider"
  146.         "hr"
  147.         "quote"
  148.         "divider"
  149.         "ul"
  150.         "ol"
  151.         "task"
  152.         "indent"
  153.         "outdent"
  154.         "divider"
  155.         "table"
  156.         "image"
  157.         "link"
  158.         "divider"
  159.         "code"
  160.         "codeblock"
  161.       ], 
  162.     }); 
  163.     this.editor.getUI().getToolbar().removeItem("21"); 
  164.   }, 
  165. }; 
  166. </script> 

針對微信公眾號進行樣式優化

::v-deep是深度作用選擇器,主要是為了覆蓋原有的樣式所用。

  1. ::v-deep ul li { 
  2.   list-style-type: disc !important; 
  3.  
  4. ::v-deep ol li { 
  5.   list-style-type: decimal !important; 
  6.  
  7. ::v-deep ul li::before, ::v-deep ol li::before { 
  8.   content: none; 
  9. ::v-deep .tui-editor-contents p>code{ 
  10.   background-color: #fff5f5; 
  11.   color: #ff502c; 
  12. ::v-deep .tui-editor-contents pre { 
  13.   width: 100%; 
  14.   overflow: auto; 

線上體驗

https://www.maomin.club/site/mdeditor/

結語

謝謝閱讀,希望沒有浪費你的時間。

源碼地址:

https://github.com/maomincoding/simpleMdEditor

 

責任編輯:姜華 來源: 前端歷劫之路
相關推薦

2023-06-20 00:04:18

框架開發UMD

2021-11-24 09:12:11

Markdown編輯器Linux

2020-09-18 06:00:51

開源Markdown編輯器

2020-09-16 10:27:50

MarkDown編輯器編程

2024-03-06 08:26:29

2021-08-26 05:15:22

圖片編輯器 H5-DooringMitu-Doorin

2022-08-31 08:32:22

數據可視化項目nocode

2017-05-23 19:19:16

開源Markdown編輯器

2021-10-21 10:58:03

Markdown編輯器

2021-10-27 14:55:57

Mark TextMarkdown編輯器

2022-04-27 08:42:20

Markdown編輯神器

2021-04-08 14:58:59

開發前端編輯器

2021-06-23 06:12:38

Subtitld編輯器開源

2021-04-04 08:16:09

NewsFlash閱讀器開源

2022-09-05 13:16:42

MicroVim編輯器

2022-01-10 18:16:24

編輯器Typora Markdown

2023-09-10 23:22:33

Zettlr筆記編輯器

2021-04-12 08:31:53

PC-Dooring項目PC端搭建

2015-06-01 07:37:42

開發產品

2021-12-23 10:59:30

開源技術 軟件
點贊
收藏

51CTO技術棧公眾號

欧美激情图片区| 日韩欧美视频在线| 亚洲午夜精品一区二区三区| 在线观看视频二区| 欧美涩涩视频| 国产视频久久久久久久| 男人搞女人网站| gogogogo高清视频在线| 99久久99久久久精品齐齐| 国产精品美腿一区在线看| 久久黄色免费网站| 欧美日韩国产传媒| 精品美女被调教视频大全网站| 黑人糟蹋人妻hd中文字幕| 久久五月精品| 久久久久成人黄色影片| 亚洲综合日韩在线| 国产精品熟女视频| 亚洲高清在线| 超薄丝袜一区二区| www.av天天| 国产精品传媒| 欧美一区二区网站| 99久久久无码国产精品6| 色呦呦视频在线观看| 国产丝袜在线精品| 国内一区二区在线视频观看| 国产欧美一区二区三区视频在线观看| 国产日韩亚洲欧美精品| 欧美成人亚洲成人| 手机毛片在线观看| 校花撩起jk露出白色内裤国产精品| 91精品一区二区三区久久久久久| 免费午夜视频在线观看| av影视在线看| 一区二区三区中文在线观看| 亚洲欧美在线网| 蜜桃免费在线| 91女人视频在线观看| av电影成人| 午夜老司机福利| 国模一区二区三区白浆| 国产精品自产拍高潮在线观看| 伊人手机在线视频| 1024日韩| 97在线视频一区| 麻豆影视在线播放| 国产精品草草| 欧美激情视频一区二区三区不卡| 欧美老熟妇一区二区三区| 日韩情爱电影在线观看| 国产亚洲欧洲高清| 久久亚洲无码视频| 欧美精品一二| 中文字幕亚洲国产| 手机毛片在线观看| 久久精品国产大片免费观看| 在线一区二区日韩| 欧美福利在线视频| 66视频精品| 欧美理论电影在线播放| 欧美日韩中文字幕在线观看| 欧美精品一卡| 性色av一区二区三区红粉影视| 天天操天天射天天爽| 激情亚洲网站| 国产91|九色| 天干夜夜爽爽日日日日| 日本系列欧美系列| 91精品免费看| 精品人妻一区二区三区换脸明星| 国产成人精品一区二| 国产精品自拍首页| 蜜桃视频在线免费| 中文字幕在线不卡视频| 欧美一级免费在线观看| 欧美四级在线| 欧美日韩亚洲一区二区三区| 人妻内射一区二区在线视频| 日产精品一区| 91精品福利在线一区二区三区 | 亚洲精品久久久久久下一站| 黄色性生活一级片| 成人免费看片39| 欧美成人在线网站| 亚洲精品77777| 青娱乐精品在线视频| 成人午夜黄色影院| 欧美一区二区在线观看视频| 久久久国产精品麻豆| 手机福利在线视频| jizzjizz中国精品麻豆| 日本高清不卡aⅴ免费网站| 国产精欧美一区二区三区白种人| 51社区在线成人免费视频| 精品中文字幕久久久久久| 国产精品视频在| 亚洲激情影院| 国产一区红桃视频| 欧美一级淫片aaaaaa| 欧美国产一区二区在线观看| 国产精品三级一区二区| 粉嫩一区二区三区| 欧美电影精品一区二区| 在线观看国产精品一区| 午夜天堂精品久久久久| 国产精品久久久久久久天堂| 囯产精品一品二区三区| 中文字幕精品在线不卡| 免费无码不卡视频在线观看| 91精品一久久香蕉国产线看观看| 国产丝袜一区二区| 午夜69成人做爰视频| 日本不卡中文字幕| 麻豆视频成人| 欧洲在线视频| 在线观看91精品国产麻豆| 成人欧美精品一区二区| 97精品国产| 国产成人黄色av| 欧美 日韩 综合| 亚洲人一二三区| 99视频精品免费| 日韩系列在线| 国语自产精品视频在线看抢先版图片| 91无套直看片红桃| 久久久精品tv| 国产二区视频在线播放| 少妇精品在线| 欧美成人免费视频| 国产美女精品视频国产| 欧美国产精品专区| 久久久久免费精品| 亚洲老女人视频免费| 久久久女人电视剧免费播放下载| 国产情侣在线播放| 亚洲同性同志一二三专区| 在线观看高清免费视频| 国产成人1区| 热久久视久久精品18亚洲精品| 女人18毛片水真多18精品| 一区二区三区四区在线| 日本中文字幕在线不卡| 久久精品久久久| 国产日本欧美一区二区三区在线 | 日本精品www| 亚洲永久精品唐人导航网址| 97精品久久久| 日韩porn| 欧美性三三影院| 中文字幕黄色网址| 日韩—二三区免费观看av| 欧美亚洲丝袜| 日韩欧美一区二区三区免费观看| 亚洲欧美在线一区二区| 波多野结衣小视频| 亚洲国产成人在线| 欧美一级视频在线| 欧美1区3d| 国产欧美一区二区三区另类精品 | 国产原创欧美精品| 黄色网页在线观看| 欧美一级理论片| 免费在线看黄网址| 波多野结衣中文一区| 97成人在线免费视频| 亚洲精品播放| 国产精品一区二区在线| 毛片网站在线免费观看| 日韩一区二区麻豆国产| 五月天婷婷网站| 久久久九九九九| 国产免费中文字幕| 欧美日本三区| 欧美视频观看一区| 国产91在线精品| 欧美精品aaa| 三级无遮挡在线观看| 在线观看国产日韩| 福利所第一导航| 久久影视一区二区| 性生生活大片免费看视频| 女人香蕉久久**毛片精品| 国产一区二区三区黄| 先锋欧美三级| 欧美国产视频一区二区| 欧美少妇另类| 日韩西西人体444www| 中文在线第一页| 亚洲免费三区一区二区| 中出视频在线观看| 精品一区二区三区免费| 欧美一级在线看| 99久久夜色精品国产亚洲狼| 国产日韩欧美综合精品| 国产原创一区| 欧美一级大片视频| 黄色网在线看| 国产一级揄自揄精品视频| 国产成人久久精品77777综合| 岛国精品视频在线播放| 久久国产精品国语对白| 久久亚洲欧美国产精品乐播| 两女双腿交缠激烈磨豆腐| 老司机久久99久久精品播放免费| 日本a级片在线播放| 精品国内自产拍在线观看视频 | 亚洲精品中文字幕乱码无线| 国产精品久久久免费| 久久精品国产精品亚洲精品色| 欧美激情影院| av噜噜色噜噜久久| 成人久久网站| 欧美夜福利tv在线| 四虎av在线| 久久精品中文字幕电影| 欧美成人免费| 亚洲国产精品成人精品| av男人天堂av| 在线电影国产精品| wwwwww在线观看| 欧美午夜性色大片在线观看| 欧美色图一区二区| 亚洲欧美在线另类| 欧美黄色高清视频| 久久一夜天堂av一区二区三区| 成年女人免费视频| 国产成人精品一区二| 国产3p在线播放| 日韩电影免费在线看| 色欲av无码一区二区人妻| 精品1区2区3区4区| 777久久精品一区二区三区无码| 手机在线电影一区| 日日骚一区二区网站| 美女精品一区最新中文字幕一区二区三区| 成人综合av网| 51精品国产| av蓝导航精品导航| 91午夜精品| 97人人模人人爽人人喊38tv| 国产精品美女久久久久人| 国产综合福利在线| 9.1麻豆精品| 91在线直播亚洲| 91精品亚洲一区在线观看| 91美女福利视频高清| 国产精品麻豆| 亚洲xxxx视频| 动漫视频在线一区| 国产麻豆乱码精品一区二区三区| 国产精品毛片久久久| 国产伦视频一区二区三区| 久久综合社区| 另类视频在线观看+1080p| 亚洲区小说区| 一区二区视频免费| 97精品视频| 亚洲午夜精品福利| 欧美高清在线| 亚洲精品人成| 欧美疯狂party性派对| 青少年xxxxx性开放hg| 欧美在线播放| 日韩av在线播放不卡| 日韩视频在线一区二区三区| 免费成人在线视频网站| 玖玖精品视频| 制服丝袜中文字幕第一页| 国产乱子轮精品视频| 精品国产乱码久久久久夜深人妻| 成人激情视频网站| 四虎影成人精品a片| 国产女同互慰高潮91漫画| 在线观看黄网址| 夜夜亚洲天天久久| 日韩熟女精品一区二区三区| 色偷偷久久一区二区三区| 亚洲图片视频小说| 日韩欧美一区在线观看| 五月天婷婷在线播放| 国产一区二区三区视频 | 久久影院电视剧免费观看| 亚洲一级黄色录像| 亚洲精品中文在线观看| 日韩av综合在线| 在线欧美日韩国产| 99热在线只有精品| 日韩电影网在线| 色哟哟免费在线观看 | 亚洲欧美国产不卡| 好看的av在线不卡观看| 欧美黄色一级片视频| 国产一区二区三区国产| av网站有哪些| 亚洲色图欧洲色图| 久久黄色精品视频| 欧美一区二区三区免费在线看| 日本1级在线| 超碰97人人做人人爱少妇| 欧美电影免费观看高清完整| 91麻豆精品秘密入口| 国产一区二区三区91| 97超碰国产精品| 美女视频一区二区三区| 日本一区二区在线免费观看| 亚洲人xxxx| 日本视频www色| 亚洲国产精品va在线观看黑人| 丝袜美腿美女被狂躁在线观看| 欧美亚洲日本黄色| 中文字幕区一区二区三| 亚洲综合视频一区| 国产精品夜夜夜| 亚洲美女精品视频| 国产精品国产三级国产aⅴ原创 | 久久国产毛片| 中文字幕一区二区三区乱码不卡| 中文字幕在线一区免费| 一级成人黄色片| 亚洲精品成人免费| 午夜av在线免费观看| 国产美女精彩久久| 国产中文精品久高清在线不| 人妻少妇精品久久| 国产成人av在线影院| 午夜爱爱毛片xxxx视频免费看| 色八戒一区二区三区| 十九岁完整版在线观看好看云免费| 久久99亚洲精品| 成人自拍视频| 影音先锋欧美在线| 免费成人av在线| 一级片久久久久| 在线免费亚洲电影| 国产精品无码2021在线观看| 日韩av电影院| 久久不见久久见国语| www一区二区www免费| 99久久综合精品| 天天插天天操天天干| 亚洲成年人在线播放| h片精品在线观看| 成人区精品一区二区| 欧美日韩亚洲三区| 中文字幕99页| 天天影视涩香欲综合网| 欧美一级特黄aaaaaa| 性欧美视频videos6一9| 免费萌白酱国产一区二区三区| 日韩中文字幕在线视频观看| 91蜜桃网址入口| 亚洲熟妇无码乱子av电影| 亚洲视频在线观看网站| 日本一道高清亚洲日美韩| 日韩中文字幕一区二区| 蜜桃免费网站一区二区三区| 日本不卡一区视频| 欧美日韩国产a| 最新日本在线观看| 国产精选在线观看91| 一区二区日本视频| 日韩精品无码一区二区三区久久久| 色激情天天射综合网| av电影在线播放高清免费观看| 成人久久精品视频| 国产精品sm| a级在线观看视频| 欧美三级韩国三级日本三斤| v片在线观看| 激情久久av| 日本不卡视频在线观看| 九九精品视频免费| 亚洲精品一区在线观看| 欧美xxx网站| 男同互操gay射视频在线看| 风流少妇一区二区| 无码人妻精品一区二区三区蜜桃91| 日韩在线视频观看正片免费网站| 日韩中文字幕视频网| 久草精品在线播放| 亚洲三级电影网站| 午夜影院免费视频| 国产一区二区在线免费| av成人黄色| 日韩欧美123区| 日韩精品高清视频| 亚洲免费一区| 黄色免费视频大全| 18成人在线视频| 亚洲色图欧美视频| 国产精品一区二区久久久| 国产精品mm| 五月天婷婷丁香网| 亚洲第一视频在线观看| 99热播精品免费| 很污的网站在线观看| 国产欧美va欧美不卡在线| 日本免费网站在线观看| 成人有码在线播放|