量子纠缠——试试可视化图表之间的纠缠

最近前端圈子很火爆,因为这个量子纠缠的特效。这个特效有几个抓眼球的地方:两个浏览器窗口之间可以实现通信,产生吸附的效果;利用 three 实现了炫酷的效果。

这个怎么实现的?核心难点在于两个:

  • 不同窗口中球之间的相对位置
  • 浏览器窗口之间通信

1. 原理剖析

1.1. 球的相对位置

对于上述截图效果,核心元素是 3D 圆,圆默认放到窗口中心,所以球的相对位置,其实就是窗口的相对位置。

这里主要有 3 个 API

  • window.innerWidth,window.innerHeight:当前浏览器窗口的大小。
  • screenTop,screenLeft:浏览器窗口和屏幕窗口之间的位置。

有了这些信息之后,就可以知道浏览器窗口在电脑屏幕空间的的 BBox,这个信息可以后面用来计算两个窗口是否交叠的,交叠多少的的信息。

javascript 复制代码
const bbox = [
  window.screenLeft,
  window.screenTop,
  window.innerWidth,
  window.innerHeight,
];

1.2. 窗口之间的通信

最容易想到的就是加一个 server,然后使用 websocket 进行实时通信,这样会带来一个服务端,架构会复杂一些,实际上使用前端 localStorage 能力即可实现。

javascript 复制代码
window.addEventListener("storage", (e) => {
  // do something.
});

在进行 localStorage 存储的时候,会触发 storage 事件,因为 localStorage 是按源存储的,所以就可以实现窗口之间的通信了。

弄清楚了这两点,做这个效果,就只是工程问题了。

2. 案例复现

我这里就是用可视化的一些案例来实现了,期望的效果就是,多个不同窗口的浏览器会默认打开不同的可视化基础图表,比如:折线图、点图、柱形图。

然后当两个窗口靠近的时候,就可以把不同窗口的图表合并到一起,比如折线图和柱形图合并,组成成一个图表。

开工,代码见这里,线上预览地址。这里贴一下视频预览。

此处为语雀视频卡片,点击链接查看:量子纠缠之图表纠缠.mp4

3. 用途

本质核心能力是两个浏览器窗口之间的通信,这个技术点可以用来做什么?

  • 本地多窗口协作的情况下,数据同步
  • 多屏幕,扩大操作区域:控制窗口 + 预览窗口
  • ...
相关推荐
汪汪大队u11 分钟前
为什么 filter-policy 仅对 ASBR 的出方向生效,且即使在该生效场景下,被过滤的路由在协议内部(如协议数据库)依然存在,没有被彻底移除?
服务器·前端·网络
慧一居士17 分钟前
vue.config.js 文件功能介绍,使用说明,对应完整示例演示
前端·vue.js
颜酱20 分钟前
用导游的例子来理解 Visitor 模式,实现AST 转换
前端·javascript·算法
木易 士心29 分钟前
Nginx 基本使用和高级用法详解
运维·javascript·nginx
蒙特卡洛的随机游走39 分钟前
Spark的宽依赖与窄依赖
大数据·前端·spark
共享家95271 小时前
QT-常用控件(多元素控件)
开发语言·前端·qt
幸运小圣1 小时前
Iterator迭代器 【ES6】
开发语言·javascript·es6
葱头的故事1 小时前
将传给后端的数据转换为以formData的类型传递
开发语言·前端·javascript
中微子1 小时前
🚀 2025前端面试必考:手把手教你搞定自定义右键菜单,告别复制失败的尴尬
javascript·面试
_23331 小时前
vue3二次封装element-plus表格,slot透传,动态slot。
前端·vue.js