我发现了一个不错的五彩纸屑脚本,当我的代码片段中宣布了优胜者时,我将其用作一种效果。

我已经将五彩纸屑开始绑定到一个名为“ startConfetti”的按钮。

我还有一个不同的按钮“ bt1”,它开始了获胜者的选择过程。

现在,我有一个脚本,当我单击“ bt1”时单击“ startConfetti”

 $('#container').on("click", '#bt1', function (e) {
        $('#startConfetti').trigger(e.type);
    });


现在,我想要的是在“ startConfetti”单击之间添加一个延迟。

所以这是一些代码。
当您单击“ startConfetti”时,这将启动五彩纸屑

function StartConfetti() {
          W = window.innerWidth;
          H = window.innerHeight;
          canvas.width = W;
          canvas.height = H;
          (function animloop() {
              if (animationComplete) return null;
              animationHandler = requestAnimFrame(animloop);
              return Draw();
          })();
      }


这是我的按钮

 <div id="container">
            <button id="startConfetti" style="display: none" ></button>
            <button id="bt1" class="button button5">< R30K</button>
            <button id="bt2" class="button button5">R30K - R70K</button>
            <button id="bt3" class="button button5">> R70K</button>
        </div>


和按钮初始化

function InitializeButton() {
          $('#startConfetti').click(InitializeConfetti);
          $('#stopConfetti').click(DeactivateConfetti);
          $('#restartConfetti').click(RestartConfetti);
      }


以及startConfetti初始化

function InitializeConfetti() {
          canvas.style.display = 'block';
          particles = [];
          animationComplete = false;
          for (var i = 0; i < mp; i++) {
              var particleColor = particleColors.getColor();
              particles.push(new confettiParticle(particleColor));
          }
          StartConfetti();
      }


我已经试过了-

 $('#bt1').on("click", '#startConfetti', function (e) {
 }); setTimeout(function() {
    $('#startConfetti').trigger('click');
 }, 29000);


但这会使脚本自行运行,并在29秒后自动延迟脚本在页面上的加载。

我也尝试添加

setTimeout(startConfetti, 29000);


在代码中的几个地方,但仍然没有影响。

我在做什么还是在做什么错,以实现“ bt1”以单击“ startConfetti”按钮并在“ startConfetti”脚本运行之前添加延迟?

最佳答案

您将超时放置在事件回调之外。因此,单击将没有任何结果,并且超时将在代码加载后立即开始。

只需将超时放入事件回调中即可。

$('#bt1').on("click", '#startConfetti', function (e) {
     setTimeout(function() {
        $('#startConfetti').trigger('click');
     }, 29000);
 });


如果您希望每当调用函数时发生延迟,另一种选择就是将startConfetti函数包装在一个超时中。

function StartConfetti() {
      setTimeout(function(){
          W = window.innerWidth;
          H = window.innerHeight;
          canvas.width = W;
          canvas.height = H;
          (function animloop() {
              if (animationComplete) return null;
              animationHandler = requestAnimFrame(animloop);
              return Draw();
          })();
      }, 29000);
  }

10-04 22:32