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

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

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

  • 本地多窗口协作的情况下,数据同步
  • 多屏幕,扩大操作区域:控制窗口 + 预览窗口
  • ...
相关推荐
天若有情67317 分钟前
【c++】手撸C++ Promise:从零实现通用异步回调组件,支持链式调用+异常安全
开发语言·前端·javascript·c++·promise
抱琴_36 分钟前
【Vue3】大屏性能优化黑科技:Vue 3 中实现请求合并,让你的大屏飞起来!
前端·vue.js
不会玩电脑的Xin.37 分钟前
HTML + CSS
前端·css·html
hadage2331 小时前
--- JavaScript 的一些常用语法总结 ---
java·前端·javascript
彭于晏爱编程1 小时前
🍭🍭🍭升级 AntD 6:做第一个吃螃蟹的人
前端
掘金一周1 小时前
大部分人都错了!这才是chrome插件多脚本通信的正确姿势 | 掘金一周 11.27
前端·人工智能·后端
jason_yang2 小时前
vue3中createApp多个实例共享状态
javascript·vue.js
_瑶瑶_2 小时前
浅记一下ElementPlus中的虚拟化表格(el-table-v2)的简单使用
前端·javascript
Drift_Dream2 小时前
ResizeObserver:轻松监听元素尺寸变化
前端