javascript - 无法启动和停止持续循环运行的动画

标签 javascript

为了简化这个问题,我创建了两个 div:当您单击橙色框时,其下方的蓝色框将连续循环地前后移动。我想要做的是:

  • 点击橙色框开始和停止蓝色框循环
  • 启动和停止后,蓝色框将停止并每次从停止处继续。

我已经尝试了几乎所有方法,但无法使其工作。任何建议将不胜感激。

var hoverSlideBox = document.getElementById("hover_slide_box");
var slidingBox = document.getElementById("sliding_box");

hoverSlideBox.onclick = function() {
  var pos = 0;
  var moveLeft = false;
  var stopAnimate = false;

  init();

  function init() {
    setInterval(boxRight, 5);
  }

  function boxRight() {
    if (!moveLeft) {
      pos++;
      slidingBox.style.left = pos + 'px';
    }
    if (pos == 500 || moveLeft) {
      moveLeft = true;
      boxLeft();
    }
  }

  function boxLeft() {
    if (moveLeft) {
      pos--;
      slidingBox.style.left = pos + 'px';
    }
    if (pos == 0 || !moveLeft) {
      moveLeft = false;
    }
  }

}
<div id="hover_slide_box" style="background-color: #ff931e; cursor: pointer; position: absolute; height: 100px; width: 100px;"></div>
<div id="sliding_box" style="top: 120px; background-color: #0071bc; cursor: pointer; position: absolute; height: 100px; width: 100px;"></div>

最佳答案

您需要将一些变量移出 onclick 函数,以便每次单击橙色框时它们都不会重置。它与 clearInterval 一起为您提供一个开始/停止按钮。

var hoverSlideBox = document.getElementById("hover_slide_box");
var slidingBox = document.getElementById("sliding_box");
var running = false;
var intervalId;
var pos = 0;
var moveLeft = false;

hoverSlideBox.onclick = function() {

  init();

  function init() {
    if (!running) {
      intervalId = setInterval(boxRight, 5);
      running = true;
    } else {
      clearInterval(intervalId);
      running = false;
    }
  }

  function boxRight() {
    if (!moveLeft) {
      pos++;
      slidingBox.style.left = pos + 'px';
    }
    if (pos == 500 || moveLeft) {
      moveLeft = true;
      boxLeft();
    }
  }

  function boxLeft() {
    if (moveLeft) {
      pos--;
      slidingBox.style.left = pos + 'px';
    }
    if (pos == 0 || !moveLeft) {
      moveLeft = false;
    }
  }

}
<div id="hover_slide_box" style="background-color: #ff931e; cursor: pointer; position: absolute; height: 100px; width: 100px;"></div>
<div id="sliding_box" style="top: 120px; background-color: #0071bc; cursor: pointer; position: absolute; height: 100px; width: 100px;"></div>

关于javascript - 无法启动和停止持续循环运行的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40161541/

相关文章:

javascript - 通过未创建的组件设置样式

javascript - 在 JavaScript 中删除对象时的奇怪行为

javascript - HighCharts - 显示图表 - 简单示例(markit API)

javascript - localStorage - 使用 getItem/setItem 函数还是直接访问对象?

javascript - Protractor - 如何将 Promise 数组的结果获取到另一个数组中并在其他函数中使用该数组

javascript - 如何在回调时将数据存储在express中

Javascript filter() 函数不起作用

javascript - 如何使用其子 div 滚动 div

javascript - 订阅放置在 Promise Angular 6 中的 http.post

javascript - 是否可以使用 Javascript 监视目录的修改