对于那些决定回答这个问题的人,我突然碰到了一个小问题
我试图做以下事情:
创建
var intrvl; //for interval
function strt() {
//and set interval
intrvl = setInterval(writeT,3000);
}
function writeT() {
//do something here as the interval runs
checkIf(); //check for the mouse down
}
function checkIf() {
//here goes the code that checks if mouse is down and if it is
//then I call another function that begins other useful process
//I tried
if (c.addEventListener('click')) { //c is my canvas
clearInterval(intrvl); //guess clearing the interval yee?
//and then calling the function I want to call
startDoing();
}
}
我想等待并使用该间隔,直到有人点击画布然后运行所需的功能
但是每当我点击画布时,函数startDoing()
恰好在运行,但与没有完全运行它的速度相比,它太快了。
我怎样才能让它发挥作用?正如我所希望的那样,首先创建的区间不存在,只有startDoing()
运行。
答案 0 :(得分:1)
您误解了addEventListener()的使用。
checkIf()
中的条件立即返回。因此,您的代码是
strt()
startDoing()
。改为使用它:
var intrvl;
var clicked = false;
function strt() {
//and set interval
intrvl = setInterval(checkIf,3000);
}
function checkIf() {
if ( clicked ) {
clearInterval( intrvl );
startDoing();
}
}
c.addEventListener('click', function() {
clicked = true;
} );
此代码即刻注册点击处理程序。一旦调用strt(),它就是启动间隔计时器。单击鼠标后,单击的变量将设置为true以标记此事件。下次你的间隔计时器触发时,由于检查了该变量并开始你想要启动的任何内容,它正在识别前一次点击。