javascript - 需要 addEventListener() 冒泡修复
问题描述
我正在测试我的函数计数鼠标位置,其中addEventListener
包括两个 s。出了点问题,每次移动鼠标时我都会收到一条警报消息,而它必须只能通过单击,因为另一个侦听器只能帮助计算坐标。我试过e.stopPropagation()
了,但没有用。有谁知道我该如何解决它
function changeCode(e) {
document.addEventListener('click', alert('message'), false )
}
let posGet = document.addEventListener('mousemove', function(e) {
let mousecoords = getMousePos(e);
if (mousecoords.x > -400) {
changeCode(e)
}
}, false );
function getMousePos(e) {
return { x: e.clientX, y: e.clientY };
}
解决方案
首先,当您向事件监听器添加指令并添加'()'时,JS会立即执行它,这就是为什么它会在鼠标移动时发出警报。
所以一个解决方案可以是给它一个匿名函数,比如:
document.addEventListener('click', function(){alert('message')}, false )
这会将函数作为事件的回调函数,并且仅在事件触发时执行。
但是您的代码还有另一个问题:每次鼠标移动并且 x > -400 时,它都会添加事件侦听器。这将每次重复该指令,并且每次鼠标移动时您都会被 alert() x 卡住。
为了缓解这种情况,您只需将事件侦听器添加到函数之外。
或者,在我的示例中,事件侦听器绑定到特定函数,这使您能够删除它,从而避免重复事件侦听器。
function changeCode(e) {
document.removeEventListener('click', mouseClickHandler, false );
document.addEventListener('click', mouseClickHandler, false );
}
function mouseClickHandler(){
alert('message');
}
let posGet = document.addEventListener('mousemove', function(e) {
let mousecoords = getMousePos(e);
if (mousecoords.x > -400) {
changeCode(e)
}
}, false );
function getMousePos(e) {
return { x: e.clientX, y: e.clientY };
}
推荐阅读
- r - 如何修复 R2jags::jags 中的“节点与父母不一致”错误
- javascript - 如果代码较大且调用堆栈不为空,事件循环如何在 2 秒内准确执行代码?
- python - 在 dict | 中添加多个 dicts 蟒蛇,不和谐.py
- laravel - Laravel Sail 和测试数据库
- jupyter-notebook - 定义条件 Jupyter 单元格
- c# - 如何访问 .razor 文件之外的 AuthorizationProvider?
- arrays - 如何将两个变量同时存储在数组或不同的数据结构中
- c++ - Clang 无法使用未使用的模板编译
- elasticsearch - 用弹性模糊匹配索引短语
- javascript - 如何保存 MAP 方法的两个结果?