在 JavaScript 中,我们如何防止在特定时间内一次又一次点击按钮?

因此,在代码中,按下按钮将使红色框产生动画效果。单击该按钮会将其沿对角线移动。但是,如果我们在动画发生时再次单击该按钮,或者多次单击该按钮,则会产生闪烁效果。我们该如何解决这个问题?


<!DOCTYPE html>

<html>

<style>

#container {

  width: 400px;

  height: 400px;

  position: relative;

  background: yellow;

}

#animate {

  width: 50px;

  height: 50px;

  position: absolute;

  background-color: red;

}

</style>

<body>


<p><button onclick="myMove()">Click Me</button></p> 


<div id ="container">

  <div id ="animate"></div>

</div>


<script>

function myMove() {

  var elem = document.getElementById("animate");   

  var pos = 0;

  var id = setInterval(frame, 5);

  function frame() {

    if (pos == 350) {

      clearInterval(id);

    } else {

      pos++; 

      elem.style.top = pos + "px"; 

      elem.style.left = pos + "px"; 

    }

  }

}

</script>


</body>

</html>


慕娘9325324
浏览 101回答 2
2回答

慕森王

您需要在动画进行时设置一个标志,并且在动画仍在进行时不要执行该函数var animationInProgress = false;function myMove() {&nbsp; if (animationInProgress) {&nbsp; &nbsp; return;&nbsp; }&nbsp; var elem = document.getElementById("animate");&nbsp; var pos = 0;&nbsp; var id = setInterval(frame, 5);&nbsp; animationInProgress = true;&nbsp; function frame() {&nbsp; &nbsp; if (pos == 350) {&nbsp; &nbsp; &nbsp; animationInProgress = false;&nbsp; &nbsp; &nbsp; clearInterval(id);&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; pos++;&nbsp; &nbsp; &nbsp; elem.style.top = pos + "px";&nbsp; &nbsp; &nbsp; elem.style.left = pos + "px";&nbsp; &nbsp; }&nbsp; }}#container {&nbsp; width: 400px;&nbsp; height: 400px;&nbsp; position: relative;&nbsp; background: yellow;}#animate {&nbsp; width: 50px;&nbsp; height: 50px;&nbsp; position: absolute;&nbsp; background-color: red;}<p><button onclick="myMove()">Click Me</button></p><div id="container">&nbsp; <div id="animate"></div></div>

慕桂英546537

我能想到的有两种方法:第一个是禁用按钮,并创建一个计时器(setTimeout)来重新启用它第二个是保存第二次单击的时间,并检查您的单击处理程序是否很快发生另一次单击(使用保存的第二次单击时间)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5