javascript - 如何在多个画布之间共享鼠标事件?
问题描述
说我有下面
const canvas1 = document.createElement("canvas");
const canvas2 = document.createElement("canvas");
canvas1.width = window.innerWidth;
canvas2.width = window.innerWidth;
canvas1.height = window.innerHeight;
canvas1.height = window.innerHeight;
canvas1.addEventListener('click', onClickCanvas1);
canvas2.addEventListener('click', onClickCanvas2);
因为两个画布位于完全相同的位置,所以点击事件只能监听到 canvas1 或 canvas2(具有更多 z-index 值的画布)。
有没有办法让两个画布都听同一个鼠标事件?
解决方案
由于您的画布与更高的 z-index 重叠,只需将“点击”分配给一个公共父元素
someElementWrapper.addEventListener("click", (ev) => {
const bcr = ev.currentTarget.getBoundingClientRect();
const x = ev.clientX - bcr.left;
const y = ev.clientY - bcr.top;
// here pass the x and y coordinates in your app logic. For example:
updateAllCanvases(x, y);
});
或者,将 CSS 添加pointer-events: none;
到您自己的画布中。
<div id="wrapper"> <!-- I LISTEN TO MOUSE/TOUCH EVENTS! YEY -->
<canvas id="canvas-others"></canvas> <!-- HAS ITS OWN EVENTS -->
<canvas id="canvas-mine"></canvas> <!-- HAS POINTER-EVENTS: NONE -->
</div>
或者简单地说 - 将事件直接分配给第 3 方画布。
推荐阅读
- java - 为什么 Collections.sort() 在 Eclipse 中不起作用
- opencv - Prezi演示的效果如何实现?
- shell - 如何检查正在执行的用户 shell
- amazon-web-services - 将对象从一个 s3 文件夹移动到同一存储桶中的另一个文件夹的最快且最具成本效益的方法是什么
- microsoft-teams - 如何使用 PowerShell 将 Teams 应用设置策略应用于 CSV 文件中的用户?
- r - 在 R 的 for 循环中跳过包 `rstan` 触发的错误
- tensorflow - 如何安装支持 Eigen AVX512 的 TensorFlow 2.x?
- python - 需要一种将变量从 User 类传递到 Locust 中的 TaskSet 的方法
- terraform - 调试 terraform 时如何查看对象值
- flutter - 列内的自定义导航器