Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 区间赢';t clear/clientX&/或者客户不工作_Javascript - Fatal编程技术网

Javascript 区间赢';t clear/clientX&/或者客户不工作

Javascript 区间赢';t clear/clientX&/或者客户不工作,javascript,Javascript,我正在使用dat.gui制作一个简单的绘图程序 我有一个函数,它每50毫秒运行一次,使用如下设置的间隔: window.addEventListener("mousedown", function() { let run = setInterval(function() { // function here }, 50) }) window.addEventListener("mouseup", function() { clearInterval(run

我正在使用dat.gui制作一个简单的绘图程序

我有一个函数,它每50毫秒运行一次,使用如下设置的间隔:

window.addEventListener("mousedown", function() {
    let run = setInterval(function() {
        // function here
    }, 50)
})
window.addEventListener("mouseup", function() {
    clearInterval(run)
})
那有什么问题吗?我在clientX和clientY方面也遇到了麻烦

我所拥有的是:

window.addEventListener("mousedown", function() {
    let run = setInterval(function(event) {
        let x = event.clientX,
          y = event.clientY;
    }, 50)
})
我曾尝试在没有事件的情况下使用它作为参数,但它仍然不起作用。奇怪的是,它在这样的情况下工作:

window.addEventListener("mousemove", function() {
    let x = event.clientX,
      y = event.clientY;
}
我是不是错过了什么?我试过查这个,但什么也没找到。我这里还有完整的东西:


提前谢谢

在回调函数中,您缺少传递的参数
event
(事件对象),并且
run
变量也应该在任一侦听器的范围之外声明

编辑:为了跟踪鼠标的位置,您需要将事件侦听器附加到
mousemove
事件,因此我必须添加另一个函数作为此事件处理程序,该函数附加在
mousedown
上,并在
mouseup
上分离

让我们跑吧,
x、 y
window.addEventListener('mousedown',函数(事件){
运行=设置间隔(函数(){
console.log(x,y)
}, 50)
轨迹鼠标(事件)
this.addEventListener('mousemove',trackMouse)
})
addEventListener(“mouseup”,函数(){
清除间隔(运行)
this.removeEventListener('mousemove',trackMouse)
})
功能跟踪鼠标(事件){
x=event.clientX
y=event.clientY
}
您不能在
mouseup
listener中使用
run
变量,因为它们是在其他作用域中定义的

您可以将
事件
变量传递到间隔:

setInterval(function(){}, 50, event);

提示:变量作用域…@nnnnnn这是什么意思?我的意思是
run
变量不在作用域中,如果您尝试使用它:它在另一个函数中声明为局部变量。@nnnnnn Ahhh,我明白您的意思了,谢谢!这不是问题所在。在没有参数的情况下,它工作得很好。它在mousedown内部不起作用。如果没有参数,它只会在遗留的
window.event
对象存在时起作用;这不是推荐的方法。我更新了我的答案,向您展示了如何在
范围内运行
。好的,所以直到您修复了另一个问题,我才意识到这是一个问题。我没有问这个问题,但有没有办法让客户端X和Y不断地按下鼠标?我的意思是,在鼠标按下时,你可以移动它,它会给你相同的坐标,直到你抬起。有没有一种简单的方法可以改变它们?将变量传递给
setInterval
很好。这会让事情变得更干净。那么设置间隔中的事件会替换参数吗?@管理员是的。谢谢你,我最近才意识到这个问题,但是坐标不会随着你移动鼠标而改变,直到你抬起鼠标。移动鼠标时,如何更改坐标?谢谢!你改变的太少太疯狂了。
setInterval(function(){}, 50, event);