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

时间:2021-07-19 03:07:49

标签: 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 中解决)。

3 个答案:

答案 0 :(得分:4)

您可以将 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>

答案 1 :(得分:3)

继续添加 Using javascript style

var button = document.querySelector('#button');

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

答案 2 :(得分:2)

使用 javascript 样式可以回答您的问题。 javascript 有像 box.style.transform = 'translateX(20px)' 这样的 CSS 样式。在 Javascript 中,您可以计算样式值(当然,在 CSS 中可以通过计算更改值)。所以我添加了一些如下所示的代码。

var box = document.querySelector('.box');
let cnt = 0;
document.addEventListener("click", (event) => {
  if (!event.target.closest("button")) return;
  
  if(event.target.id === "button") {
  console.log(box.style.transform)
    cnt++;
    console.log(cnt)
    box.style.transform = `translateX(${20 * cnt}px)`;
  } 
    
});
.box {
    width: 100px;
    height: 100px;
    background-color: #000;
    transition: transform 1s;
}

.move {
    transform: translateX(20px);
}

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