【问题标题】: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>

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 1970-01-01
    • 2018-07-19
    • 2020-10-17
    • 2018-08-05
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多