javascript - 如何在到达某个位置时激活间隔?

标签 javascript html

问题是它同时调用了 var intervalLeftintervaRight 。当它向右移动时,我希望 intervalLeft 不起作用,反之亦然。 当它达到 startPosition 100 时,它会激活 intervalLeft;当它达到 startPosition 0 时,它会激活 intervalRight 无限。

<div id="moveAnimation" class="block"></div>
</div>
<script>
  var elem = document.getElementById("moveAnimation");
  elem.addEventListener("click", movingImage);

  function movingImage() {
    var startPosition = 0;
    var intervalRight = setInterval(frameRight, 10);
    var intervalLeft = setInterval(frameLeft, 10);

    function frameRight() {
      if (startPosition >= 100) {
        clearInterval(intervalRight);
        frameLeft();
      } else {
        startPosition += 0.5;
        document.getElementById("moveAnimation").style.left = startPosition + "%";
      }
    }

    function frameLeft() {
      if (startPosition <= 0) {
        clearInterval(intervalRight);
        frameRight();
      } else {
        startPosition -= 2;
        document.getElementById("moveAnimation").style.right = startPosition + "%";
      }
    }
  }
</script>

这是练习:

在此之下,您有一个 div 需要使用 JS 进行从左到右的移动。使其在2秒内到达终点,然后在5秒内返回。永远重复这一点。

最佳答案

已更新您的代码。使用如下

<div id="moveAnimation" class="block"></div>
    </div>
    <script>
    var elem = document.getElementById("moveAnimation");
        elem.addEventListener("click", movingImage);



        function movingImage() {
            var startPosition = 0;
            var intervalRight = setInterval(frameRight, 10);
            var rightTimer = true;
            var leftTimer = false;
            var intervalLeft;

            function frameRight() {
                if(!rightTimer){
                    rightTimer = true;
                    intervalRight = setInterval(frameRight,10)
                    return;
                }
                if (startPosition >= 100) {
                    rightTimer = false;
                    clearInterval(intervalRight);
                    frameLeft();

                } else {

                    startPosition += 0.5;
                    document.getElementById("moveAnimation").style.left        =     startPosition + "%";
                }

            }

            function frameLeft() {
                if(!leftTimer){
                    leftTimer = true;
                    intervalLeft = setInterval(frameLeft,10)
                    return;
                }
                if (startPosition <= 0) {
                    leftTimer = false;
                    clearInterval(intervalLeft);
                    frameRight();

                } else {

                    startPosition -= 2;
                      document.getElementById("moveAnimation").style.left = startPosition + "%";
                }
            }
        }
    </script>

关于javascript - 如何在到达某个位置时激活间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56473319/

相关文章:

jquery - Bootstrap 导航栏切换时如何将按钮宽度设置为 100%?

javascript - 冲压发动机 : How to make element appear and reappear

Javascript - 在 while 循环中修改两个数组,两个数组都保留第二个值

javascript - jQuery 不适用于动态生成的相同 div

javascript - 以相应的 JavaScript 方式对相关数组进行排序

javascript - Tumblr 风格的键盘导航

html - 我可以在 html 中使用 <ul> 和 <li> 以表格形式呈现吗?

javascript - 根据其属性访问javascript对象

javascript - $.get 路由未在服务器端调用,并且未返回任何数据,服务器未进行控制台日志记录

html - 如何在 CSS 中垂直居中内联元素