javascript - 如何让滚动事件通过覆盖而不是单击事件
问题描述
我想创建一个带有自定义控件的地图注释工具(不使用地图提供者内置的注释功能)。
像这样的东西:
我的想法是在地图上方覆盖一个画布。
问题是:由于该叠加层,我无法再通过滚动来放大地图。
如果我设置pointer-events: none
到画布上,那么我就不能再在画布上画画了。
演示:https ://codepen.io/vandrieu/pen/qBqdpzX?editors=1010
我希望能够在画布上绘图,同时仍然能够通过滚动鼠标来缩放地图。
你会怎么做?
解决方案
使用 Rojo 的评论,我开始研究事件分派并编写了这个将事件分派给另一个的方法
function redirectEvent(eventType, fromElementSelector, toElementSelector) {
const fromElement=document.querySelector(fromElementSelector)
const toElement=document.querySelector(toElementSelector)
fromElement.addEventListener(eventType, function (event) {
toElement.dispatchEvent(new event.constructor(event.type, event));
event.preventDefault();
event.stopPropagation();
//event.stopImmediatePropagation();
});
}
然后我挣扎,
首先是因为scroll
事件不起作用。直到我找出正确的事件不是scroll
,它是wheel
。
然后因为以这种方式调度事件:
redirectEvent("wheel", '#canvas2', '#map2')
没有工作。我想也许我需要将事件发送到地图内的画布(地图是使用画布呈现的)。
所以我改为:
redirectEvent("wheel", '#canvas2', '#map2 canvas')
但它也不起作用。
原因是页面加载时,地图内的画布尚未渲染。
但是,如果我稍等一下:
setTimeout(() => {
redirectEvent("wheel", '#canvas2', '#map2 canvas')
},2000)
有用!
查看更新的演示(地图编号 2):https ://codepen.io/vandrieu/pen/qBqdpzX?editors=1010
推荐阅读
- retool - 在 retool 上复制现有应用程序或版本控制
- python - 功能:填充字符串得到长度
- python-3.x - 如何拆分python3列表?
- python - 你能解决问题吗?Python 套接字
- php - 通过带有ajax的jquery发送一个数组以从php启动zip流
- r - R中的IFELSE返回不正确的值
- python - 初学者 PyTorch:RuntimeError:大小不匹配,m1:[16 x 2304000],m2:[600 x 120]
- python - 可变结果即使在更改后也会产生结果
- r - 如何在 r shiny 中编辑表格
- python - Pygame 移动问题