javascript - 单击可转到实时动画中的下一个位置

标签 javascript html css

我创建了一个从右到左的动画,我试图在单击下一个框按钮时添加一些跳转。

如何使用 JavaScript 应用它?

nextBox 函数应该应用从 box1 到 box2 的跳转,依此类推...(例如)

const nextBox = () => {
  alert("nextBox");
  // replace => Jump to next box position +=100px to right
};
body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

.container {
  background-color: aqua;
  height: fit-content;
  width: 500px;
  overflow-x: hidden;
  position: relative;
}

.anim {
  animation: anim 30s infinite linear;
  display: flex;
}

.anim > .box {
  width: 90px;
  height: 90px;
  margin: 5px;
  background-color: blue;
  flex-shrink: 0;
}

.container > button {
  position: absolute;
  left: 0px;
  top: 32px;
  width: 50px;
}

@keyframes anim {
  to {
    transform: translateX(-1000px);
  }
}
<div class="container">
  <div class="anim">
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
  </div>
  <button onclick="nextBox()">next box</button>
</div>

codepen here

最佳答案

以下实现应该可以工作,因为它可以满足您的要求。

这里我们有另一个 boxContainer div 来应用 transition 并让 animation 保留在 anim 类包装器上分区我们还可以有另一个 pseudoBox 类的 div,我们将其 width 增加 100px 以填充我们的空白间距。稍后遇到并保持 box div 的顺序不变,我们继续以循环方式在末尾附加 first box 类 div。为了更好地理解,我对盒子进行了编号。所以我们原来的 box div 数量保持不变。

let jump = 0;
const anim = document.querySelector('.anim');
const boxContainer = document.querySelector('.boxContainer');
const pseudoBox = document.querySelector('.pseudoBox');

const animate = () => {
  boxContainer.style.transform = `translate(${jump}px)`;
  pseudoBox.style.width = `${jump*-1}px`;
  boxContainer.appendChild(boxContainer.children[1]);
}

const nextBox = () => {
  jump -= 100;
  requestAnimationFrame(animate);
};
body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

.container {
  background-color: aqua;
  height: fit-content;
  width: 500px;
  overflow-x: hidden;
  position: relative;
}

.anim {
  animation: anim 30s infinite linear;
}

.pseudoBox {
  flex-shrink: 0
}

.boxContainer {
  display: flex;
  transition: transform 0.2s;
}

.boxContainer>.box {
  width: 90px;
  height: 90px;
  margin: 5px;
  background-color: blue;
  flex-shrink: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  color: white;
}

.container>button {
  position: absolute;
  left: 0px;
  top: 32px;
  width: 50px;
}

@keyframes anim {
  to {
    transform: translateX(-1000px);
  }
}
<div class="container">
  <div class="anim animateStuff">

    <div class="boxContainer">
      <div class="pseudoBox"></div>
      <div class="box">1</div>
      <div class="box">2</div>
      <div class="box">3</div>
      <div class="box">4</div>
      <div class="box">5</div>
      <div class="box">6</div>
      <div class="box">7</div>
      <div class="box">8</div>
      <div class="box">9</div>
      <div class="box">10</div>
      <div class="box">11</div>
      <div class="box">12</div>
      <div class="box">13</div>
      <div class="box">14</div>
      <div class="box">15</div>
      <div class="box">16</div>
    </div>
  </div>
  <button onclick="nextBox()">next box</button>
</div>

关于javascript - 单击可转到实时动画中的下一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66886597/

相关文章:

javascript - jQuery click() 事件;如何防止鼠标右键单击时发生此事件?

javascript - 如何避免在 Webpack 2 的配置中使用可选的解析选项?

css - 避免 DIV 表头上的正文滚动宽度

javascript - ng-class 的 css 过渡效果

javascript - 透明 DIV 覆盖

html - 在 Photoshop 中使照片不像素化

c# - 如何将 C# 数组传递给 JavaScript 数组

JavaScript:如果 IE9 处于 IE7 或 IE8 兼容模式,我可以检测到它吗?

html - 包含 3 列的表格。固定中心列宽。如何在其他两列上共享宽度?

html - 修复了我的窗口滚动条上的 div