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

最近前端圈子很火爆,因为这个量子纠缠的特效。这个特效有几个抓眼球的地方:两个浏览器窗口之间可以实现通信,产生吸附的效果;利用 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. 用途

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

  • 本地多窗口协作的情况下,数据同步
  • 多屏幕,扩大操作区域:控制窗口 + 预览窗口
  • ...
相关推荐
腾讯TNTWeb前端团队5 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰8 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪9 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪9 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy9 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom10 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom10 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom10 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom10 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom10 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试