日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

圖形編輯器開發(fā):實現(xiàn)圖形的復(fù)制粘貼

來源: 責編: 時間:2023-09-28 10:09:24 481觀看
導(dǎo)讀大家好,我是前端西瓜哥。今天這篇文字來講解一下圖形編輯器如何實現(xiàn)圖形的復(fù)制粘貼。粘貼的范圍首先需要確認一下粘貼的范圍。如果只支持粘貼到當前編輯器下,方案很簡單:只需要監(jiān)聽 Ctrl + C 鍵盤事件深拷貝一份選中圖形

81O28資訊網(wǎng)——每日最新資訊28at.com

大家好,我是前端西瓜哥。81O28資訊網(wǎng)——每日最新資訊28at.com

今天這篇文字來講解一下圖形編輯器如何實現(xiàn)圖形的復(fù)制粘貼。81O28資訊網(wǎng)——每日最新資訊28at.com

粘貼的范圍

首先需要確認一下粘貼的范圍。81O28資訊網(wǎng)——每日最新資訊28at.com

如果只支持粘貼到當前編輯器下,方案很簡單:只需要監(jiān)聽 Ctrl + C 鍵盤事件深拷貝一份選中圖形對象,然后再監(jiān)聽 Ctrl + V 事件,將拷貝出來的對象添加到圖形樹的末尾。81O28資訊網(wǎng)——每日最新資訊28at.com

但通常我們希望可以跨 tab 頁,跨圖紙,跨瀏覽器,甚至從 Web 端復(fù)制到桌面端。81O28資訊網(wǎng)——每日最新資訊28at.com

很明顯,要實現(xiàn)這樣的場景,我們需要操作系統(tǒng)級的支持:剪貼板81O28資訊網(wǎng)——每日最新資訊28at.com

我們看看怎么實現(xiàn)通過剪貼板實現(xiàn)圖形的復(fù)制粘貼。81O28資訊網(wǎng)——每日最新資訊28at.com

復(fù)制邏輯

先是復(fù)制邏輯。81O28資訊網(wǎng)——每日最新資訊28at.com

復(fù)制通常為兩種方式:81O28資訊網(wǎng)——每日最新資訊28at.com

  • 快捷鍵  Ctrl/Cmd + C 。
  • 在選中的元素上方右鍵出現(xiàn)菜單選項。選中 “復(fù)制” 選項。

如下圖:81O28資訊網(wǎng)——每日最新資訊28at.com

81O28資訊網(wǎng)——每日最新資訊28at.com

當調(diào)用復(fù)制命令時,我們要將 選中的圖形生成序列化快照。81O28資訊網(wǎng)——每日最新資訊28at.com

所謂序列化,就是將內(nèi)存中的對象轉(zhuǎn)換為可以持久化的數(shù)據(jù)。最簡單快捷的就是用 JSON.stringify() 序列化為 JSON 字符串。81O28資訊網(wǎng)——每日最新資訊28at.com

除了圖形對象 data,我們還要保存一些必要的元信息。81O28資訊網(wǎng)——每日最新資訊28at.com

最后我們要保存的信息有:81O28資訊網(wǎng)——每日最新資訊28at.com

  • data:選中圖形的數(shù)組(只有屬性值)。
  • appVersion:編輯器版本。隨著編輯器的迭代,圖紙存儲結(jié)構(gòu)可能會發(fā)生變化,我們需要版本號來做兼容處理。
  • paperId:圖紙 id,用來判斷是否跨圖紙粘貼。跨還是不跨圖紙,粘貼策略有所不同,后面會說明。
/** * 生成選中圖形的快照,并保存到操作系統(tǒng)剪貼板中 */const getSelectedItemsSnapshot() => {  const selectedItems = selectSet.getItems();  if (selectedItems.length === 0) {    return null;  }  // 提取圖形原始屬性,丟掉多余屬性(比如 id)  const copiedData = arrMap(selectedItems, (item) =>    lodash.omit(item.getAttrs(), 'id'),  );  // 序列化  return JSON.stringify({    appVersion: this.editor.appVersion,    paperId: this.editor.paperId,    data: JSON.stringify(copiedData),  });}

拿到快照信息后,我們會調(diào)用 navigator.clipboard.writeText() 方法,將數(shù)據(jù)保存到操作系統(tǒng)的剪貼板中。81O28資訊網(wǎng)——每日最新資訊28at.com

/** * 綁定 Ctrl/Cmd + C 的事件響應(yīng)函數(shù) */const copyHandler = () => {  const snapshot = getSelectedItemsSnapshot();  if (!snapshot) {    return;  }  // 將序列化結(jié)果保存到剪貼板  navigator.clipboard.writeText(snapshot).then(() => {    // 這里可以考慮加一個 “復(fù)制成功” 彈窗提示    console.log('copied');  });};hotkeys('cmd+c, ctrl+c', copyHandler);

81O28資訊網(wǎng)——每日最新資訊28at.com

粘貼

然后就是粘貼了。81O28資訊網(wǎng)——每日最新資訊28at.com

粘貼分為右鍵粘貼和快捷鍵粘貼。81O28資訊網(wǎng)——每日最新資訊28at.com

右鍵粘貼

81O28資訊網(wǎng)——每日最新資訊28at.com

這里的右鍵粘貼使用了 clipboard.readText() 方法。因為該方法不是用戶的主動動作,涉及到用戶隱私問題,所以需要用戶授權(quán)剪貼板權(quán)限才行。81O28資訊網(wǎng)——每日最新資訊28at.com

另外,F(xiàn)irefox 瀏覽器直接報錯,不會彈出剪貼板授權(quán)彈窗。81O28資訊網(wǎng)——每日最新資訊28at.com

這不是個技術(shù)問題,因為可以手動修改 Firefox 瀏覽器設(shè)置啟用剪貼板授權(quán)。它更是一個安全問題,F(xiàn)irefox 不認為用戶能夠正確地授權(quán)粘貼板操作,以及開發(fā)者不會濫用這個權(quán)限收集用戶隱私。81O28資訊網(wǎng)——每日最新資訊28at.com

右鍵粘貼因為提供了光標位置,所以我們可以將圖形的位置對上這個位置。81O28資訊網(wǎng)——每日最新資訊28at.com

快捷鍵粘貼

81O28資訊網(wǎng)——每日最新資訊28at.com

前面我們因為主動獲取剪貼板的內(nèi)容,所以有權(quán)限問題。81O28資訊網(wǎng)——每日最新資訊28at.com

但如果我們監(jiān)聽用戶的 “粘貼” 操作,權(quán)限就寬松了很多,不需要授權(quán)。81O28資訊網(wǎng)——每日最新資訊28at.com

因為這是用戶的主動行為,用戶從剪貼板取出了數(shù)據(jù)交給你,而不是你主動去訪問剪貼板的數(shù)據(jù)。81O28資訊網(wǎng)——每日最新資訊28at.com

const pasteHandler = (e: Event) => {  const event = e as ClipboardEvent;  const clipboardData = event.clipboardData;  if (!clipboardData) {    return;  }  // 拿到粘貼的文本內(nèi)容  const pastedData = clipboardData.getData('Text');  // ...};// 監(jiān)聽 “粘貼” 事件window.addEventListener('paste', pasteHandler);

如果用戶拒絕授權(quán),我們可以考慮提示用戶 “用 Ctrl + C 的方式粘貼”,或者用用戶上次右鍵粘貼的內(nèi)容湊數(shù),雖然可能貨不對版,但好歹有個東西。81O28資訊網(wǎng)——每日最新資訊28at.com

相同圖紙下右鍵粘貼

快捷鍵粘貼沒有光標操作,所以粘貼圖形的位置需要用另一種方式去處理。81O28資訊網(wǎng)——每日最新資訊28at.com

我們需要考慮兩種情況:相同圖紙和跨圖紙。81O28資訊網(wǎng)——每日最新資訊28at.com

對于在同一個圖紙下快捷鍵粘貼,圖形復(fù)制時在哪里,粘貼也在哪里。81O28資訊網(wǎng)——每日最新資訊28at.com

或者你可以給一個小的右下偏移,讓用戶感知到粘貼成功了。我個人不喜歡這個偏移,因為通常我復(fù)制,就是為了讓圖形做重復(fù)對齊排列的,我還得給它移動回去。81O28資訊網(wǎng)——每日最新資訊28at.com

在另一張圖紙下右鍵粘貼

如果是在另一張圖紙下粘貼,我們就不能這么做了。81O28資訊網(wǎng)——每日最新資訊28at.com

為什么呢?81O28資訊網(wǎng)——每日最新資訊28at.com

舉個例子,假設(shè)用戶復(fù)制了圖紙 A 中在 (10000, 10000) 坐標的圖形。然后我打開圖紙 B,圖紙 B 此時視口的中心坐標在 (0, 0)。81O28資訊網(wǎng)——每日最新資訊28at.com

用戶一粘貼,然后說,誒,粘貼的圖形哪去了?你說我可以讓視口移動到粘貼圖形的位置,那用戶會說,誒,我在哪里,我的其他圖形哪去了?81O28資訊網(wǎng)——每日最新資訊28at.com

所以 對于跨圖紙場景,最好的做法是將圖形粘貼到畫布正中心。81O28資訊網(wǎng)——每日最新資訊28at.com

81O28資訊網(wǎng)——每日最新資訊28at.com

代碼實現(xiàn)

代碼邏輯有點多,就不文字敘述了,看代碼里面的注釋吧。81O28資訊網(wǎng)——每日最新資訊28at.com

class ClipboardManager {  private unbindEvents = noop;  constructor(private editor: Editor) {}  bindEvents() {    // Ctrl+C 鍵盤事件響應(yīng)函數(shù)    const copyHandler = () => {      this.copy();    };    // 粘貼事件響應(yīng)函數(shù)    const pasteHandler = (e: Event) => {      const event = e as ClipboardEvent;      const clipboardData = event.clipboardData;      if (!clipboardData) {        return;      }      const pastedData = clipboardData.getData('Text');      this.addGraphsFromClipboard(pastedData);    };    hotkeys('cmd+c, ctrl+c', copyHandler);    window.addEventListener('paste', pasteHandler);    this.unbindEvents = () => {      hotkeys.unbind('cmd+c, ctrl+c', copyHandler);      window.removeEventListener('paste', pasteHandler);    };  }  /**   * 將快照保存到剪貼板   */  copy() {    const snapshot = this.getSelectedItemsSnapshot();    if (!snapshot) {      return;    }    navigator.clipboard.writeText(snapshot).then(() => {      console.log('copied');    });  }  pasteAt(x: number, y: number) {    navigator.clipboard.readText().then((pastedData) => {      this.addGraphsFromClipboard(pastedData, x, y);    });  }  /**   * 生成選中圖形的快照(序列化)   */  private getSelectedItemsSnapshot() {    const selectedItems = this.editor.selectedElements.getItems();    if (selectedItems.length === 0) {      return null;    }    const copiedData = arrMap(selectedItems, (item) =>      omit(item.getAttrs(), 'id'),    );    return JSON.stringify({      appVersion: this.editor.appVersion,      paperId: this.editor.paperId,      data: JSON.stringify(copiedData),    });  }  // 在指定坐標位置粘貼內(nèi)容  private addGraphsFromClipboard(dataStr: string): void;  private addGraphsFromClipboard(dataStr: string, x: number, y: number): void;  private addGraphsFromClipboard(dataStr: string, x?: number, y?: number) {    let pastedData: IEditorPaperData | null = null;    try {      // 反序列化      pastedData = JSON.parse(dataStr);    } catch (e) {      return;    }    // 數(shù)據(jù)格式校驗    if (      !(        pastedData &&        pastedData.appVersion.startsWith('suika-editor') &&        pastedData.data      )    ) {      return;    }    const editor = this.editor;    // 將數(shù)據(jù)解析并添加到圖形樹中    const pastedGraphs = editor.sceneGraph.addGraphsByStr(pastedData.data);    if (pastedGraphs.length === 0) {      return;    }    // 添加到歷史記錄(以實現(xiàn)撤銷重做)    editor.commandManager.pushCommand(      new AddShapeCommand('pasted graphs', editor, pastedGraphs),    );    // 標記粘貼圖形為選中狀態(tài)    editor.selectedElements.setItems(pastedGraphs);    const bbox = editor.selectedElements.getBBox()!;    // 如果是右鍵粘貼(x 和 y 沒有值)且跨圖紙粘貼,計算粘貼圖形要移動的目標位置    if (      (x === undefined || y === undefined) &&      pastedData.paperId !== editor.paperId    ) {      const vwCenter = this.editor.viewportManager.getCenter();      x = vwCenter.x - bbox.width / 2;      y = vwCenter.y - bbox.height / 2;    }    // 遍歷粘貼圖形,根據(jù) x 和 y 進行位置修正    if (x !== undefined && y !== undefined) {      const dx = x - bbox.x;      const dy = y - bbox.y;      if (dx || dy) {        Graph.dMove(pastedGraphs, dx, dy);      }    }    // 渲染畫布    editor.sceneGraph.render();  }  // 銷毀時解綁事件監(jiān)聽  destroy() {    this.unbindEvents();  }}

一些優(yōu)化點

這里補充一些可以優(yōu)化的點。81O28資訊網(wǎng)——每日最新資訊28at.com

前面的實現(xiàn)其實有個用戶體驗不好的地方,就是用戶復(fù)制后,在圖形編輯器外粘貼,會粘貼出一堆意義不明的字符串。81O28資訊網(wǎng)——每日最新資訊28at.com

最好是用戶粘貼不出任何東西,這個有辦法解決。81O28資訊網(wǎng)——每日最新資訊28at.com

之前我們用的是 clipboard.writeText() 方法,給數(shù)據(jù)指定的是 text/plain 的 MIME 類型。81O28資訊網(wǎng)——每日最新資訊28at.com

實際上我們可以用另一個方法  clipboard.write(),該方法可以指定其他的文本相關(guān) MIME 類型,然后將我們真正的數(shù)據(jù)放到到一些不會被其他軟件解析的角落里。81O28資訊網(wǎng)——每日最新資訊28at.com

我們來看看隔壁 Figma 是怎么做的?它將復(fù)制的數(shù)據(jù)設(shè)置為 text/html 類型。81O28資訊網(wǎng)——每日最新資訊28at.com

我再看看它的 HTML 都是什么內(nèi)容。81O28資訊網(wǎng)——每日最新資訊28at.com

81O28資訊網(wǎng)——每日最新資訊28at.com

可以看到數(shù)據(jù)主要保存在兩個 span 元素上,它們都沒有文本內(nèi)容,所以在文本編輯器中進行標準的粘貼是粘貼不出任何內(nèi)容的。81O28資訊網(wǎng)——每日最新資訊28at.com

但這里 Figma 巧妙地用了一個自定義的 data-metadata 和 data-buffer 去保存真正的數(shù)據(jù)。這個數(shù)據(jù)看著像是序列化后的類似 base64 格式的內(nèi)容。81O28資訊網(wǎng)——每日最新資訊28at.com

這樣就能巧妙地防止其他文本編輯器能夠粘貼出內(nèi)容,自己的編輯器卻會在解析 html 結(jié)構(gòu)時特意去讀這個自定義屬性拿到數(shù)據(jù)。81O28資訊網(wǎng)——每日最新資訊28at.com

代碼實現(xiàn)大概為:81O28資訊網(wǎng)——每日最新資訊28at.com

const blob = new Blob(  [    `<meta charset="utf-8">    <span data-suika-meta="${這里是元數(shù)據(jù)}"></span>    <span data-suika-data="${這里是主體數(shù)據(jù)}"><span>`,  ],  { type: 'text/html' },);navigator.clipboard  .write([new ClipboardItem({ [blob.type]: blob })])  .then(() => {    console.log('copied');  });

Firefox 目前(2023.08.06)不支持 ClipboardItem,需要 document.execCommand('copy') 的舊方法來兼容。81O28資訊網(wǎng)——每日最新資訊28at.com

如果要用 text/html 這種方式,還要做多幾個工作:81O28資訊網(wǎng)——每日最新資訊28at.com

  1. 序列化結(jié)果要能放到 html 的屬性值中,需要做一個轉(zhuǎn)義;
  2. 粘貼讀取 HTML 內(nèi)容時,額外需要一個 HTML 解析器去解析,千萬不要直接用原生的 DOM 去處理它們,會有完全問題,比如可能會有 script 腳本。這個解析器也不只可以解析復(fù)制的圖形內(nèi)容,還可以用作普通的解析 html 對應(yīng)生成文本圖形對象。

然后就是粘貼文字、圖形的情況,這時我們就不能用 clipboard.writeText(),要用 clipboard.write() 了。81O28資訊網(wǎng)——每日最新資訊28at.com

結(jié)尾

總結(jié)一下圖形編輯器的圖形復(fù)制粘貼的邏輯。81O28資訊網(wǎng)——每日最新資訊28at.com

在復(fù)制時,要將選中圖形進行序列化保存到剪貼板。81O28資訊網(wǎng)——每日最新資訊28at.com

粘貼的場景就比較多了。粘貼時需要反序列化解析數(shù)據(jù),并創(chuàng)建對象添加到圖形樹上。81O28資訊網(wǎng)——每日最新資訊28at.com

粘貼要注意權(quán)限問題,快捷鍵粘貼權(quán)限比較寬松,不需要用戶授權(quán);右鍵粘貼則因為是開發(fā)者的主動行為,所以需要授權(quán),如果用戶不授權(quán),可以考慮提示用戶用快捷鍵粘貼的方式,或粘貼上一次快捷鍵粘貼的內(nèi)容。81O28資訊網(wǎng)——每日最新資訊28at.com

右鍵粘貼時需要將圖形粘貼到光標位置上。快捷鍵粘貼時則需要考慮是否跨圖紙,如果是相同圖紙,原地粘貼即可;如果是另一張圖紙,則粘貼到視口正中心。81O28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-11894-0.html圖形編輯器開發(fā):實現(xiàn)圖形的復(fù)制粘貼

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 好用!這些工具國慶一定要研究下

下一篇: c#委托用法詳解,你了解嗎?

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
激情综合色综合久久| 久久久福利视频| 亚洲乱码国产乱码精品精可以看| 亚洲狠狠丁香婷婷综合久久久| 亚洲国产美女久久久久| 一区二区成人精品 | 在线成人av网站| 亚洲电影av| 这里只有精品视频| 久久精品免费电影| 欧美国产三级| 国产毛片一区二区| 亚洲国产成人在线视频| 中国成人亚色综合网站| 久久精品国产欧美亚洲人人爽| 欧美丰满高潮xxxx喷水动漫| 国产精品成人观看视频免费| 一区二区亚洲| 亚洲网站在线播放| 免费在线观看精品| 欧美高清在线| 国产精品免费一区二区三区观看| 国产视频亚洲精品| 亚洲精品国精品久久99热| 亚洲综合色视频| 另类成人小视频在线| 欧美三级乱码| 国产自产2019最新不卡| 亚洲美女福利视频网站| 欧美一级午夜免费电影| 欧美激情第8页| 国产一区二区成人| 日韩午夜免费视频| 久久久久五月天| 欧美婷婷久久| 亚洲电影毛片| 欧美一区二区免费观在线| 欧美精品一区二区三区蜜桃| 欧美一区二区三区四区在线| 欧美高清视频一二三区| 国产视频欧美| 一区二区三区日韩精品视频| 影音先锋久久| 99国内精品久久| 欧美一区影院| 欧美日韩精品高清| 国语自产精品视频在线看抢先版结局| 一本一本大道香蕉久在线精品| 久久香蕉国产线看观看网| 国产精品久久久久久久久婷婷| 亚洲第一精品夜夜躁人人爽| 亚洲欧美中文日韩v在线观看| 欧美国产日韩a欧美在线观看| 国产欧美一区二区精品婷婷| 一本色道久久综合亚洲精品婷婷| 久久中文精品| 国产亚洲精品v| 亚洲性夜色噜噜噜7777| 欧美久久久久免费| 在线观看中文字幕亚洲| 欧美在线日韩| 国产精品自在欧美一区| 亚洲视频一二区| 欧美日韩美女一区二区| 亚洲国产一区二区三区在线播 | 99v久久综合狠狠综合久久| 久久综合狠狠| 狠狠入ady亚洲精品经典电影| 午夜精品视频| 久久综合五月| 久久久噜噜噜| 欧美性开放视频| 亚洲国产专区校园欧美| 久久精品99国产精品酒店日本| 国产精品久久久久久久一区探花| 亚洲日本成人网| 欧美电影免费| 91久久久久久国产精品| 狼人天天伊人久久| 亚洲成人在线视频播放| 久久夜精品va视频免费观看| 国产综合在线看| 久久精品一区二区三区四区| 国产日韩欧美综合精品| 欧美在线观看一区| 国产一区二区三区久久精品| 国产一区视频在线观看免费| 亚洲男人第一av网站| 国产精品成人在线| 亚洲一区二区黄色| 国产精品国产三级国产专播精品人| 国产精品99久久久久久人| 欧美日韩精品在线播放| 一区二区三区色| 国产精品福利网| 性欧美大战久久久久久久免费观看| 国产精品a级| 亚洲在线观看视频网站| 国产欧美日韩精品专区| 久久精品99国产精品| 亚洲第一网站| 欧美金8天国| 亚洲视频一区在线观看| 国产精品视频精品视频| 欧美一区二区三区免费视| 国产一区久久久| 美日韩精品免费| 99在线精品观看| 国产精品久久久亚洲一区| 欧美一区二区日韩一区二区| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 午夜精品久久久久久久蜜桃app | 亚洲免费大片| 国产精品久久久一区麻豆最新章节| 亚洲欧美激情四射在线日| 国产日韩欧美在线观看| 久久综合精品国产一区二区三区| 91久久亚洲| 国产精品电影观看| 久久久不卡网国产精品一区| 亚洲成色999久久网站| 欧美日韩精品一区视频| 欧美一区视频| 亚洲国产精品成人久久综合一区| 欧美日韩第一页| 亚欧成人精品| 亚洲国产专区| 国产精品一区=区| 免费高清在线一区| 亚洲一区二区精品视频| 黄色成人av网站| 欧美日韩黄色一区二区| 欧美一区国产二区| 亚洲精品小视频| 国产啪精品视频| 精品1区2区| 欧美日本不卡视频| 一二美女精品欧洲| 国产日本欧美在线观看| 久久亚洲精品欧美| 一本色道久久综合狠狠躁篇的优点| 国产精品一区二区久久国产| 久久躁日日躁aaaaxxxx| 在线中文字幕不卡| 黄页网站一区| 欧美三级电影大全| 久久嫩草精品久久久久| 亚洲特黄一级片| 亚洲电影一级黄| 国产精品永久免费观看| 欧美不卡视频一区| 亚洲欧美在线一区| 亚洲激情网站免费观看| 国产精品久久久久久一区二区三区 | 夜夜嗨av一区二区三区四区| 国内精品久久久久影院优| 在线午夜精品自拍| 一区视频在线| 国产精品日日摸夜夜摸av| 欧美超级免费视 在线| 欧美在线关看| 99精品国产在热久久下载| 狠狠久久综合婷婷不卡| 国产精品女人网站| 欧美日韩国产精品成人| 蜜桃久久av一区| 久久国产色av| 亚洲免费一级电影| 亚洲狼人精品一区二区三区| 一区二区在线视频观看| 国产精品一区二区三区久久| 欧美日韩dvd在线观看| 免费在线一区二区| 久久久久久国产精品mv| 香蕉久久国产| 亚洲一区中文字幕在线观看| 日韩午夜高潮| 亚洲国产天堂久久综合网| 黑人一区二区| 国产亚洲欧美一区二区| 国产精品视频内| 国产精品v欧美精品∨日韩| 欧美日韩hd| 欧美激情第五页| 欧美不卡视频一区发布| 久久伊人一区二区| 久久久久久久性| 欧美中日韩免费视频| 午夜精品久久久久久| 亚洲制服av| 亚洲一区在线看| 亚洲午夜一区二区三区| 亚洲视屏在线播放| 中文av一区特黄| 在线亚洲成人| 亚洲视频免费在线观看| 亚洲图片欧美日产| 亚洲午夜视频在线观看| 亚洲一区二区三区精品在线| 亚洲五月六月| 亚洲综合色噜噜狠狠| 亚洲在线一区二区三区| 销魂美女一区二区三区视频在线| 亚洲欧美大片|