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

原來 WebWorker 還可以做這么酷的事情!

開發(fā) 前端
worker是“第二個(gè)腳本”。我們需要根據(jù)設(shè)置(TypeScript、捆綁器、開發(fā)服務(wù)器),調(diào)整tsconfig、添加指令或使用特定的導(dǎo)入語(yǔ)法。

最近,我看到這樣一件令人驚嘆的藝術(shù)品:

酷斃了,是不是?看著心癢難耐,于是我試著重建,發(fā)現(xiàn)這個(gè)項(xiàng)目的本質(zhì)是——在多個(gè)窗口之間共享狀態(tài)。這個(gè)可以有!

一起來看看我的研究經(jīng)過吧。

首先聲明,我這個(gè)是簡(jiǎn)化版的哈!

我做的第一件事是列出我所知道的在多個(gè)客戶端之間共享信息的所有方法:

服務(wù)器

顯然,擁有服務(wù)器可以直接簡(jiǎn)化問題。但是,由于這個(gè)項(xiàng)目需要在不使用服務(wù)器的情況下實(shí)現(xiàn),所以直接pass這個(gè)選項(xiàng)。

本地存儲(chǔ)

本地存儲(chǔ)本質(zhì)上是瀏覽器鍵值存儲(chǔ),通常用于在瀏覽器會(huì)話之間持久保存信息。雖然本地存儲(chǔ)常用于存儲(chǔ)身份驗(yàn)證令牌或重定向URL,但可以存儲(chǔ)任何可序列化的內(nèi)容。

這里重點(diǎn)要介紹一個(gè)非常有趣的本地存儲(chǔ)API,storage事件——每當(dāng)本地存儲(chǔ)由于同一網(wǎng)站上的另一個(gè)會(huì)話而更改時(shí),就會(huì)觸發(fā)事件。

圖片圖片

我靈機(jī)一動(dòng)試著在本地存儲(chǔ)中存儲(chǔ)每個(gè)窗口的狀態(tài),每當(dāng)有窗口的狀態(tài)改變時(shí),其他窗口就通過storage事件進(jìn)行更新。

對(duì)頭,似乎解決方案就是這個(gè)了。

那么代碼可以解決這個(gè)問題嗎?到底有沒有其他方法呢?答案是:有!

共享worker

在這個(gè)華麗的術(shù)語(yǔ)背后,我們需要先了解WebWorkers的概念。

簡(jiǎn)單來說,worker其實(shí)是在另一個(gè)線程上運(yùn)行的第二個(gè)腳本。雖然因?yàn)榇嬖谟贖TML文檔之外導(dǎo)致worker無權(quán)訪問 DOM,但worker仍然可以與主腳本進(jìn)行通信。

worker主要用于通過處理后臺(tái)作業(yè),例如預(yù)獲取信息或處理不太重要的任務(wù)(如流式日志和輪詢),來卸載主腳本。

圖片圖片

共享worker是一種特殊的WebWorker,它可以與同一腳本的多個(gè)實(shí)例進(jìn)行通信,可以將信息發(fā)送到同一腳本的多個(gè)會(huì)話!

圖片圖片

設(shè)置worker

如前所述,worker是“第二個(gè)腳本”。我們需要根據(jù)設(shè)置(TypeScript、捆綁器、開發(fā)服務(wù)器),調(diào)整tsconfig、添加指令或使用特定的導(dǎo)入語(yǔ)法。

在眾多使用WebWorker的方法中,就我而言,我喜歡使用Vite和TypeScript,所以需要一個(gè)worker.ts文件并將@types/sharedworker安裝為開發(fā)依賴項(xiàng)。

我們可以使用以下語(yǔ)法在主腳本中創(chuàng)建連接:

new SharedWorker(new URL("worker.ts", import.meta.url));

整個(gè)過程就是:

1.識(shí)別每個(gè)窗口

2.跟蹤所有窗口狀態(tài)

3.在窗口改變狀態(tài)時(shí)提醒其他窗口重新繪制

狀態(tài)也是非常簡(jiǎn)單:

type WindowState = {
      screenX: number; // window.screenX
      screenY: number; // window.screenY
      width: number; // window.innerWidth
      height: number; // window.innerHeight
};

當(dāng)然,最關(guān)鍵的信息是window.screenX和window.screenY,因?yàn)樾枰鼈兏嬖V我們窗口相對(duì)于顯示器左上角的位置。

我們還需要提供兩種類型的消息:

1.每當(dāng)有窗口改變狀態(tài),發(fā)布帶有新狀態(tài)的windowStateChangedmessage。

2.Worker需要向所有其他窗口發(fā)送更新,提醒有窗口已發(fā)生更改。Worker還需要發(fā)送包含所有窗口狀態(tài)的syncmessage。

我們的代碼先從平凡的worker開始,就像這樣:

// worker.ts 
    let windows: { windowState: WindowState; id: number; port: MessagePort }[] = [];
 
    onconnect = ({ ports }) => {
      const port = ports[0];
 
      port.onmessage = function (event: MessageEvent<WorkerMessage>) {
        console.log("We'll do something");
      };
    };

我們與SharedWorker的基本連接如下所示。這里我通過基本函數(shù)生成id,并計(jì)算當(dāng)前窗口狀態(tài)。我還對(duì)可以使用的稱為WorkerMessage的Message類型進(jìn)行了輸入:

// main.ts
   import { WorkerMessage } from "./types";
   import {
     generateId,
     getCurrentWindowState,
   } from "./windowState";

   const sharedWorker = new SharedWorker(new URL("worker.ts", import.meta.url));
   let currentWindow = getCurrentWindowState();
   let id = generateId();

一啟動(dòng)應(yīng)用程序,就得提醒worker有新窗口,所以我們要立即發(fā)送消息:

// main.ts 
    sharedWorker.port.postMessage({
      action: "windowStateChanged",
      payload: {
        id,
        newWindow: currentWindow,
      },
    } satisfies WorkerMessage);

我們可以在worker端監(jiān)聽此消息,并相應(yīng)地更改onmessage。這個(gè)流程就是,一旦worker收到windowStateChanged消息,那么意味著要么是有新窗口,需要將其附加到狀態(tài),要么舊窗口已發(fā)生更改。因此需要提醒大家,狀態(tài)已發(fā)生了改變:

// worker.ts
    port.onmessage = function (event: MessageEvent<WorkerMessage>) {
      const msg = event.data;
      switch (msg.action) {
        case "windowStateChanged": {
          const { id, newWindow } = msg.payload;
          const oldWindowIndex = windows.findIndex((w) => w.id === id);
          if (oldWindowIndex !== -1) {
            // old one changed
            windows[oldWindowIndex].windowState = newWindow;
          } else {
            // new window 
            windows.push({ id, windowState: newWindow, port });
          }
          windows.forEach((w) =>
            // send sync here 
          );
          break;
        }
      }
    };

發(fā)送同步需要一些技巧,因?yàn)閜ort屬性無法序列化,所以我將其字符串化再解析回來。

w.port.postMessage({
      action: "sync",
      payload: { allWindows: JSON.parse(JSON.stringify(windows)) },
    } satisfies WorkerMessage);

接下來就是繪圖了!

有趣的部分:繪圖!

復(fù)雜的3D球體就饒了我吧,我只打算在每個(gè)窗口的中心畫一個(gè)圓圈,然后再在球體之間畫一條線意思意思!

我使用HTML Canvas的基本2D上下文進(jìn)行繪制,當(dāng)然你也可以使用其他方式繪制。反正就是畫圓圈,非常簡(jiǎn)單:

const drawCenterCircle = (ctx: CanvasRenderingContext2D, center: Coordinates) => {
      const { x, y } = center;
      ctx.strokeStyle = "#eeeeee";
      ctx.lineWidth = 10;
      ctx.beginPath();
      ctx.arc(x, y, 100, 0, Math.PI * 2, false);
      ctx.stroke();
      ctx.closePath();
    };

至于畫線,就需要做一些數(shù)學(xué)運(yùn)算了——將另一個(gè)窗口中心的相對(duì)位置轉(zhuǎn)換為當(dāng)前窗口上的坐標(biāo)。

首先改變基準(zhǔn)使顯示器具有坐標(biāo),并根據(jù)當(dāng)前窗口screenX/screenY進(jìn)行偏移。

圖片圖片

const baseChange = ({
      currentWindowOffset,
      targetWindowOffset,
      targetPosition,
    }: {
      currentWindowOffset: Coordinates;
      targetWindowOffset: Coordinates;
      targetPosition: Coordinates;
    }) => {
      const monitorCoordinate = {
        x: targetPosition.x + targetWindowOffset.x,
        y: targetPosition.y + targetWindowOffset.y,
      };
 
      const currentWindowCoordinate = {
        x: monitorCoordinate.x - currentWindowOffset.x,
        y: monitorCoordinate.y - currentWindowOffset.y,
      };
 
      return currentWindowCoordinate;
    };

看,同一個(gè)相對(duì)坐標(biāo)系上有兩個(gè)點(diǎn),可以畫線了!

const drawConnectingLine = ({
      ctx,
      hostWindow,
      targetWindow,
    }: {
      ctx: CanvasRenderingContext2D;
      hostWindow: WindowState;
      targetWindow: WindowState;
    }) => {
      ctx.strokeStyle = "#ff0000";
      ctx.lineCap = "round";
      const currentWindowOffset: Coordinates = {
        x: hostWindow.screenX,
        y: hostWindow.screenY,
      };
      const targetWindowOffset: Coordinates = {
        x: targetWindow.screenX,
        y: targetWindow.screenY,
      };
 
      const origin = getWindowCenter(hostWindow);
      const target = getWindowCenter(targetWindow);
 
      const targetWithBaseChange = baseChange({
        currentWindowOffset,
        targetWindowOffset,
        targetPosition: target,
      });
 
      ctx.strokeStyle = "#ff0000";
      ctx.lineCap = "round";
      ctx.beginPath();
      ctx.moveTo(origin.x, origin.y);
      ctx.lineTo(targetWithBaseChange.x, targetWithBaseChange.y);
      ctx.stroke();
      ctx.closePath();
    };

現(xiàn)在,我們只需要對(duì)狀態(tài)變化做出響應(yīng)。

// main.ts
    sharedWorker.port.onmessage = (event: MessageEvent<WorkerMessage>) => {
        const msg = event.data;
        switch (msg.action) {
          case "sync": {
            const windows = msg.payload.allWindows;
            ctx.reset();
            drawMainCircle(ctx, center);
            windows
              .forEach(({ windowState: targetWindow }) => {
                drawConnectingLine({
                  ctx,
                  hostWindow: currentWindow,
                  targetWindow,
                });
              });
          }
        }
    };

最后一步,我們只需要定期檢查窗口是否更改,如果更改則發(fā)送消息即可。

setInterval(() => {
        const newWindow = getCurrentWindowState();
        if (
          didWindowChange({
            newWindow,
            oldWindow: currentWindow,
          })
        ) {
          sharedWorker.port.postMessage({
            action: "windowStateChanged",
            payload: {
              id,
              newWindow,
            },
          } satisfies WorkerMessage);
          currentWindow = newWindow;
        }
      }, 100);

實(shí)際上,我試驗(yàn)了很多次,以便更抽象更有科幻感,但總而言之要點(diǎn)都是一樣的。

如果一切順利,最后我們可以得到這樣炫酷的結(jié)果!

感謝閱讀!

責(zé)任編輯:武曉燕 來源: 前端新世界
相關(guān)推薦

2022-12-06 17:30:04

2017-11-27 12:24:02

命令行代碼指令

2015-08-12 16:32:34

華為/物聯(lián)網(wǎng)

2016-12-02 20:43:28

Android

2017-10-28 23:13:43

微服務(wù)架構(gòu)開發(fā)單體應(yīng)用

2014-11-25 15:02:01

客服系統(tǒng)

2013-09-18 10:44:01

搜狗輸入法詞語(yǔ)

2017-11-06 19:09:45

在線抓娃娃機(jī)

2020-11-04 07:36:06

Redis二進(jìn)制數(shù)據(jù)庫(kù)

2014-10-08 15:00:50

SUSE操作系統(tǒng)云計(jì)算

2023-12-11 13:57:00

RFM模型激勵(lì)機(jī)制

2020-12-28 08:36:30

C語(yǔ)言編程泛型

2010-08-02 13:55:20

2018-10-28 17:54:00

分布式事務(wù)數(shù)據(jù)

2016-03-21 11:09:52

Tableau/大數(shù)據(jù)

2021-11-30 08:04:32

AIIT運(yùn)維

2013-05-28 09:35:14

驅(qū)動(dòng)之家

2021-04-19 05:42:51

Mmap文件系統(tǒng)

2022-08-02 16:37:32

服務(wù)網(wǎng)格網(wǎng)絡(luò)服務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品网站导航| 一本色道久久| 5566中文字幕一区二区电影 | 欧美6一10sex性hd| 国产盗摄视频一区二区三区| 7m第一福利500精品视频| 国产一区二区三区精品在线| 欧美精品影院| 色综合久久久久综合99| 清纯唯美一区二区三区| 国产成人精品免费看视频| 国产日韩欧美三级| 久久久国产精品x99av | 国产一区二区三区日韩| 91精品国产高清自在线| 国产在线观看免费视频软件| 日本韩国欧美超级黄在线观看| 一区二区三区四区不卡在线 | 久久精品人人做人人爽| 国产黄色三级网站| 麻豆精品在线| 色一区在线观看| 大片在线观看网站免费收看| 黄色片在线看| 成人av在线一区二区三区| 成人黄色在线观看| 亚洲大尺度在线观看| 在线精品一区二区| 日韩色av导航| 日本污视频网站| 天堂成人娱乐在线视频免费播放网站 | 久久精品国产精品青草色艺| 国产v在线观看| 理论片日本一区| 国产精品 欧美在线| 国产女同在线观看| 一区在线视频| 久久久久久有精品国产| 一区二区在线观看免费视频| 欧美在线色图| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 新片速递亚洲合集欧美合集| 一级做a爱片久久| 日韩最新中文字幕| 国产传媒在线播放| 18成人在线观看| 在线成人性视频| 免费av网站在线观看| 国产精品天天摸av网| 日韩欧美三级一区二区| 国产色在线 com| 国产日韩欧美激情| 亚洲成人蜜桃| 日本中文字幕在线播放| 国产精品乱人伦中文| 亚洲精品成人三区| 免费看美女视频在线网站 | 欧美老熟妇乱大交xxxxx| 一区二区网站| 欧美精品一区二区精品网| 国产午夜在线一区二区三区| www.爱久久| 日韩av一区在线观看| 亚洲永久精品ww.7491进入| 国产一区2区| 伊人青青综合网站| 中文字幕电影av| 亚洲天堂久久| 欧洲成人在线视频| av手机天堂网| 国产一区二区三区黄视频| 99三级在线| 日韩二区三区| 国产精品欧美综合在线| 日本久久高清视频| а√天堂资源官网在线资源 | 久久伊人成人网| 亚洲国产精品第一区二区| 欧美一区二区三区图| 无码人妻精品一区二区蜜桃色欲| 911久久香蕉国产线看观看| 欧美插天视频在线播放| 国产性一乱一性一伧一色| 中国一区二区三区| 国产区美女在线| 一本色道久久综合亚洲91 | 日本电影在线观看| 亚洲成年人网站在线观看| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 午夜伦理大片视频在线观看| 懂色av中文一区二区三区天美| 一个色的综合| 国产啊啊啊视频在线观看| 懂色av影视一区二区三区| 天天色综合天天色| 成人爽a毛片免费啪啪红桃视频| 欧美精品少妇一区二区三区| 成年女人免费视频| 狠狠色狠狠色综合婷婷tag| 美日韩精品免费视频| 日韩久久中文字幕| 国产suv精品一区二区三区| 日本精品视频一区| 黄网av在线| 欧美精品三级在线观看| 亚洲精品在线视频免费观看| 天天做天天爱天天综合网| 2020欧美日韩在线视频| 国产三级按摩推拿按摩| 国产午夜亚洲精品理论片色戒 | 嫩草在线播放| 一级中文字幕一区二区| 亚洲综合欧美在线| 日韩丝袜视频| 欧美激情按摩在线| 夜夜躁狠狠躁日日躁av| 久久久久久综合| www.xxx麻豆| 国产精品一区免费在线| 在线观看日韩www视频免费| 国产亚洲第一页| 国产在线麻豆精品观看| 久久影院理伦片| 成人影音在线| 日韩精品中文字幕一区| 国产成人av免费在线观看| 日韩avvvv在线播放| 精品国产乱码久久久久久丨区2区| 天天综合天天综合| 一区二区三区在线观看网站| 亚洲欧美激情网| 久久91麻豆精品一区| 91国在线精品国内播放| 亚洲av无码国产精品永久一区| 成人aa视频在线观看| 自拍偷拍99| jizz免费一区二区三区| 亚洲日本欧美日韩高观看| 五月婷婷开心网| zzijzzij亚洲日本少妇熟睡| 国产精品igao激情视频| 国产精品亚洲综合在线观看| 久久精品久久久久| 国产免费高清视频| 亚洲欧美视频在线观看| 热久久久久久久久| 亚洲乱码免费伦视频| 成人免费网站在线观看| 免费av网站在线看| 日韩午夜在线观看视频| 久久艹精品视频| 成人激情视频网站| 欧美大片在线播放| 亚洲素人在线| 国产精品久久久久久久久久尿 | 日韩电视剧在线观看免费网站| 人妻少妇无码精品视频区| 老牛国产精品一区的观看方式| 成人免费网视频| 国产精品实拍| 91精品国产欧美一区二区成人| 国产精品无码久久久久一区二区| 久久精品国产大片免费观看| 国产精品色婷婷视频| 成人免费在线视频网| 欧美精选在线播放| 欧美高清视频一区二区三区| 成人免费高清在线观看| 99999精品视频| 欧美精品一二| 91中文字幕一区| 久久香蕉av| 亚洲欧美日韩中文在线制服| 中文字幕男人天堂| 亚洲女人****多毛耸耸8| 秘密基地免费观看完整版中文| 日韩在线不卡| 91手机在线视频| 免费高潮视频95在线观看网站| 88在线观看91蜜桃国自产| 破处女黄色一级片| 视频一区在线视频| 成年人黄色在线观看| 91九色鹿精品国产综合久久香蕉| 日韩在线观看免费网站 | 精品91免费| 在线成人视屏| 久久精品亚洲国产| 天天色综合久久| 欧美男人的天堂一二区| 日韩网红少妇无码视频香港| 中文字幕乱码亚洲精品一区| 国产情侣久久久久aⅴ免费| 视频在线观看一区二区三区| 日本精品福利视频| 精品久久91| 国产日韩精品推荐| 福利精品一区| 欧美一级免费看| av在线导航| 一本大道亚洲视频| 熟妇高潮一区二区三区| 欧美日本一区二区在线观看| 日韩精品手机在线| 亚洲精品视频在线| 超碰人人人人人人人| 波多野结衣亚洲一区| 亚洲制服中文字幕| 天堂一区二区在线| 国产美女在线一区| 国产精品88久久久久久| 欧美视频观看一区| 久久悠悠精品综合网| 91在线观看免费| 成人免费黄色| 国产成人短视频| 极品av在线| 欧美激情综合色综合啪啪五月| 少妇人妻偷人精品一区二区| 欧美一区三区四区| 亚洲一级在线播放| 欧美视频第二页| www.国产com| 亚洲成在人线免费| 青青草免费av| 亚洲女女做受ⅹxx高潮| 欧美特黄一级片| 国产精品三级电影| 亚洲一级黄色录像| 久久久www免费人成精品| 亚洲av成人无码一二三在线观看| 石原莉奈在线亚洲三区| 国产69精品久久久久999小说| 欧美调教视频| 国产精品日韩欧美一区二区三区| 国产夫妻在线播放| 欧美超级免费视 在线| 免费av在线| 日韩视频第一页| 国产黄a三级三级三级av在线看| 日韩一区二区三区免费看| 一区二区三区精彩视频| 色综合天天综合在线视频| av资源免费观看| 婷婷国产在线综合| 天天做天天爱夜夜爽| 欧美日韩一区免费| 久久99国产综合精品免费| 欧美日韩国产在线播放| 日本午夜视频在线观看| 色综合久久久久综合| 久久久久久无码午夜精品直播| 中文字幕一区二区三区不卡在线| 欧美污在线观看| 国产suv精品一区二区6| 中文字幕在线视频播放| 91在线免费视频观看| 亚洲AV无码国产精品| 久久精品网站免费观看| 波多野结衣av在线观看| 欧美国产日韩在线观看| 日韩在线不卡av| 樱花草国产18久久久久| 久久久精品人妻一区二区三区四| 国产亚洲人成网站| 少妇太紧太爽又黄又硬又爽小说| 成人h动漫精品一区二| 国产中文字幕一区二区| 久久久蜜桃精品| 精品国产大片大片大片| 亚洲精品精品亚洲| 男人的天堂一区二区| 91成人看片片| 精品国产va久久久久久久| 亚洲国产精品va在线观看黑人| 可以免费在线观看的av| 在线免费一区三区| 91资源在线视频| 亚洲精品videossex少妇| 激情小视频在线| 日韩最新免费不卡| 波多野结衣在线高清| 国产成人一区三区| 伊人久久亚洲| 热舞福利精品大尺度视频| 欧美国产偷国产精品三区| 久久天天东北熟女毛茸茸| 亚洲永久免费精品| 热久久久久久久久| 99久久99精品久久久久久 | 国产精品视频首页| 国产欧美一区二区在线播放| 欧美偷拍自拍| 久久av综合网| 美女网站在线免费欧美精品| 四虎成人免费视频| 日本一区二区成人| 69精品久久久| 欧美在线观看视频在线| 午夜精品一区二区三| 国产亚洲视频在线| 国产黄大片在线观看| 国产欧美一区二区白浆黑人| 麻豆一区二区麻豆免费观看| 中文字幕av导航| 香蕉视频成人在线观看| 成人啪啪18免费游戏链接| 久久亚区不卡日本| 欧美成人国产精品高潮| 欧美午夜在线观看| 天堂中文在线观看视频| 美日韩精品免费观看视频| 国产精品久久久久久妇女| 麻豆精品传媒视频| 黄色工厂这里只有精品| 日韩av一卡二卡三卡| 亚洲国产精品高清| 中文字幕视频网站| 亚洲国产精品小视频| 青青草原av在线| 91在线观看网站| 亚洲综合激情在线| 欧美三级午夜理伦三级富婆| 91丨九色丨国产丨porny| 久久免费播放视频| 日韩欧美的一区| av官网在线播放| 成人写真福利网| 国产精品福利在线观看播放| 老熟妇仑乱视频一区二区| 久久网站最新地址| 久久精品视频7| 亚洲人成在线观看| 欧美xx视频| 欧美精品久久久| 久久久精品性| av黄色免费网站| 一本大道av伊人久久综合| 欧美 日韩 国产 在线| 欧美疯狂xxxx大交乱88av| 亚洲免费一区三区| 69精品丰满人妻无码视频a片| 国产精品v日韩精品v欧美精品网站 | 国产毛片在线视频| 久久视频精品在线| 麻豆国产一区二区三区四区| 四虎4hu永久免费入口| 国产呦精品一区二区三区网站| 亚洲精品激情视频| 亚洲一区二区三区国产| 少妇喷水在线观看| 91福利视频网| 九九热爱视频精品视频| 久草精品在线播放| 欧美国产成人精品| 91亚洲国产成人精品一区| 久久国产精彩视频| 91精品啪在线观看国产爱臀| 国产av麻豆mag剧集| 91视频.com| 中文字幕免费播放| 久久不射电影网| 国产精品成人自拍| 欧美性大战久久久久xxx| 国产色综合一区| 91麻豆成人精品国产免费网站| 亚洲色图25p| 免费视频观看成人| 2021狠狠干| 99视频超级精品| www.五月婷婷.com| 久久久www成人免费精品张筱雨| 亚洲天堂免费电影| 日韩欧美在线一区二区| 日本在线不卡视频一二三区| 国产wwwwxxxx| 精品国产一区久久| 欧美精品日日操| 欧美性视频在线播放| 99视频精品全部免费在线| 欧美 亚洲 另类 激情 另类| 欧美另类极品videosbest最新版本| 桃花岛tv亚洲品质| 在线观看日本一区| youjizz国产精品| 国产亚洲欧美日韩高清| 久久亚洲综合国产精品99麻豆精品福利| www.九色在线| 色综合久久av| 韩国欧美国产1区| 日韩免费在线视频观看| 最近中文字幕2019免费| 91精品久久久久久综合五月天| 一区二区国产日产| 成人亚洲一区二区一| 日本一本在线观看| 欧美人交a欧美精品| 欧美理论在线播放| 2025中文字幕| 欧美三级电影精品|