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

全網瘋傳的前端量子糾纏效果,源碼來了!

開發 前端
作者使用 window.screenLeft、window.screenTop、window.innerWidth和 window.innerHeight 這些屬性來計算立方體的位置和大小信息,通過 localstorage 來在不同窗口之間共享不同的位置信息。

昨天,很多群里都在瘋傳一個視頻,視頻演示了純前端實現的“量子糾纏”效果,不少前端er表示:“前端白學了”。

圖片圖片

視頻作者昨晚開源一個簡化版的實現源碼(截止發文,該項目在 Github 上已獲得超過 1k Star),本文就來看看他是怎么實現的!

簡化版

根據作者的描述,該項目是使用 three.js 和 localStorage 實現的在同一源上設置跨窗口的 3D 場景。

圖片圖片

雖然沒有原視頻那么炫酷,但基本原理應該差不多。

源碼包含多個文件,最主要的文件如下:

  • index.html
  • main.js:主文件
  • WindowManager.js:窗口管理

在線體驗:https://bgstaal.github.io/multipleWindow3dScene/

源碼

index.html 文件中引入了 three.js 的壓縮包,以及main.js:

<!DOCTYPE html>
<html lang="en">
  <head>
  	<title>3d example using three.js and multiple windows</title>
  	<script type="text/javascript" src="./three.r124.min.js"></script>
  	<style type="text/css">
  		
  		*
  		{
  			margin: 0;
  			padding: 0;
  		}
  
  	</style>
  </head>
  <body>
  	
  	<script type="module" src="./main.js"></script>
  </body>
</html>

這沒啥可說的,下面就來看看 main.js 中都寫了點啥。代碼如下:

import WindowManager from './WindowManager.js'

const t = THREE;
let camera, scene, renderer, world;
let near, far;
let pixR = window.devicePixelRatio ? window.devicePixelRatio : 1;
let cubes = [];
let sceneOffsetTarget = {x: 0, y: 0};
let sceneOffset = {x: 0, y: 0};

let today = new Date();
today.setHours(0);
today.setMinutes(0);
today.setSeconds(0);
today.setMilliseconds(0);
today = today.getTime();

let internalTime = getTime();
let windowManager;
let initialized = false;

// // 獲取從一天開始以來的秒數(以便所有窗口使用相同的時間)
function getTime () {
	return (new Date().getTime() - today) / 1000.0;
}

if (new URLSearchParams(window.location.search).get("clear")) {
	localStorage.clear();
}
else {	
	// 在某些瀏覽器中避免在實際點擊URL之前預加載頁面內容
	document.addEventListener("visibilitychange", () => {
		if (document.visibilityState != 'hidden' && !initialized) {
			init();
		}
	});
  // 確保在窗口完全加載后,只有在頁面可見時才執行初始化邏輯
	window.onload = () => {
		if (document.visibilityState != 'hidden') {
			init();
		}
	};

  // 初始化操作
	function init () {
		initialized = true;

		// 短時間內window.offsetX屬性返回的值可能不準確,需要添加一個短暫的延遲,等待一段時間后再執行相關操作。
		setTimeout(() => {
			setupScene();
			setupWindowManager();
			resize();
			updateWindowShape(false);
			render();
			window.addEventListener('resize', resize);
		}, 500)	
	}

  // 設置場景相關的配置
	function setupScene () {
		camera = new t.OrthographicCamera(0, 0, window.innerWidth, window.innerHeight, -10000, 10000);
		
		camera.position.z = 2.5;
		near = camera.position.z - .5;
		far = camera.position.z + 0.5;

		scene = new t.Scene();
		scene.background = new t.Color(0.0);
		scene.add( camera );

		renderer = new t.WebGLRenderer({antialias: true, depthBuffer: true});
		renderer.setPixelRatio(pixR);
	    
	  	world = new t.Object3D();
		scene.add(world);

		renderer.domElement.setAttribute("id", "scene");
		document.body.appendChild( renderer.domElement );
	}

  // 設置窗口管理器的相關配置
	function setupWindowManager () {
		windowManager = new WindowManager();
		windowManager.setWinShapeChangeCallback(updateWindowShape);
		windowManager.setWinChangeCallback(windowsUpdated);

		let metaData = {foo: "bar"};

		// 初始化窗口管理器(windowmanager)并將當前窗口添加到窗口池中。
		windowManager.init(metaData);

		windowsUpdated();
	}

	function windowsUpdated () {
		updateNumberOfCubes();
	}

	function updateNumberOfCubes () {
		let wins = windowManager.getWindows();

		cubes.forEach((c) => {
			world.remove(c);
		})

		cubes = [];

		for (let i = 0; i < wins.length; i++) {
			let win = wins[i];

			let c = new t.Color();
			c.setHSL(i * .1, 1.0, .5);

			let s = 100 + i * 50;
			let cube = new t.Mesh(new t.BoxGeometry(s, s, s), new t.MeshBasicMaterial({color: c , wireframe: true}));
			cube.position.x = win.shape.x + (win.shape.w * .5);
			cube.position.y = win.shape.y + (win.shape.h * .5);

			world.add(cube);
			cubes.push(cube);
		}
	}

	function updateWindowShape (easing = true) {
		sceneOffsetTarget = {x: -window.screenX, y: -window.screenY};
		if (!easing) sceneOffset = sceneOffsetTarget;
	}


	function render () {
		let t = getTime();

		windowManager.update();

		// 根據當前位置和新位置之間的偏移量以及一個平滑系數來計算出窗口的新位置
		let falloff = .05;
		sceneOffset.x = sceneOffset.x + ((sceneOffsetTarget.x - sceneOffset.x) * falloff);
		sceneOffset.y = sceneOffset.y + ((sceneOffsetTarget.y - sceneOffset.y) * falloff);

		world.position.x = sceneOffset.x;
		world.position.y = sceneOffset.y;

		let wins = windowManager.getWindows();


		// 遍歷立方體對象,并根據當前窗口位置的變化更新它們的位置。
		for (let i = 0; i < cubes.length; i++) {
			let cube = cubes[i];
			let win = wins[i];
			let _t = t;// + i * .2;

			let posTarget = {x: win.shape.x + (win.shape.w * .5), y: win.shape.y + (win.shape.h * .5)}

			cube.position.x = cube.position.x + (posTarget.x - cube.position.x) * falloff;
			cube.position.y = cube.position.y + (posTarget.y - cube.position.y) * falloff;
			cube.rotation.x = _t * .5;
			cube.rotation.y = _t * .3;
		};

		renderer.render(scene, camera);
		requestAnimationFrame(render);
	}


	// 調整渲染器大小以適合窗口大小
	function resize () {
		let width = window.innerWidth;
		let height = window.innerHeight
		
		camera = new t.OrthographicCamera(0, width, 0, height, -10000, 10000);
		camera.updateProjectionMatrix();
		renderer.setSize( width, height );
	}
}

這段代碼主要實現以下幾點:

  • 初始化場景和渲染器:在 setupScene 函數中,設置了一個正交相機、場景和渲染器,并將渲染器的 DOM 元素添加到頁面中。
  • 初始化窗口管理器:在 setupWindowManager 函數中,創建了一個窗口管理器實例,并初始化了窗口并添加到窗口池中。
  • 更新立方體數量和位置:通過 updateNumberOfCubes 函數,根據窗口管理器中窗口的數量和位置信息,動態創建立方體并根據窗口位置更新其在場景中的位置。
  • 渲染循環:在 render 函數中,使用 requestAnimationFrame 不斷循環渲染場景,并根據窗口管理器中窗口的位置更新立方體的位置和旋轉。
  • 響應窗口大小變化:通過 resize 函數,在窗口大小變化時重新設置相機的寬高比和渲染器的大小,以適應新的窗口尺寸。

接下來看看最核心的實現:WindowManager,代碼如下:

class WindowManager {
	#windows;
	#count;
	#id;
	#winData;
	#winShapeChangeCallback;
	#winChangeCallback;
	
	constructor () {
		let that = this;

		// 監聽 localStorage 是否被其他窗口更改
		addEventListener("storage", (event) => {
			if (event.key == "windows") {
				let newWindows = JSON.parse(event.newValue);
				let winChange = that.#didWindowsChange(that.#windows, newWindows);

				that.#windows = newWindows;

				if (winChange) {
					if (that.#winChangeCallback) that.#winChangeCallback();
				}
			}
		});

		// 監聽當前窗口是否即將關閉
		window.addEventListener('beforeunload', function (e) {
			let index = that.getWindowIndexFromId(that.#id);

			// 從窗口列表中移除當前窗口并更新 localStorage
			that.#windows.splice(index, 1);
			that.updateWindowsLocalStorage();
		});
	}

	// 檢查窗口列表是否有變化
	#didWindowsChange (pWins, nWins) {
		if (pWins.length != nWins.length) {
			return true;
		}
		else {
			let c = false;

			for (let i = 0; i < pWins.length; i++) {
				if (pWins[i].id != nWins[i].id) c = true;
			}

			return c;
		}
	}

	// 初始化當前窗口(添加元數據以將自定義數據存儲在每個窗口實例中)
	init (metaData) {
		this.#windows = JSON.parse(localStorage.getItem("windows")) || [];
		this.#count= localStorage.getItem("count") || 0;
		this.#count++;

		this.#id = this.#count;
		let shape = this.getWinShape();
		this.#winData = {id: this.#id, shape: shape, metaData: metaData};
		this.#windows.push(this.#winData);

		localStorage.setItem("count", this.#count);
		this.updateWindowsLocalStorage();
	}

	getWinShape () {
		let shape = {x: window.screenLeft, y: window.screenTop, w: window.innerWidth, h: window.innerHeight};
		return shape;
	}

	getWindowIndexFromId (id) {
		let index = -1;

		for (let i = 0; i < this.#windows.length; i++) {
			if (this.#windows[i].id == id) index = i;
		}

		return index;
	}

	updateWindowsLocalStorage () {
		localStorage.setItem("windows", JSON.stringify(this.#windows));
	}

	update () {
		let winShape = this.getWinShape();
    
		if (winShape.x != this.#winData.shape.x ||
			winShape.y != this.#winData.shape.y ||
			winShape.w != this.#winData.shape.w ||
			winShape.h != this.#winData.shape.h) {
			
			this.#winData.shape = winShape;

			let index = this.getWindowIndexFromId(this.#id);
			this.#windows[index].shape = winShape;

			if (this.#winShapeChangeCallback) this.#winShapeChangeCallback();
			this.updateWindowsLocalStorage();
		}
	}

	setWinShapeChangeCallback (callback) {
		this.#winShapeChangeCallback = callback;
	}

	setWinChangeCallback (callback) {
		this.#winChangeCallback = callback;
	}

	getWindows () {
		return this.#windows;
	}

	getThisWindowData () {
		return this.#winData;
	}

	getThisWindowID () {
		return this.#id;
	}
}

export default WindowManager;

這段代碼定義了一個 WindowManager 類,用于管理窗口的創建、更新和刪除等操作,并將其作為模塊導出。

該類包含以下私有屬性:

  • #windows: 存儲所有窗口的數組。
  • #count: 記錄窗口的數量。
  • #id: 當前窗口的唯一標識符。
  • #winData: 當前窗口的元數據,包括窗口的形狀、自定義數據等。
  • #winShapeChangeCallback: 當窗口形狀發生變化時調用的回調函數。
  • #winChangeCallback: 當窗口列表發生變化時調用的回調函數。

該類包含以下公共方法:

  • init(metaData): 初始化當前窗口,并添加到窗口列表中。
  • getWindows(): 獲取所有窗口的數組。
  • getThisWindowData(): 獲取當前窗口的元數據。
  • getThisWindowID(): 獲取當前窗口的標識符。
  • setWinShapeChangeCallback(callback): 設置窗口形狀變化時的回調函數。
  • setWinChangeCallback(callback): 設置窗口列表變化時的回調函數。
  • update(): 更新當前窗口的形狀信息,并將更新后的窗口列表存儲到本地存儲中。

可以看到,作者使用 window.screenLeft、window.screenTop、window.innerWidth和 window.innerHeight 這些屬性來計算立方體的位置和大小信息,通過 localstorage 來在不同窗口之間共享不同的位置信息。

當新增一個窗口時,就將其保存到 localstorage 中,每個窗口使用唯一的 id 進行標記,并儲存立方體的位置和大小信息。不同瀏覽器窗口都可以獲得所有的窗口信息,以確保實時更新。

圖片圖片

當窗口的位置,即screenTop、screenLeft 發生變化時,就更新立方體。

這里就不再詳細解釋了,可以查看完整源碼:https://github.com/bgstaal/multipleWindow3dScene

責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2023-11-24 08:00:42

量子糾纏屏幕坐標系

2017-08-01 15:39:34

2021-01-08 10:25:51

編程面試項目

2024-09-11 14:48:00

2019-01-23 17:21:11

量子芯片網絡

2016-04-01 09:33:56

阿里云量子計算

2018-03-12 06:51:05

量子計算量子糾纏傳統計算機

2018-11-09 09:15:14

2018-04-25 10:45:07

量子存儲

2025-03-31 09:27:03

2020-04-24 13:03:10

工具開源黑科技

2021-01-14 09:34:35

量子量子網絡量子通信

2021-11-26 10:12:10

量子AI計算機

2018-10-10 13:40:15

量子芯片超算

2022-02-11 15:30:55

量子科學技術

2025-07-31 16:04:23

GPT-5GPTdemo

2023-12-18 15:08:00

GPTOpenAI泄露

2020-01-18 15:16:11

量子芯片網絡

2022-01-25 15:27:08

麻省理工計算機量子

2023-04-27 15:34:53

量子研究
點贊
收藏

51CTO技術棧公眾號

免费v片在线观看| 亚洲奶汁xxxx哺乳期| 日韩精品中文字幕第1页| 制服丝袜成人动漫| 久久人人爽人人爽人人av| 亚洲欧美自偷自拍| 久久99国产精品久久99| 久久久亚洲国产天美传媒修理工| 四虎影成人精品a片| 视频欧美精品| 福利微拍一区二区| 91制片厂免费观看| 色吊丝在线永久观看最新版本| 看片网站欧美日韩| 5566日本婷婷色中文字幕97| 日韩成人短视频| 国产欧美日韩在线一区二区| 日韩精品中文字幕一区| 美女一区二区三区视频| 国产盗摄在线视频网站| 亚洲欧洲精品天堂一级| 欧美成人在线免费观看| 亚洲第一天堂影院| 久久精品国产成人一区二区三区| 69**夜色精品国产69乱| 国产大学生自拍| 欧美系列电影免费观看| 亚洲国产精品国自产拍av秋霞| 三上悠亚av一区二区三区| 在线天堂新版最新版在线8| 亚洲色图在线播放| 亚洲女人毛片| 国产视频精品久久| 99国产精品久久久久久久久久| 亚洲中国色老太| 在线观看中文字幕2021| 媚黑女一区二区| 国外视频精品毛片| 九九免费精品视频| 婷婷综合久久| www.欧美精品一二三区| 人妻一区二区视频| 久久99精品久久久久久园产越南| 亚洲福利视频网| 麻豆免费在线观看视频| 麻豆精品在线| 欧美一区二区三区婷婷月色| 国产一级片自拍| 日韩精品三区| 91久久一区二区| 人妻内射一区二区在线视频 | 日韩免费一级视频| 爱情岛亚洲播放路线| 亚洲国产精品人人做人人爽| 久久免费一级片| 伊人福利在线| 亚洲国产日韩a在线播放性色| 日本福利视频在线观看| 亚洲欧美成人影院| 亚洲在线视频一区| 国产一区二区三区小说| 阿v视频在线| 精品久久久国产| 不卡影院一区二区| 成人综合网站| 91精品欧美久久久久久动漫| 亚洲三级在线视频| 国产伦精品一区二区三区免费优势| 精品日韩一区二区三区| 国产精品九九视频| 妖精视频一区二区三区| 最近2019中文字幕在线高清| 久久嫩草捆绑紧缚| 欧美亚洲不卡| 78色国产精品| 中文字幕在线日亚洲9| 精品一区二区三区的国产在线播放| 91嫩草在线视频| 国产成人自拍一区| 99精品欧美一区二区三区综合在线| 欧美日韩亚洲在线| 蜜桃视频在线观看www社区| 国产精品进线69影院| 日本免费黄色小视频| 老司机深夜福利在线观看| 欧洲一区二区三区在线| 一级片黄色免费| 欧美wwwwww| 色偷偷av一区二区三区| 久久精品国产亚洲AV无码男同| 亚洲欧美日本视频在线观看| 国产精品偷伦视频免费观看国产 | 国产一区二区三区观看| 国产精品日韩一区二区| 色资源在线观看| 国产精品久久久久影院| 国产高清av在线播放| 国产精品久久亚洲不卡| 日韩精品一区二区三区四区| 性欧美成人播放77777| 99tv成人| 日韩av免费看网站| a级片在线视频| 久久久国产午夜精品 | 免费黄色在线网址| 国产综合精品| 国产精品三级网站| 少妇喷水在线观看| 亚洲人成亚洲人成在线观看图片| 亚洲色成人一区二区三区小说| 国产精品一区二区三区四区在线观看| 日韩精品在线观看一区二区| 日本中文在线视频| 日韩国产欧美三级| 国产区二精品视| 18加网站在线| 欧美日韩一区二区三区免费看| 亚洲最大的黄色网| 国产精品99一区二区| 国产伦精品一区二区三区精品视频| 天堂中文在线看| 一区二区三区在线播放| 色噜噜狠狠永久免费| 影视先锋久久| 7m精品福利视频导航| 亚洲男人第一天堂| 亚洲精品日韩一| 午夜剧场在线免费观看| 国产欧美日韩| 国产国产精品人在线视| 日韩一级片免费在线观看| 一区二区三区欧美在线观看| 天天干天天操天天做| 激情综合网站| 国产成人精品视| 日韩av免费观影| 欧美日韩美女视频| 一级国产黄色片| 99亚洲一区二区| 国产精品我不卡| 国产丝袜在线观看视频| 欧美一区二区女人| 岛国毛片在线观看| 国产精品一区二区在线播放| 宅男在线精品国产免费观看| 青草综合视频| 久久精品成人欧美大片古装| 亚洲专区在线播放| 成人欧美一区二区三区在线播放| 国产精品视频中文字幕| 91影院成人| 成人黄色生活片| 二区在线播放| 日韩精品中文字幕在线不卡尤物 | 日本二三区不卡| 黄免费在线观看| 老牛嫩草一区二区三区日本| 日本在线视频不卡| 韩国理伦片久久电影网| 日韩中文字幕免费视频| 国产特级aaaaaa大片| 亚洲精品中文字幕在线观看| 成人做爰69片免费| 韩国亚洲精品| 欧美一二三区| 黄色日韩网站| 欧美精品情趣视频| 日韩永久免费视频| 欧美主播一区二区三区美女| 老司机精品免费视频| 国产一区在线看| 国内少妇毛片视频| 亚洲午夜久久| 国产日本欧美视频| 欧美aaa免费| 国产视频综合在线| 亚洲字幕av一区二区三区四区| 亚洲日本青草视频在线怡红院| www.啪啪.com| 日本美女一区二区三区视频| 在线视频不卡国产| 一区二区三区欧洲区| 日本高清不卡的在线| 麻豆传媒在线免费看| 欧美精品一区二区三区四区| 樱花视频在线免费观看| 亚洲精品一二三| 可以直接看的无码av| 免费成人在线视频观看| 91网站在线观看免费| 欧美日韩xxxx| 丁香五月网久久综合| 性高爱久久久久久久久| 久久久成人的性感天堂| 亚洲av片一区二区三区| 欧美男人的天堂一二区| 日韩精品一区二区在线播放| 国产女人18毛片水真多成人如厕| 欧美69精品久久久久久不卡| 久久精品国产清高在天天线| 小泽玛利亚av在线| 九色精品91| 国产91视觉| 成人在线视频免费| 欧美在线国产精品| 在线中文字幕电影| 日韩中文视频免费在线观看| 欧美一区二区视频| 精品国产免费人成电影在线观看四季| 中日精品一色哟哟| 黄色一区二区在线| 欧美爱爱免费视频| 亚洲国产精品t66y| 人妻丰满熟妇aⅴ无码| 国产一区二区日韩精品| 久久婷婷国产91天堂综合精品| 亚洲小说区图片区| av电影一区二区三区| 欧美日韩久久精品| 久久综合九色综合网站| 91精品导航| 亚洲一区二区三区久久| 玖玖精品在线| 国产精品久久9| 成人私拍视频| 91精品91久久久久久| 男女视频在线| 欧美国产第一页| 在线中文字幕电影| 欧美精品一区三区| yellow91字幕网在线| 一本色道久久综合亚洲精品小说| 日本人妖在线| 亚洲精品美女免费| 四虎永久在线观看| 亚洲成人a级网| 人妻精品无码一区二区| 精品福利一二区| 亚洲伦理在线观看| 欧美大片日本大片免费观看| www.精品视频| 日韩免费观看高清完整版| 国产女人18毛片18精品| 在线成人小视频| 国产露脸91国语对白| 69精品人人人人| 国产情侣一区二区| 欧美一区二区三区日韩| 精品国产伦一区二区三| 日韩欧美国产高清| 亚洲精品97久久中文字幕| 精品美女在线播放| 黄色小视频免费在线观看| 欧美精品一区二区三区蜜臀| 天天干在线观看| 亚洲精品之草原avav久久| 男人的天堂在线视频| 亚洲人成电影在线播放| av在线中文| 久久艳片www.17c.com| 欧美xxxx黑人又粗又长| 91精品国产乱码久久久久久久久 | 99久久精品免费看国产一区二区三区| 粉嫩av国产一区二区三区| 亚洲专区在线视频| 欧美美女啪啪| 香蕉久久夜色| 一区二区影院| 精品国产av无码一区二区三区| 一本色道88久久加勒比精品| 欧美xxxxx在线视频| 久久国产视频网| 亚洲黄色小说在线观看| 26uuu成人网一区二区三区| 91精品国自产在线| 亚洲精品欧美综合四区| jizz国产免费| 欧美在线免费观看亚洲| 99在线观看免费| 亚洲精品视频播放| 精品麻豆一区二区三区| 97精品久久久中文字幕免费| 巨胸喷奶水www久久久免费动漫| 成人av番号网| 青青操综合网| 7777在线视频| 欧美一级一区| 日韩高清在线一区二区| 91免费看`日韩一区二区| 国产视频精品免费| 午夜精品一区二区三区三上悠亚| 最近中文字幕在线观看| 欧美成人性战久久| 成人18在线| 性欧美长视频免费观看不卡| 成人在线不卡| 国产一区二区免费在线观看| av伊人久久| 欧美 丝袜 自拍 制服 另类| 极品少妇xxxx精品少妇偷拍| 添女人荫蒂视频| 亚洲欧美激情插 | 蜜桃视频一区二区三区 | aiai久久| 国产系列第一页| 美女爽到呻吟久久久久| 国产精品日日摸夜夜爽| 国产精品国产三级国产普通话三级 | 91精品二区| 国产精品无码一本二本三本色| 国产99一区视频免费| 日本黄色激情视频| 高跟丝袜欧美一区| 午夜精品在线播放| 啊v视频在线一区二区三区 | 亚洲影院高清在线| 精品一区二区三区中文字幕老牛| 欧美日韩成人免费视频| 国产精品主播直播| 日韩一区二区三区四区视频| 欧美性猛交丰臀xxxxx网站| 内射后入在线观看一区| 久久精品亚洲94久久精品| a屁视频一区二区三区四区| 女同一区二区| 麻豆精品网站| 97人妻精品一区二区免费| 丰满岳妇乱一区二区三区| 日韩一级片免费观看| 久久久免费精品视频| 亚洲综合网狠久久| 在线观看成人免费| 极品尤物av久久免费看| 天天色天天综合| 欧美日韩国产小视频| 阿v免费在线观看| 国产精品欧美一区二区三区奶水 | 在线观看欧美成人| 欧美大片免费高清观看| 美女三级99| 久久久久久久波多野高潮日日| 青青草视频成人| 欧美午夜久久久| 国产精品毛片一区二区三区四区| 国产99久久精品一区二区 夜夜躁日日躁| 欧美电影在线观看免费| 国产综合av在线| www国产成人免费观看视频 深夜成人网 | 成人免费a**址| 亚洲一级免费观看| 亚洲欧美自拍偷拍色图| 国产麻豆免费观看| 久久九九免费视频| 天堂精品久久久久| 日韩五码在线观看| 久久这里只有精品视频网| 天堂网视频在线| 在线视频日韩精品| 亚洲色图综合| 欧美乱做爰xxxⅹ久久久| 不卡av在线免费观看| 国产主播第一页| 久久精品久久精品亚洲人| 日韩在线精品强乱中文字幕| 国产毛片视频网站| 久久亚洲精品小早川怜子| 在线观看视频二区| 欧美日韩国产91| 亚洲欧美日本伦理| 天天操,天天操| 一区二区三区**美女毛片| 五月激情丁香婷婷| 国产精品爱久久久久久久| 91精品1区| 精品无码在线视频| 欧美日韩国产精品自在自线| 羞羞视频在线观看不卡| 久久96国产精品久久99软件| 蜜桃av一区二区| 国产亚洲成人精品| 亚洲一区999| 日韩区欧美区| 热久久精品国产| 亚洲精选免费视频| 日本1级在线| 亚洲aaa激情| 久久久人人人| 欧美黑人猛猛猛| 亚洲人成网站在线播| 国产精品免费精品自在线观看 | 国产精品九九九九九九| 日韩激情在线视频| 香蕉久久久久久| www.爱色av.com| 亚洲女人的天堂| 国产在线中文字幕| 国产精品xxxx| 激情综合网av| 国产午夜无码视频在线观看| 欧美黑人国产人伦爽爽爽|