Javascript 定时器赢得';不要停止启动一个函数

Javascript 定时器赢得';不要停止启动一个函数,javascript,function,timer,Javascript,Function,Timer,我想做的很简单,但实际上不起作用。一旦用户在我的视频上移动鼠标,并在某个位置停留半秒,一个名为mainFunction的函数应该触发一次。下次当他移动鼠标并停在某个位置时,应该会再次发生这种情况——但它不会停止启动主功能。我不能使用jQuery有几个原因,所以请-如果您能提供帮助,请不要使用任何库 JS FIDDLE:(也检查控制台) 这里有一个简单的例子,可以将您的功能归结为计时器/鼠标移动延迟(相同的代码,只是去掉了所有其他内容): 它工作完美无瑕 除了计时器/延迟逻辑本身之外,我还想看看其

我想做的很简单,但实际上不起作用。一旦用户在我的视频上移动鼠标,并在某个位置停留半秒,一个名为mainFunction的函数应该触发一次。下次当他移动鼠标并停在某个位置时,应该会再次发生这种情况——但它不会停止启动主功能。我不能使用jQuery有几个原因,所以请-如果您能提供帮助,请不要使用任何库

JS FIDDLE:(也检查控制台)

这里有一个简单的例子,可以将您的功能归结为计时器/鼠标移动延迟(相同的代码,只是去掉了所有其他内容):

它工作完美无瑕


除了计时器/延迟逻辑本身之外,我还想看看其他地方。此时,如果我是你,我会开始在所有这些函数中分别调用console.log,并确保它们只在你期望的时候被调用。

你能提供一个JSFIDLE或其他东西来测试你的代码吗?检查它,只需检查控制台一次,并且只在我停止时触发。当我在视频中移动鼠标时,它不会被触发,除非我再次停止(并且它只被触发一次),就我理解你的问题而言,这就是你在寻找的行为,不是吗?你所描述的就是我试图做的。我甚至把我的鼠标电池拿出来,把鼠标放在视频上,它仍然不会停止发射,所以我真的不知道这里出了什么问题。我使用的是Chrome,顺便说一句。请查看您刚刚发送的内容中的控制台。它不会停止发射“fire”,尽管我说过我只需要“fire”控制台发射一次,以防用户在某个地点停留半秒钟。当他空闲时,什么也不应该发生。@user1938653-考虑到我唯一的输出是控制台,我敢打赌,在说控制台工作之前,我检查了控制台:)对我来说,我将鼠标移动到doc上,直到我停下来,什么都没有发生……半秒钟后它就启动了。然后我离开它,什么也不会发生……除非我再次移动它,然后再次停止它……在这种情况下,在我停止它半秒钟后,它再次开火。如果你看不到这一点,那么你需要指出你使用的是什么浏览器/系统,因为这显然是特定的。@user1938653-FYI,同样适用于你发布的jsfiddle。在我移动鼠标并停止半秒钟后,事件一次只触发一次,然后在我移动并停止并再次等待半秒钟之前,不会执行任何操作。弗雷德报告了同样的结果。你是唯一看到问题的人,巴德。我和你一样在Chrome上做了这两个测试。你的系统出了问题,不是你的代码。
video.onloadedmetadata = function start(){ //invoke
    var thethis = this;
    var event;
    var timeout;
    function func(){
        mainFunction(event); //this is supposed to fire only once, instead it fires constantly.
        console.log("sending!!!"); //This won't stop show up in the console
        clearTimeout(timeout);
        console.log(event);
    }


    video.addEventListener("mousemove", function(e){
        event = e;
        outsideElement = false;
        clearTimeout(timeout);
        timeout = setTimeout(func, 600);
    });

    video.addEventListener("mouseout", function(){ //mouse is out of elem
        outsideElement = true; //extra security, really make sure not to fire Mainfunction will check - if it's indeed outsideElement then it won't work properly.
        clearTimeout(timeout);
    }); //don't fire mainFunction in this case


}
var timeout;

function func(){
    console.log('fire');
    clearTimeout(timeout);
}

document.addEventListener("mousemove", function(e){
    clearTimeout(timeout);
    timeout = setTimeout(func, 600);
});