首页 > 解决方案 > 事件监听器只设置一次间隔,但每次都运行其他函数

问题描述

请参阅此代码:

function handleTouchStart(event) {
       event.preventDefault();
       cnvs.removeEventListener("touchstart", handleTouchStart);
       var x1 = event.touches[0].clientX-cnvs.offsetLeft;
       callerOfCNVSTouchStart = setInterval(function () {
         if (x1 > cnvs.width/2  && whiteShip.x2 < cnvs.width) {
          whiteShip.x1+= 3;
         } else if (x1 < cnvs.width/2 && whiteShip.x1 > 0) {
          whiteShip.x1-= 3;
         }
        }, 20);
        nBMC = setInterval(makeNewBullets,200);
        setInterval(sendEnemies,2000);//I want to run this line only once 
}

我希望每次事件发生时都运行其他函数,但sendEnemies只设置一次间隔。我怎样才能做到这一点?

标签: javascriptfunctioneventssetintervalevent-listener

解决方案


使用var sentEnemies = false;外部函数之类的变量handleTouchStart,并在函数中将其更新为true第一次,并if(!sentEnemies)用于该行仅执行一次。

var sentEnemies = false;

function handleTouchStart(event) {
       event.preventDefault();
       cnvs.removeEventListener("touchstart", handleTouchStart);
       var x1 = event.touches[0].clientX-cnvs.offsetLeft;
       callerOfCNVSTouchStart = setInterval(function () {
         if (x1 > cnvs.width/2  && whiteShip.x2 < cnvs.width) {
          whiteShip.x1+= 3;
         } else if (x1 < cnvs.width/2 && whiteShip.x1 > 0) {
          whiteShip.x1-= 3;
         }
        }, 20);
        nBMC = setInterval(makeNewBullets,200);

        if (!sentEnemies) {
           setInterval(sendEnemies,2000); // Will execute only once
           sentEnemies = true;
        }
        
}

推荐阅读