【问题标题】:How do you dynamically add keyframes through Javascript? [duplicate]如何通过 Javascript 动态添加关键帧? [复制]
【发布时间】:2021-05-19 21:17:07
【问题描述】:
所以,我想通过关键帧使用变量为 Html 元素设置动画,但我无法通过 DOM 找到方法。
HTML 代码
<div class="pawn" id="pawn1"></div>
CSS 关键帧代码
@keyframes mov_pawn_up {
0% {
bottom: 0%;
}
100% {
bottom: 700%;
}
}
在这里,我希望能够使用变量更改bottom 属性。
谢谢。
【问题讨论】:
标签:
javascript
css
web
dom
【解决方案1】:
您可以使用 CSS 变量来实现。基本思路如下
const board = document.querySelector(".board");
const root = document.documentElement;
const update = (evt, y) => {
const piece = evt.target;
piece.classList.remove("active");
piece.style.bottom = y + "px";
};
board.addEventListener("click", evt => {
const clicked = evt.target.closest(".piece");
if (!clicked) return;
const startY = Number(clicked.dataset.y);
const endY = startY - 20;
root.style.setProperty('--bottom-0', startY + "px");
root.style.setProperty('--bottom-100', endY + "px");
clicked.removeEventListener('animationend', update);
clicked.addEventListener('animationend', evt => update(evt, endY));
clicked.dataset.y = endY;
clicked.classList.add("active");
});
:root {
--bottom-0: 0px;
--bottom-100: -0px;
}
div {
position: relative;
}
span.piece {
position: relative;
}
span.piece.active {
animation-duration: 1.5s;
animation-name: mov_pawn;
}
@keyframes mov_pawn {
0% {
bottom: var(--bottom-0);
color: blue;
}
100% {
bottom: var(--bottom-100);
color: black;
}
}
<div class="board">
<span class="piece" data-y="0">X</span>
<span class="piece" data-y="0">X</span>
<span class="piece" data-y="0">X</span>
<span class="piece" data-y="0">X</span>
</div>