精品欧美一区二区三区在线观看 _久久久久国色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)

这里只有精品丝袜| 有码一区二区三区| 国产精品视频导航| 日本aⅴ在线观看| 88久久精品| 都市激情亚洲色图| 一本久道久久综合| 免费a视频在线观看| 亚洲欧美不卡| 久久夜色精品国产亚洲aⅴ| 亚洲一区二区在线免费| 黑人一区二区三区| 亚洲国产中文字幕在线视频综合| 久久亚洲精品中文字幕冲田杏梨 | 亚洲欧洲中文字幕| 欧美mv日韩mv国产网站app| 97av视频在线观看| 黄色精品免费看| 99久久精品国产麻豆演员表| 国产欧美一区二区白浆黑人| 在线观看免费国产视频| 亚洲国产一成人久久精品| 国产网站欧美日韩免费精品在线观看| 日韩精品在线观看av| 国产粉嫩一区二区三区在线观看| 亚洲作爱视频| 精品国偷自产在线视频99| 人妻无码一区二区三区| 免费欧美网站| 在线播放日韩导航| 免费观看成人在线视频| 欧美另类老肥妇| 亚洲一区二区三区四区五区中文 | 日本人妻丰满熟妇久久久久久| 亚洲免费二区| 亚洲天堂av在线免费| 日本性生活一级片| 欧美另类中文字幕| 91麻豆精品国产91久久久久久| 91免费网站视频| 国产精品视频二区三区| 91丨porny丨中文| 国产精品日韩一区二区| 精品国产av一区二区| 精品一区在线看| 国产精品免费视频久久久| 国产精品suv一区| 国产精品视频| 欧美在线视频免费观看| 国产一级精品视频| 黄色亚洲在线| 久久久久久久久中文字幕| 强乱中文字幕av一区乱码| 欧美日韩一区二区国产| 超碰精品一区二区三区乱码| 欧美肥妇bbwbbw| 亚洲成av人电影| 麻豆国产精品va在线观看不卡 | 日韩在线麻豆| 亚洲电影免费观看高清完整版在线观看| 你真棒插曲来救救我在线观看| 天堂中文在线资| 91丨九色丨尤物| 久久久久久一区| 内衣办公室在线| 国产欧美一二三区| 一区精品在线| 50度灰在线| 亚洲国产欧美日韩另类综合| 日韩国产一级片| 国产不卡网站| 精品婷婷伊人一区三区三| 日本一二区免费| 亚洲性视频在线| 亚洲国产女人aaa毛片在线| 奇米777第四色| 久草成人在线| 久久久av电影| 国产一级中文字幕| 久久久一二三| 国产在线观看精品| 亚洲欧美激情另类| 久久色视频免费观看| 亚洲 国产 欧美一区| 怡红院红怡院欧美aⅴ怡春院| 欧美激情在线免费观看| 波多野结衣三级在线| 青青草视频在线免费直播| 精品美女国产在线| av免费一区二区| 7m精品国产导航在线| 国产亚洲精品日韩| 亚洲国产精品久| 亚洲一区二区三区高清| 成人字幕网zmw| 青青操视频在线| 日韩理论片中文av| 逼特逼视频在线| 电影中文字幕一区二区| 亚洲国产日韩欧美综合久久| 中文字幕av久久爽一区| 欧美婷婷在线| 国产精品视频一区二区高潮| 亚洲国产精品久久久久久6q| 久久久久久久综合狠狠综合| 玖玖精品在线视频| 日本一区二区三区视频在线| 精品国产免费久久| www.4hu95.com四虎| 亚洲看片一区| 147欧美人体大胆444| 国产视频二区在线观看| 亚洲地区一二三色| 在线黄色免费看| 视频精品在线观看| 久久久久久18| 夜夜躁狠狠躁日日躁av| 久久午夜电影网| 日韩视频免费播放| 日韩高清一区| 日韩在线观看免费全| 国产精品视频一区在线观看| 国产成人av影院| ijzzijzzij亚洲大全| 成人免费一区| 亚洲天堂成人在线| www欧美在线| 粉嫩高潮美女一区二区三区 | 欧美在线精品免播放器视频| 国产麻豆免费视频| 中文字幕精品综合| 久久久久久久中文| japanese色系久久精品| 大量国产精品视频| 91亚洲欧美激情| 国产精品久久99| 久久久久国产一区| 国产一区二区三区日韩精品 | 蜜桃视频在线观看播放| 日韩精品一区二区三区在线播放| 国产精品一区二区无码对白| 先锋资源久久| 91青草视频久久| 黄色大片在线播放| 91精品国产综合久久久蜜臀图片| 岛国精品资源网站| 激情综合自拍| 国产一区二区中文字幕免费看| 精品电影在线| 91激情五月电影| 欧美18—19性高清hd4k| 日韩精品亚洲一区| 亚洲高清在线观看一区| 欧美va在线观看| 中文字幕亚洲激情| 一二区在线观看| 亚洲欧美一区二区在线观看| www.色就是色.com| 欧美一区二区三区久久精品茉莉花| 欧美亚洲国产视频小说| 四虎精品在线| 欧美在线视频全部完| 国产馆在线观看| 精品一区二区三区的国产在线播放| 国产精品久久国产三级国电话系列| 青青草娱乐在线| 欧美影片第一页| 日本 欧美 国产| 国产成人激情av| 国产精品无码av在线播放| 丝袜连裤袜欧美激情日韩| 日韩av电影国产| 午夜精品一区| 精品美女在线观看| 青草视频在线观看免费| 欧美高清在线一区二区| 男插女视频网站| 中文日韩在线| 一区二区免费在线观看| 午夜免费欧美电影| 日本久久久久久久久久久| 日本在线观看网站| 精品av综合导航| 999视频在线| 亚洲精品写真福利| 久久久亚洲av波多野结衣| 精品一区二区在线免费观看| 嫩草影院中文字幕| 精品国产美女| 国产91色在线|亚洲| 毛片免费看不卡网站| 久久色免费在线视频| 午夜国产在线视频| 51午夜精品国产| 91精品国产乱码在线观看| 国产精品久久久久久久久久久免费看 | 日韩精品成人一区二区在线| 日本成人性视频| 亚洲天堂日韩在线| 99精彩视频在线观看免费| 成人美女视频| 久久久久久久久久亚洲| 一本一道波多野毛片中文在线 | 密臀av一区二区三区| 欧美激情第10页| 日本在线观看一区二区| 成人自拍在线| 91精品国产综合久久久久久蜜臀| av资源网站在线观看| 日韩精品一区在线| 国产三级理论片| 午夜私人影院久久久久| 自拍偷拍第9页| www.激情成人| 能看毛片的网站| 精品一区二区三区免费毛片爱| 四虎永久免费网站| 免费视频国产一区| 国产一区二区视频在线免费观看| 中文在线а√天堂| 欧美日韩999| 精品美女在线观看视频在线观看| 91精品国产综合久久婷婷香蕉| 朝桐光av在线| 国产精品麻豆视频| 亚洲天堂久久新| caoporm超碰国产精品| 韩国三级丰满少妇高潮| 久久99精品久久久久久| 成人亚洲视频在线观看| 在线免费高清一区二区三区| 免费观看黄色的网站| 97精品在线| 亚洲一二区在线| 欧美日韩性在线观看| 日本一区视频在线播放| 免费看av成人| 欧美在线一区二区三区四区| 牛牛精品成人免费视频| 国产尤物91| 国产精品美女在线观看直播| 俄罗斯精品一区二区| 亚洲日本va午夜在线电影| 91探花福利精品国产自产在线| 2019中文字幕在线电影免费 | 人妻与黑人一区二区三区| 欧美精品久久99| 在线观看日韩一区二区| 91福利精品视频| 做爰无遮挡三级| 精品婷婷伊人一区三区三| 一级特黄特色的免费大片视频| 亚洲精品高清在线观看| 色欲人妻综合网| 亚洲男同性恋视频| 久久久精品人妻一区二区三区四 | 欧美日韩国产一二三| 国产精品露脸视频| 欧美剧情片在线观看| 国产美女明星三级做爰| 欧美电影免费观看完整版| 欧美综合视频在线| 亚洲欧美三级在线| 在线免费观看黄| 欧美成人精品激情在线观看| 在线免费观看a视频| 午夜精品三级视频福利| a日韩av网址| 国产精品最新在线观看| 久久99成人| 久久久久久久久一区| 狠狠综合久久av一区二区蜜桃| 好看的日韩精品视频在线| 午夜精品影视国产一区在线麻豆| 亚洲va码欧洲m码| www.成人网| 欧美日韩电影一区二区| 国产韩日影视精品| www.av蜜桃| 日韩国产高清在线| 日韩欧美色视频| 91女人视频在线观看| 亚洲a∨无码无在线观看| 亚洲在线免费播放| 波多野结衣电车痴汉| 日韩视频中午一区| 日韩电影免费| 久久亚洲欧美日韩精品专区| 91九色在线看| 国产视频观看一区| 欧美久久香蕉| 中国一级黄色录像| 久久午夜激情| 乳色吐息在线观看| 国产亚洲污的网站| 国产一级片视频| 欧美亚洲综合久久| 天天操天天干天天插| www.亚洲天堂| 不卡av影片| 国产不卡一区二区三区在线观看| 免费观看在线一区二区三区| 欧美日韩一区在线视频| 欧美日韩少妇| 中文字幕视频三区| 久久看人人爽人人| av资源吧首页| 欧美日本一区二区| 全部免费毛片在线播放网站| 久久成人精品视频| 成人黄页网站视频| 欧美久久综合性欧美| 欧美激情综合| 午夜视频在线网站| 国产无人区一区二区三区| 亚洲一区欧美在线| 日韩精品一区二区三区在线观看| 色婷婷综合视频| 久久综合免费视频影院| 欧美与亚洲与日本直播| 久久伊人一区| 国产综合色产| 人妻换人妻仑乱| 中文字幕欧美一| 一区二区三区在线免费观看视频| 制服.丝袜.亚洲.另类.中文| 国产区在线视频| 欧美一乱一性一交一视频| 国产精品一线| 免费看毛片的网址| 国产精品影视天天线| 黑人操日本美女| 欧美日韩aaaaaa| 午夜激情视频在线观看| 国产精品吴梦梦| 成人国产精品一级毛片视频| 国产福利一区视频| 国产性天天综合网| 人人草在线观看| 亚洲人成伊人成综合网久久久| 在线看的av网站| 国产精品露脸av在线| 日韩国产专区| 777一区二区| 亚洲日本在线天堂| japanese国产| 欧美国产日韩精品| 哺乳挤奶一区二区三区免费看| 日本一区精品| 日韩中文字幕麻豆| 欧美大波大乳巨大乳| 在线看不卡av| 欧美日本一道| 成人黄色在线播放| 欧美久色视频| 艳妇乳肉亭妇荡乳av| 欧美午夜片欧美片在线观看| 久久国产精品高清一区二区三区| 久久精品在线播放| 看亚洲a级一级毛片| 精品一二三四五区| 91毛片在线观看| 国产成人a v| 久久综合久中文字幕青草| gogo人体一区| 一本久道综合色婷婷五月| 中文字幕av一区二区三区免费看| 国产精品成人免费一区二区视频| 欧美色图免费看| 欧美人xxx| 91精品久久香蕉国产线看观看| 成人免费在线播放| 极品粉嫩美女露脸啪啪| 亚洲高清不卡在线观看| 青青草视频免费在线观看| 国产欧美精品一区二区三区-老狼| 亚洲免费观看高清完整版在线观| 亚洲精品国产suv一区88| 99视频一区二区| 中文字幕有码无码人妻av蜜桃| 国产视频亚洲精品| 欧美日韩伦理一区二区| 国产精品三级一区二区| 91色.com| 国产成人a人亚洲精品无码| 欧美亚洲国产成人精品| 亚洲自拍偷拍网| 免费a级黄色片| 宅男噜噜噜66一区二区66| av在线视屏| 伊人久久av导航| 99精品欧美一区二区三区综合在线| 69av.com| 亚洲欧美在线磁力| 欧美一级片网址| 97在线播放视频| 夜夜操天天操亚洲| 97在线观看免费观看高清 | 成人丝袜视频网| 中文字幕a级片|