使用纯javascript仅在mousedown上运行mousemove的最佳方式
Best way to run mousemove only on mousedown with pure javascript?
我不希望mousemove
事件发生任何不必要的循环。因此,我开始感兴趣,就性能/最佳实践而言,只有在mousedown == true
时运行mousemove
的最佳方式是什么?目前我正在使用:
var pressedMouse = false;
myObject.addEventListener("mousedown", function(e){
mouseDownFunction(e);
pressedMouse = true;
myObject.onmousemove = function(e) {
if(pressedMouse == true){
mouseMoveFunction(e);
}
}
});
myObject.addEventListener("mouseup", function(e){
pressedMouse = false;
});
由于pressedMouse
变量的原因,未调用mouseMoveFunction()
。如果mousedown
未使用,是否可以阻止onmousemove
事件触发?
您可以通过从侦听器中删除onMouseMove函数来阻止调用:
myObject.addEventListener("mousedown", function(e){
mouseDownFunction(e);
myObject.onmousemove = function(e) {
mouseMoveFunction(e);
}
});
myObject.addEventListener("mouseup", function(e){
myObject.onmousemove = null
});
由于您将添加一个事件处理程序,然后再将其删除,因此可能会一次又一次地定义mouseMove函数,首先准备接受一个事件对象:
function mouseMoveFunction(e) {
//stuff
}
现在,您只需添加对该函数的引用,而不需要创建一个新的匿名函数,每当mousedown激活时就会调用它。此外,由于我们有该引用,我们还可以使用标准的add/remove EventListener方法。
myObject.addEventListener("mousedown", function(e){
mouseDownFunction(e);
this.addEventListener("mousemove", mouseMoveFunction);
});
myObject.addEventListener("mouseup", function(e){
this.removeEventListener("mousemove", mouseMoveFunction);
});
在事件对象中有一个名为"which"的属性,它指示在鼠标移动过程中按下了哪个按钮。使用此选项可以确定是否在鼠标移动期间执行某些操作。
myObject.addEventListener("mousedown", function(e){
myObject.onmousemove = function(e) {
if(pressedMouse == true){
mouseMoveFunction(e);
}
}
});
您在上面所做的是,每当浏览器检测到鼠标按下事件时,您都会为鼠标移动添加一个事件侦听器。
这会影响你的表现。。假设您按下1000个鼠标,然后浏览器将添加鼠标移动事件1000次
为mousemove(once)创建一个单独的事件侦听器
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- 主体上的addEventListener('mousemove',..)-有多糟糕
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 将文本框链接到由按钮运行的javascript公式
- 为什么不是't运行此Javascript的Chrome
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何使用JS/nightwatchjs并行运行多个测试
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- 使用纯javascript仅在mousedown上运行mousemove的最佳方式