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

圖形編輯器開發:實現圖形的復制粘貼

開發 前端
如果只支持粘貼到當前編輯器下,方案很簡單:只需要監聽 Ctrl + C 鍵盤事件深拷貝一份選中圖形對象,然后再監聽 Ctrl + V 事件,將拷貝出來的對象添加到圖形樹的末尾。但通常我們希望可以跨 tab 頁,跨圖紙,跨瀏覽器,甚至從 Web 端復制到桌面端。很明顯,要實現這樣的場景,我們需要操作系統級的支持:剪貼板。我們看看怎么實現通過剪貼板實現圖形的復制粘貼。

大家好,我是前端西瓜哥。

今天這篇文字來講解一下圖形編輯器如何實現圖形的復制粘貼。

粘貼的范圍

首先需要確認一下粘貼的范圍。

如果只支持粘貼到當前編輯器下,方案很簡單:只需要監聽 Ctrl + C 鍵盤事件深拷貝一份選中圖形對象,然后再監聽 Ctrl + V 事件,將拷貝出來的對象添加到圖形樹的末尾。

但通常我們希望可以跨 tab 頁,跨圖紙,跨瀏覽器,甚至從 Web 端復制到桌面端。

很明顯,要實現這樣的場景,我們需要操作系統級的支持:剪貼板

我們看看怎么實現通過剪貼板實現圖形的復制粘貼。

復制邏輯

先是復制邏輯。

復制通常為兩種方式:

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

如下圖:

當調用復制命令時,我們要將 選中的圖形生成序列化快照。

所謂序列化,就是將內存中的對象轉換為可以持久化的數據。最簡單快捷的就是用 JSON.stringify() 序列化為 JSON 字符串。

除了圖形對象 data,我們還要保存一些必要的元信息。

最后我們要保存的信息有:

  • data:選中圖形的數組(只有屬性值)。
  • appVersion:編輯器版本。隨著編輯器的迭代,圖紙存儲結構可能會發生變化,我們需要版本號來做兼容處理。
  • paperId:圖紙 id,用來判斷是否跨圖紙粘貼。跨還是不跨圖紙,粘貼策略有所不同,后面會說明。
/**
 * 生成選中圖形的快照,并保存到操作系統剪貼板中
 */
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),
  });
}

拿到快照信息后,我們會調用 navigator.clipboard.writeText() 方法,將數據保存到操作系統的剪貼板中。

/**
 * 綁定 Ctrl/Cmd + C 的事件響應函數
 */
const copyHandler = () => {
  const snapshot = getSelectedItemsSnapshot();
  if (!snapshot) {
    return;
  }

  // 將序列化結果保存到剪貼板
  navigator.clipboard.writeText(snapshot).then(() => {
    // 這里可以考慮加一個 “復制成功” 彈窗提示
    console.log('copied');
  });
};

hotkeys('cmd+c, ctrl+c', copyHandler);

粘貼

然后就是粘貼了。

粘貼分為右鍵粘貼和快捷鍵粘貼。

右鍵粘貼

這里的右鍵粘貼使用了 clipboard.readText() 方法。因為該方法不是用戶的主動動作,涉及到用戶隱私問題,所以需要用戶授權剪貼板權限才行。

另外,Firefox 瀏覽器直接報錯,不會彈出剪貼板授權彈窗。

這不是個技術問題,因為可以手動修改 Firefox 瀏覽器設置啟用剪貼板授權。它更是一個安全問題,Firefox 不認為用戶能夠正確地授權粘貼板操作,以及開發者不會濫用這個權限收集用戶隱私。

右鍵粘貼因為提供了光標位置,所以我們可以將圖形的位置對上這個位置。

快捷鍵粘貼

前面我們因為主動獲取剪貼板的內容,所以有權限問題。

但如果我們監聽用戶的 “粘貼” 操作,權限就寬松了很多,不需要授權。

因為這是用戶的主動行為,用戶從剪貼板取出了數據交給你,而不是你主動去訪問剪貼板的數據。

const pasteHandler = (e: Event) => {
  const event = e as ClipboardEvent;
  const clipboardData = event.clipboardData;
  if (!clipboardData) {
    return;
  }
  // 拿到粘貼的文本內容
  const pastedData = clipboardData.getData('Text');
  // ...
};

// 監聽 “粘貼” 事件
window.addEventListener('paste', pasteHandler);

如果用戶拒絕授權,我們可以考慮提示用戶 “用 Ctrl + C 的方式粘貼”,或者用用戶上次右鍵粘貼的內容湊數,雖然可能貨不對版,但好歹有個東西。

相同圖紙下右鍵粘貼

快捷鍵粘貼沒有光標操作,所以粘貼圖形的位置需要用另一種方式去處理。

我們需要考慮兩種情況:相同圖紙和跨圖紙。

對于在同一個圖紙下快捷鍵粘貼,圖形復制時在哪里,粘貼也在哪里。

或者你可以給一個小的右下偏移,讓用戶感知到粘貼成功了。我個人不喜歡這個偏移,因為通常我復制,就是為了讓圖形做重復對齊排列的,我還得給它移動回去。

在另一張圖紙下右鍵粘貼

如果是在另一張圖紙下粘貼,我們就不能這么做了。

為什么呢?

舉個例子,假設用戶復制了圖紙 A 中在 (10000, 10000) 坐標的圖形。然后我打開圖紙 B,圖紙 B 此時視口的中心坐標在 (0, 0)。

用戶一粘貼,然后說,誒,粘貼的圖形哪去了?你說我可以讓視口移動到粘貼圖形的位置,那用戶會說,誒,我在哪里,我的其他圖形哪去了?

所以 對于跨圖紙場景,最好的做法是將圖形粘貼到畫布正中心。

代碼實現

代碼邏輯有點多,就不文字敘述了,看代碼里面的注釋吧。

class ClipboardManager {
  private unbindEvents = noop;
  constructor(private editor: Editor) {}

  bindEvents() {
    // Ctrl+C 鍵盤事件響應函數
    const copyHandler = () => {
      this.copy();
    };

    // 粘貼事件響應函數
    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),
    });
  }

  // 在指定坐標位置粘貼內容
  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;
    }

    // 數據格式校驗
    if (
      !(
        pastedData &&
        pastedData.appVersion.startsWith('suika-editor') &&
        pastedData.data
      )
    ) {
      return;
    }

    const editor = this.editor;
    // 將數據解析并添加到圖形樹中
    const pastedGraphs = editor.sceneGraph.addGraphsByStr(pastedData.data);
    if (pastedGraphs.length === 0) {
      return;
    }

    // 添加到歷史記錄(以實現撤銷重做)
    editor.commandManager.pushCommand(
      new AddShapeCommand('pasted graphs', editor, pastedGraphs),
    );
    // 標記粘貼圖形為選中狀態
    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;
    }

    // 遍歷粘貼圖形,根據 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();
  }

  // 銷毀時解綁事件監聽
  destroy() {
    this.unbindEvents();
  }
}

一些優化點

這里補充一些可以優化的點。

前面的實現其實有個用戶體驗不好的地方,就是用戶復制后,在圖形編輯器外粘貼,會粘貼出一堆意義不明的字符串。

最好是用戶粘貼不出任何東西,這個有辦法解決。

之前我們用的是 clipboard.writeText() 方法,給數據指定的是 text/plain 的 MIME 類型。

實際上我們可以用另一個方法  clipboard.write(),該方法可以指定其他的文本相關 MIME 類型,然后將我們真正的數據放到到一些不會被其他軟件解析的角落里。

我們來看看隔壁 Figma 是怎么做的?它將復制的數據設置為 text/html 類型。

我再看看它的 HTML 都是什么內容。

可以看到數據主要保存在兩個 span 元素上,它們都沒有文本內容,所以在文本編輯器中進行標準的粘貼是粘貼不出任何內容的。

但這里 Figma 巧妙地用了一個自定義的 data-metadata 和 data-buffer 去保存真正的數據。這個數據看著像是序列化后的類似 base64 格式的內容。

這樣就能巧妙地防止其他文本編輯器能夠粘貼出內容,自己的編輯器卻會在解析 html 結構時特意去讀這個自定義屬性拿到數據。

代碼實現大概為:

const blob = new Blob(
  [
    `<meta charset="utf-8">
    <span data-suika-meta="${這里是元數據}"></span>
    <span data-suika-data="${這里是主體數據}"><span>`,
  ],
  { type: 'text/html' },
);

navigator.clipboard
  .write([new ClipboardItem({ [blob.type]: blob })])
  .then(() => {
    console.log('copied');
  });

Firefox 目前(2023.08.06)不支持 ClipboardItem,需要 document.execCommand('copy') 的舊方法來兼容。

如果要用 text/html 這種方式,還要做多幾個工作:

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

然后就是粘貼文字、圖形的情況,這時我們就不能用 clipboard.writeText(),要用 clipboard.write() 了。

結尾

總結一下圖形編輯器的圖形復制粘貼的邏輯。

在復制時,要將選中圖形進行序列化保存到剪貼板。

粘貼的場景就比較多了。粘貼時需要反序列化解析數據,并創建對象添加到圖形樹上。

粘貼要注意權限問題,快捷鍵粘貼權限比較寬松,不需要用戶授權;右鍵粘貼則因為是開發者的主動行為,所以需要授權,如果用戶不授權,可以考慮提示用戶用快捷鍵粘貼的方式,或粘貼上一次快捷鍵粘貼的內容。

右鍵粘貼時需要將圖形粘貼到光標位置上。快捷鍵粘貼時則需要考慮是否跨圖紙,如果是相同圖紙,原地粘貼即可;如果是另一張圖紙,則粘貼到視口正中心。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2023-10-19 10:12:34

圖形編輯器開發縮放圖形

2023-09-07 08:24:35

圖形編輯器開發繪制圖形工具

2023-08-31 11:32:57

圖形編輯器contain

2023-04-07 08:02:30

圖形編輯器對齊功能

2023-02-01 09:21:59

圖形編輯器標尺

2023-04-10 08:45:44

圖形編輯器排列移動功能

2023-10-08 08:11:40

圖形編輯器快捷鍵操作

2024-01-08 08:30:05

光標圖形編輯器開發游標

2023-09-11 09:02:31

圖形編輯器模塊間的通信

2023-01-18 08:30:40

圖形編輯器元素

2023-07-31 08:46:07

圖形編輯器圖形自動對齊

2023-10-10 16:04:30

圖形編輯器格式轉換

2023-08-28 08:10:50

Hex圖形編輯器

2023-02-02 14:07:00

圖形編輯器Canvas

2023-02-09 07:02:30

圖形編輯器修改圖形

2023-02-06 16:59:57

Canvas編輯器

2023-06-12 08:22:56

圖形編輯器工具

2023-07-07 13:56:01

圖形編輯器畫布縮放

2024-01-03 08:43:17

圖形編輯器旋轉控制點縮放控制點

2023-10-20 08:02:25

圖形編輯器前端
點贊
收藏

51CTO技術棧公眾號

狠狠v欧美v日韩v亚洲ⅴ| 卡一精品卡二卡三网站乱码| 国产日产欧美一区| 国产在线久久久| 亚洲一区电影在线观看| 亚洲18在线| 亚洲一区二区三区在线播放| 久久亚洲午夜电影| 一区精品在线观看| 中文字幕亚洲精品乱码| 亚洲黄页视频免费观看| 福利在线一区二区三区| 黄色一级大片在线免费看产| 国产成人免费视频网站| 日韩av免费看| 精品国产乱码久久久久久鸭王1| 国产精品22p| 欧美亚洲综合色| 国内少妇毛片视频| 国产黄色片在线播放| 国产乱码精品一品二品| 青草青草久热精品视频在线网站| 免费在线观看a级片| 日韩深夜影院| 日韩欧美一级二级三级| 一区二区三区视频在线观看免费| 色操视频在线| 欧美激情综合五月色丁香小说| 成人资源视频网站免费| 色婷婷久久综合中文久久蜜桃av| 亚洲日本视频| 久久艳片www.17c.com| 免费看黄色的视频| 福利在线一区| 日韩欧美在线观看一区二区三区| 91蝌蚪视频在线观看| 98色花堂精品视频在线观看| 亚洲人妖av一区二区| 老司机精品福利在线观看| 精品毛片在线观看| 美女视频一区在线观看| 日韩美女视频免费在线观看| 日本中文字幕免费| 欧美fxxxxxx另类| 尤物yw午夜国产精品视频明星| 女同毛片一区二区三区| 大伊香蕉精品在线品播放| 欧美精品18+| 99热这里只有精品在线播放| 欧美电影网址| 色呦呦一区二区三区| 国产欧美日韩网站| av影片在线| 亚洲国产精品精华液网站| 亚洲天堂第一区| 日本精品在线| 亚洲日本韩国一区| 4444在线观看| 免费影视亚洲| 亚洲成人av中文| 男人的天堂狠狠干| 波多野在线观看| 无码av中文一区二区三区桃花岛| 欧美一区二区激情| 3344国产永久在线观看视频| 夜夜嗨av一区二区三区四季av | 免费成人三级| 亚洲国产精彩中文乱码av| 精品伦一区二区三区| xxxx日韩| 日韩av在线电影网| theav精尽人亡av| re久久精品视频| 精品国产一区二区在线| 全网免费在线播放视频入口| 欧美午夜免费影院| 久久99热精品| 国产精品视频免费播放| 日韩精品电影在线| 国产日本欧美在线观看| www.黄色片| av电影一区二区| 日本不卡二区| 国产在线高清理伦片a| 一区二区欧美视频| 欧美丰满熟妇bbbbbb百度| 婷婷激情一区| 日韩欧美亚洲国产另类| 99久久人妻精品免费二区| 国内黄色精品| 久热爱精品视频线路一| 日韩精品乱码久久久久久| 久久一区二区三区超碰国产精品| 国产日产久久高清欧美一区| 丰满肉嫩西川结衣av| 久久久久久久久久看片| 五月天av影院| 在线手机中文字幕| 在线播放欧美女士性生活| 亚洲国产精品狼友在线观看| 激情综合网站| 久久久久女教师免费一区| 69视频免费看| 国产成人免费视频精品含羞草妖精| 久久精品日韩| 欧洲日本在线| 精品色蜜蜜精品视频在线观看| 日本三级黄色网址| 欧亚精品一区| 欧美成人精品三级在线观看| 亚洲成人av影片| 国产精选一区二区三区| 日本一区二区三区视频免费看| 26uuu亚洲电影在线观看| 色综合色综合色综合色综合色综合| 欧美激情第一区| 西野翔中文久久精品字幕| xxxxxxxxx欧美| 一级做a爰片久久毛片| 国产高清精品网站| 一区二区免费在线观看| 一个人www视频在线免费观看| 欧美一区午夜视频在线观看| 国产伦精品一区二区三区视频女| 最新国产拍偷乱拍精品| 91视频免费在线| 成年人在线看| 色综合视频一区二区三区高清| 天天躁日日躁狠狠躁av麻豆男男| 91精品一区二区三区综合在线爱| 国产精品999999| 天天av综合网| 亚洲成人激情综合网| 制服下的诱惑暮生| 91精品电影| 国产日韩欧美日韩大片| 黄色大片在线看| 欧美色另类天堂2015| 国产婷婷在线观看| 你懂的视频一区二区| 91精品久久久久久| 生活片a∨在线观看| 在线精品视频免费播放| 中文字幕在线观看的网站| 精品成人久久| 成人自拍偷拍| jizz一区二区三区| 在线播放91灌醉迷j高跟美女 | 精品72久久久久中文字幕| 久久免费在线观看| xxxx国产精品| 亚洲欧美经典视频| 在线免费看污网站| 色综合蜜月久久综合网| 国产精品狼人色视频一区| 每日更新av在线播放| 欧美视频裸体精品| 性久久久久久久久久| 国产精品久久久久毛片大屁完整版 | 国产麻豆精品久久一二三| 在线播放 亚洲| 亚洲日本免费电影| 美女福利精品视频| 精品国自产在线观看| 亚洲免费视频成人| 无码人妻一区二区三区一| 国内精品99| 国产视频一区二区三区四区| 极品在线视频| 亚洲偷欧美偷国内偷| 中文字幕免费观看视频| 自拍偷拍国产亚洲| www日本在线观看| 亚洲精品系列| 欧美日韩一区二区三区在线观看免| 超碰aⅴ人人做人人爽欧美| 国产亚洲欧洲高清| 国产精品欧美久久久久天天影视| 一区二区三区美女视频| 性欧美18—19sex性高清| 久久国产精品亚洲77777| 神马影院一区二区三区| 国产剧情一区二区在线观看| 久久久久久久成人| 免费在线国产| 4hu四虎永久在线影院成人| 久视频在线观看| 久久―日本道色综合久久 | 国产综合色精品一区二区三区| 中国女人做爰视频| 天堂av一区二区三区在线播放| 国产精品国产三级国产aⅴ9色| 欧美激情二区| 亚洲精品不卡在线| 中文字幕无线码一区| 一区二区三区四区不卡视频| 30一40一50老女人毛片| 国产曰批免费观看久久久| 日日摸日日碰夜夜爽无码| av在线不卡免费观看| 成人在线视频电影| 国产成人精品一区二区三区视频 | 韩国女主播一区二区| 日韩在线小视频| 色欲av伊人久久大香线蕉影院| 欧美性生交片4| 久久久久久久久久久网| 国产欧美日本一区视频| 苍井空张开腿实干12次| 视频在线在亚洲| 成人av在线不卡| 俺要去色综合狠狠| 国产伦理一区二区三区| 欧美性生活一级| 欧美亚洲国产日韩2020| a在线免费观看| 在线日韩欧美视频| 日韩一级片免费在线观看| 欧美日韩aaa| 久久久久女人精品毛片九一| 一区二区在线观看av| 能直接看的av| 91美女视频网站| 亚洲妇女无套内射精| 奇米一区二区三区av| 狠狠干 狠狠操| 午夜精品影院| 天天综合中文字幕| 欧美精选视频在线观看| 久久亚洲免费| 天天躁日日躁成人字幕aⅴ| 成人在线观看视频网站| 日韩欧美精品电影| 欧美一级免费视频| 国产三线在线| 欧美精品一区三区| 色的视频在线免费看| 亚洲色图色老头| 青青草免费观看免费视频在线| 精品久久一二三区| 亚洲精品国产精品乱码不卡| 51精品秘密在线观看| 91禁在线观看| 欧美丝袜第三区| 在线免费黄色av| 欧美日韩精品在线| 成人毛片18女人毛片| 香蕉成人伊视频在线观看| 精品人妻在线播放| 亚洲最大成人网4388xx| 久久激情免费视频| 亚洲一区av在线| 久久精品久久精品久久| 亚洲午夜久久久久| 久久国产在线观看| 亚洲国产一区二区三区青草影视| 九九热精品免费视频| 一区二区三区av电影 | 亚洲视频福利| 大荫蒂性生交片| 亚洲午夜av| 缅甸午夜性猛交xxxx| 国产精品久久久久毛片大屁完整版| 国产一区二区网| 午夜在线精品| 91淫黄看大片| 国内成人免费视频| 成人在线短视频| 成人午夜免费电影| 三级视频网站在线观看| 91小视频免费观看| www.av天天| 国产精品久久久久永久免费观看| 日本不卡一二区| 亚洲综合久久av| 国产精品美女久久久久av爽| 欧美在线你懂得| 国产乱淫片视频| 亚洲第一区中文99精品| 国产一区二区三区福利| 精品国产自在精品国产浪潮| 在线三级电影| 538国产精品一区二区免费视频| 欧美亚洲韩国| 成人激情av在线| 国产精品网在线观看| 欧美一区二区三区成人久久片| jiujiure精品视频播放| 777久久精品一区二区三区无码 | 在线性视频日韩欧美| 国产成人l区| 97色在线观看免费视频| 亚洲综合在线电影| 成人黄色免费看| 九九热hot精品视频在线播放| 久久精品二区| 99成人在线视频| 免费看欧美黑人毛片| 日韩专区一卡二卡| 性生交大片免费看l| 久久午夜老司机| 国产十六处破外女视频| 色综合色综合色综合色综合色综合 | 亚洲国产高清一区二区三区| 日本男人操女人| 国产在线视频一区二区| 中文字幕一区二区久久人妻网站| 国产精品久久免费看| 日本在线视频免费| 欧美色综合网站| 日本精品一二区| www.日韩.com| 成人免费无遮挡| 北条麻妃高清一区| 国产午夜一区| 日韩精品综合在线| 免费成人av在线播放| 网站免费在线观看| 自拍偷拍亚洲激情| 免费黄色一级大片| 日韩精品亚洲元码| av在线播放国产| 国产精品综合不卡av| 国产精品对白久久久久粗| 综合网五月天| 日本人妖一区二区| 极品粉嫩小仙女高潮喷水久久| 亚洲乱码国产乱码精品精98午夜| 亚洲av无码乱码国产精品fc2| 亚洲精品久久久久国产| 久久99亚洲网美利坚合众国| 国产在线拍偷自揄拍精品| 青青草原综合久久大伊人精品| 成人综合视频在线| 不卡一二三区首页| 久久久精品国产sm调教网站| 7777精品伊人久久久大香线蕉完整版| 国产一区电影| 国产精品美女在线观看| 精品在线99| 日韩av在线综合| 久久精品综合网| 国产中文字幕视频| 精品视频—区二区三区免费| 波多野结衣在线高清| http;//www.99re视频| 欧美成人日本| 无码国产精品一区二区高潮| 亚洲人成亚洲人成在线观看图片| ,一级淫片a看免费| www日韩中文字幕在线看| 日韩三区四区| 中文字幕免费在线不卡| 激情欧美一区二区三区在线观看| 欧美乱大交做爰xxxⅹ小说| 欧美午夜一区二区三区| 中文字幕在线视频区| 国产精品青草久久久久福利99| 欧美偷拍自拍| 亚洲天堂网一区| ●精品国产综合乱码久久久久| 国产精品爽爽久久久久久| 久久香蕉频线观| 日韩精品三级| 精品国产av无码一区二区三区| 不卡av在线免费观看| 亚洲黄色一区二区| 亚洲久久久久久久久久久| 色是在线视频| 日本在线高清视频一区| 麻豆91精品91久久久的内涵| 波多野结衣家庭教师| 精品国产成人系列| 青青青免费在线视频| 欧美在线激情| 免费一级片91| 欧美人妻精品一区二区免费看| 日韩欧美第一区| 看黄在线观看| 日韩欧美第二区在线观看| 美女免费视频一区| 加勒比婷婷色综合久久| 日韩一级完整毛片| 麻豆视频在线看| 亚洲精品日韩精品| 国内精品写真在线观看| 国产系列精品av| 一区二区三区久久精品| 亚洲欧洲专区| 成人av一级片| 中文字幕制服丝袜一区二区三区| 高h放荡受浪受bl| 国产精品www色诱视频| 欧美1区2区视频| 魔女鞋交玉足榨精调教| 91 com成人网| 久草在线资源福利站| 亚洲五月六月| caoporen国产精品视频| 一二三区在线播放|