Javascript 如何在mousemove事件后1分钟运行函数?

Javascript 如何在mousemove事件后1分钟运行函数?,javascript,Javascript,我想在上次mousemove事件之后运行一个函数。我尝试了以下代码: @HostListener('document:mousemove', ['event']) eventHandler(event) { setTimeout(() => { // do something }, 60000); } 问题是,它在第一个mousemove事件中触发,并且在另一个事件发生时不会重置时间。如何在每次事件发生时重置它并启动setTimeout功能?我不确定

我想在上次mousemove事件之后运行一个函数。我尝试了以下代码:

@HostListener('document:mousemove', ['event'])
   eventHandler(event) {
    setTimeout(() => {
     // do something
    }, 60000);
   }

问题是,它在第一个mousemove事件中触发,并且在另一个事件发生时不会重置时间。如何在每次事件发生时重置它并启动
setTimeout
功能?

我不确定您使用的是哪个框架,但一般来说,您需要存储计时器的Id并每次取消它,然后启动一个新的框架-记住捕获Id

var timerId=0
document.addEventListener(“mousemove”,function()){
清除超时(timerId);
timerId=setTimeout(函数(){
log(“上次鼠标移动后5秒”);
},5000);

});我不确定您使用的是哪个框架,但一般来说,您需要存储计时器的Id,每次都取消它并启动一个新的框架-记住捕获Id

var timerId=0
document.addEventListener(“mousemove”,function()){
清除超时(timerId);
timerId=setTimeout(函数(){
log(“上次鼠标移动后5秒”);
},5000);

});嗯,当您调用
setTimeout
时,返回值是一个数字,表示所设置计时器的ID值。将此值与
clearTimeout()
方法一起使用可取消计时器,并在发生新事件时再次设置计时器。你可以在这里和这里阅读更多关于和的信息

基本上你可以有这样的东西:

//global variable
var timeoutID;

[...]

@HostListener('document:mousemove', ['event'])
   eventHandler(event) {
    if (timeoutID)
        clearTimeout(timeoutID);

    timeoutID = setTimeout(() => {
     // do something
    }, 60000);
}
我还提供了一个简单的JSFIDLE(纯js,无框架):

var timeoutValue=2000;
var-timeoutID;
document.addEventListener(“mousemove”,function()){
if(超时ID)
clearTimeout(timeoutID);
timeoutID=setTimeout(函数(){
log(timeoutValue+“刚刚通过”);
}, 2000);

});嗯,当您调用
setTimeout
时,返回值是一个数字,表示所设置计时器的ID值。将此值与
clearTimeout()
方法一起使用可取消计时器,并在发生新事件时再次设置计时器。你可以在这里和这里阅读更多关于和的信息

基本上你可以有这样的东西:

//global variable
var timeoutID;

[...]

@HostListener('document:mousemove', ['event'])
   eventHandler(event) {
    if (timeoutID)
        clearTimeout(timeoutID);

    timeoutID = setTimeout(() => {
     // do something
    }, 60000);
}
我还提供了一个简单的JSFIDLE(纯js,无框架):

var timeoutValue=2000;
var-timeoutID;
document.addEventListener(“mousemove”,function()){
if(超时ID)
clearTimeout(timeoutID);
timeoutID=setTimeout(函数(){
log(timeoutValue+“刚刚通过”);
}, 2000);

});
你能不能先解除绑定,然后再重新绑定事件?你必须使用
clearTimeout
来清除你已经存在的超时,然后添加一个新的超时…或者你可以用另一种方式来做,并在一个时间间隔内调用一个函数,可能每隔一秒钟—让它检查当前时间戳与上次鼠标移动事件的时间戳之间的差异,并且只有在时间戳大于1分钟时才执行进一步的操作。您是否可以先解除绑定,然后再重新绑定该事件?您必须使用
clearTimeout
来清除已经存在的超时,然后添加一个新的…或者你用另一种方法来做,在一个时间间隔内调用一个函数,可能是每秒调用一次-让它检查当前时间戳和最后一次鼠标移动事件的时间戳之间的差异,并且只在>1分钟的情况下执行进一步的操作。