javascript - 每次单击按钮时 CSS 递增过渡动画

标签 javascript css css-transitions css-transforms

给定

var box = document.querySelector('.box');

document.addEventListener("click", (event) => {
  if (!event.target.closest("button")) return;
  
  if(event.target.id === "button") {
    box.classList.add('move');
  } 
    
});
.box {
    width: 100px;
    height: 100px;
    background-color: #000;
    transition: transform 1s;
}

.move {
    transform: translateX(20px);
}
<div class="box"></div>
<button id="button">button</button>

用 JS Fiddle here .
我希望盒子的 x 位置增加 20px在每个按钮点击。

我不确定如何进行。我最初尝试使用 @KeyForms但这需要 fromto前缀,我不能(我认为)在其上添加变量值。这里出现了同样的问题,似乎我不能在 css 代码中有一个可以递增的变量。我是否使用了正确的功能(transition)?
我也试过
if(event.target.id === "button") {
    if(!box.classList.contains('open')){
        box.classList.add('open');
    }else {
        box.classList.remove('open');
    }
  }
但这似乎重复地来回移动盒子。
有没有人有任何提示或想法? (我正在添加 Javascript 标记,因为我怀疑这个问题可能会直接在 JS 中解决)。

最佳答案

您可以存储 x变量中的位置,每次单击增加 20 并将其应用于 transform样式属性:

var x = 0, box = document.querySelector('.box');
button.addEventListener('click', function() {
  x += 20, box.style.transform = `translateX(${x}px)`;
})
.box {
  width: 100px;
  height: 100px;
  background-color: #000;
  transition: 1s;
}
<div class="box"></div>
<button id="button">button</button>

关于javascript - 每次单击按钮时 CSS 递增过渡动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68434702/

相关文章:

javascript - 计算没有注释的字符

3d - CSS3 "Curved Surface"3D 变换/透视帮助

python - NPM - 无法在 Windows 8.1 上安装 css-sprite

html - 在关键帧中获取背景图像

html - CSS:如何使用渐变过渡切换两个背景图像?

javascript - 停止手动滚动——强制滚动到特定点

javascript - 为什么我在更新节点时收到重复项?

javascript - 如何滚动到页面中的最后一个元素 <li>

javascript - jquery Accordion 默认展开

css - 属性的交错动画