Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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 在连续触发的函数内仅触发函数一次_Javascript_Jquery - Fatal编程技术网

Javascript 在连续触发的函数内仅触发函数一次

Javascript 在连续触发的函数内仅触发函数一次,javascript,jquery,Javascript,Jquery,我有一个功能,当鼠标指针位于图像上方时,每次鼠标按下事件都会触发该功能。 现在,我在这个鼠标按下函数中调用两个函数 我需要每次调用一个函数Triangulate(),上次只调用另一个函数ImageCalculation() 这里“最后一次”的意思是,在连续的img\u mouse\u down()函数调用之间应该有至少3秒或更长的间隔 下面是我的代码: function img_mouse_down(){ if(leftMouseButton){ Triangulate(); //C

我有一个功能,当鼠标指针位于图像上方时,每次鼠标按下事件都会触发该功能。 现在,我在这个鼠标按下函数中调用两个函数

我需要每次调用一个函数
Triangulate()
,上次只调用另一个函数
ImageCalculation()

这里“最后一次”的意思是,在连续的
img\u mouse\u down()
函数调用之间应该有至少3秒或更长的间隔

下面是我的代码:

function img_mouse_down(){
  if(leftMouseButton){
    Triangulate(); //Call this function every time.
    ImageCalculation(); //Call this function only the last time
  }
}
如果连续单击图像5次,然后暂停3秒或更长时间,
Triangulate()
应调用5次,而
ImageCalculation()
应仅调用一次

如何做到这一点

var glob_timeout_holder;
function img_mouse_down(){
  if(leftMouseButton){
    Triangulate(); //Call this function every time.

    clearTimeout(glob_timeout_holder); //clear if any previous continuing timeouts

    glob_timeout_holder = setTimeout(ImageCalculationlast, 3000);
  }
}

据我所知,这可能对你有帮助。每次运行img_mouse_down()时,它都会设置一个超时来执行ImageCalculation(),但就在这之前,终止任何以前的超时,结果是,如果用户停止单击,则在最后一次单击后3秒将调用ImageCalculation()

这样的事情应该能解决你的问题。每次调用都会清除超时,否则会在3秒后触发ImageCalculation

var timer = null
function img_mouse_down () {
    if(leftMouseButton){
    Triangulate();
    if (timer !== null) {
        clearTimeout(timer)
    }
    timer = setTimeout(function () {
        ImageCalculation()
    }, 3000)
  }
}

ImageCalculation()能在3秒暂停后调用吗?仅供参考,这叫做事件去抖动。@yoavmatchulsky:是的。找到解决办法了。感谢您的努力。感谢您的回复凯末尔·达奥。但不知怎的,每次都会调用ImageCalculationlast()。科克斯的回答对我有用。想法是一样的,但他用null初始化并在清除之前检查NOTNULL。谢谢Coxer的回复。标记为答案的。