javascript - 如何防止js动画再次发生

标签 javascript html css

所以我试图制作这个动画,当我点击按钮时,侧面的黑色矩形“移到一边”。然而,当我第二次点击按钮时,它表现得很奇怪,边上的矩形开始快速出现和消失。我试图通过在动画功能完成后将按钮的 onlick 属性设置为空来阻止它,但它似乎不起作用。关于如何将它设置为只运行一次的任何想法? 谢谢

var W = document.body.clientWidth;

function move() {
  
    var left = document.getElementById("left");   
    var right = document.getElementById("right");
    var pos = 0;
    var id = setInterval(frame, 1);

    function frame() {
        if (pos > W/3) {
            clearInterval(id);
            document.getElementsByClassName("NavLink").onclick = "";
        } else {
            pos++; 
            left.style.left = -3*pos + 'px'; 
            right.style.right = -3*pos + 'px'; 
        }
    }
}
*{
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body{
  overflow: hidden;
}

nav{
  width: 100vw;
  height: 100vh;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
nav h1,a{
  color: black;
  font-family: Helvetica;
  margin-top: 2vw;
  margin-bottom: 2vw;
}
nav h1{
  margin-bottom: 6vw;
}

aside{
  position: absolute;
  width: 33vw;
  height: 100vh;
  background-color: black;
}
#left{
  left: 0;
}
#right{
  right: 0;
}
<!DOCTYPE html>
<html>
<head>
    <title>Paggo</title>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="styllo.css">
    <script type="text/javascript" src="scriptto.js"></script>
</head>
<!-- ########################################################### -->
<body>
<div id="grid">
  
  <aside id="left"></aside>
  <aside id="right"></aside>

  <nav>
    <button onclick="move()" class="NavLink"> Link </button>
    <button onclick="move()" class="NavLink"> Link </button>
    <button onclick="move()" class="NavLink"> Link </button>
    <button onclick="move()" class="NavLink"> Link </button>
  </nav>

</div>
</body>
</html>

最佳答案

getElementsByClassName()返回 HTMLCollection .您不能直接在此集合上设置 onclick。相反,你应该 loop over each element in the collection .

这仅解决了动画完成后能够再次运行的问题。我没有修复已经开始播放后可以再次播放动画的错误。

var W = document.body.clientWidth;

function move() {
  
    var left = document.getElementById("left");   
    var right = document.getElementById("right");
    var pos = 0;
    var id = setInterval(frame, 1);

    function frame() {
        if (pos > W/3) {
            clearInterval(id);
            var navLinks = document.getElementsByClassName("NavLink");
            for (var i = 0; i < navLinks.length; i++) {
              var navLink = navLinks[i];
              navLink.onclick = "";
            }
            
        } else {
            pos++; 
            left.style.left = -3*pos + 'px'; 
            right.style.right = -3*pos + 'px'; 
        }
    }
}
*{
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body{
  overflow: hidden;
}

nav{
  width: 100vw;
  height: 100vh;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
nav h1,a{
  color: black;
  font-family: Helvetica;
  margin-top: 2vw;
  margin-bottom: 2vw;
}
nav h1{
  margin-bottom: 6vw;
}

aside{
  position: absolute;
  width: 33vw;
  height: 100vh;
  background-color: black;
}
#left{
  left: 0;
}
#right{
  right: 0;
}
<!DOCTYPE html>
<html>
<head>
    <title>Paggo</title>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="styllo.css">
    <script type="text/javascript" src="scriptto.js"></script>
</head>
<!-- ########################################################### -->
<body>
<div id="grid">
  
  <aside id="left"></aside>
  <aside id="right"></aside>

  <nav>
    <button onclick="move()" class="NavLink"> Link </button>
    <button onclick="move()" class="NavLink"> Link </button>
    <button onclick="move()" class="NavLink"> Link </button>
    <button onclick="move()" class="NavLink"> Link </button>
  </nav>

</div>
</body>
</html>

关于javascript - 如何防止js动画再次发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238737/

相关文章:

css - webkit 过渡在 chrome 和 safari 中不起作用

javascript - 更改大小时,div 内的 map 不响应

html - 链接不适用于 Logo

jquery - css中的分割宽度变化

javascript - 未捕获的语法错误 : Unexpected token export

javascript - Angular 1.5 组件 : passing a function

javascript - 如何将内联 JavaScript 合二为一?

javascript - 使用 Javascript 从文件加载图像

javascript - 持久 header 导致网站高度崩溃

javascript - 如何在关闭窗口时保存 Chrome 扩展程序中的选项卡?