运行 仅在使用纯 javascript 的 mousedown 上进行 mousemove 的最佳方法?
Best way to run mousemove only on mousedown with pure javascript?
我不希望 mousemove
事件发生任何不必要的循环。所以我开始感兴趣,就 performance/best 而言,只有在 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;
});
mouseMoveFunction()
由于 pressedMouse
变量而未被调用。如果 mousedown
未使用,是否可以阻止 onmousemove
事件触发?
在事件对象中有一个名为 'which' 的 属性,表示在鼠标移动期间按下了哪个按钮。用这个来判断mousemove时是否做一些操作。
您可以通过从侦听器中删除 onMouseMove-Function 来阻止调用它:
myObject.addEventListener("mousedown", function(e){
mouseDownFunction(e);
myObject.onmousemove = function(e) {
mouseMoveFunction(e);
}
});
myObject.addEventListener("mouseup", function(e){
myObject.onmousemove = null
});
myObject.addEventListener("mousedown", function(e){
myObject.onmousemove = function(e) {
if(pressedMouse == true){
mouseMoveFunction(e);
}
}
});
您在上面所做的是每次浏览器检测到鼠标按下事件时,您都在为鼠标移动添加一个事件侦听器。
这会削弱您的性能..假设您按下了 1000 次鼠标,那么浏览器将添加一个 mousemove 事件 1,000 次
为 mousemove 创建一个单独的事件侦听器(一次)
由于您要添加事件处理程序然后删除它,可能会一遍又一遍,因此定义 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);
});
我不希望 mousemove
事件发生任何不必要的循环。所以我开始感兴趣,就 performance/best 而言,只有在 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;
});
mouseMoveFunction()
由于 pressedMouse
变量而未被调用。如果 mousedown
未使用,是否可以阻止 onmousemove
事件触发?
在事件对象中有一个名为 'which' 的 属性,表示在鼠标移动期间按下了哪个按钮。用这个来判断mousemove时是否做一些操作。
您可以通过从侦听器中删除 onMouseMove-Function 来阻止调用它:
myObject.addEventListener("mousedown", function(e){
mouseDownFunction(e);
myObject.onmousemove = function(e) {
mouseMoveFunction(e);
}
});
myObject.addEventListener("mouseup", function(e){
myObject.onmousemove = null
});
myObject.addEventListener("mousedown", function(e){
myObject.onmousemove = function(e) {
if(pressedMouse == true){
mouseMoveFunction(e);
}
}
});
您在上面所做的是每次浏览器检测到鼠标按下事件时,您都在为鼠标移动添加一个事件侦听器。
这会削弱您的性能..假设您按下了 1000 次鼠标,那么浏览器将添加一个 mousemove 事件 1,000 次
为 mousemove 创建一个单独的事件侦听器(一次)
由于您要添加事件处理程序然后删除它,可能会一遍又一遍,因此定义 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);
});