@keyframes アニメーションを js スクリプト メソッド appendRule(n)、deleteRule(n)、findRule(n) で編集する

@keyframes アニメーションで宣言されたキーフレーム ブロックは、appendRule(n) または deleteRule(n) を使用して変更できます。n はキーフレームの完全なセレクターです。キーフレームの内容は findRule(n) で取得できます。

1. 上記のコード:

<!DOCTYPE html>

<head>
  <title>通过js脚本编辑@keyframes动画</title>
  <style>
    .qq {
      
      
      width: 200px;
      height: 200px;
      /* 指定动画名称 */
      animation-name: myAnimation;
      /* 定义动画的时长 */
      animation-duration: 5s;
    }

    @keyframes myAnimation {
      
      
      from {
      
      
        background-color: blue;
      }

      to {
      
      
        background-color: red;
      }
    }
  </style>
</head>

<body>
  <div class="qq"></div>

  <script type="text/javascript">
    let myRules = document.styleSheets[0].cssRules;
    let keyframesRule = myRules[1]; // a CSSKeyframesRule
    //获取指定的关键帧的选择符和内容
    let aRule = keyframesRule.findRule("from").cssText;
    console.log(aRule);//0% { background-color: blue; }
    //删除from关键帧
    keyframesRule.deleteRule("from");
    //在动画末尾添加50%关键帧
    keyframesRule.appendRule("50% {background-color: green}");
  </script>
</body>

</html>

2. コードの説明

最初に let myRules = document.styleSheets[0].cssRules; を渡して、すべての CSS のすべてのコンテンツを取得します。
ここに画像の説明を挿入
この例で定義されているアニメーションは<style></style>2 番目なので、 let keyframesRule = myRules[1]; を使用して @keyframes アニメーションを取得します。

定義されたアニメーションを取得するのは簡単です。keyframesRule.findRule(“from”).cssText; ステートメントの場合、keyframesRule は定義されたキーフレーム アニメーションであり、返される結果は一致するキーフレームです。このステートメントは 0% {background-color: blue; } を返します (from は 0%、to は 100%)

keyframesRule.deleteRule("from"); は最後の from キーフレームを削除しますが、複数の from キーフレームがある場合は最後のものが削除されます。ここではfromキーフレームを削除していますが、最初は背景色が青ではなくデフォルトの白になっています。

keyframesRule.appendRule("50% {background-color: green}"); は、@keyframes ブロックの最後のキーフレームの後に 50% のキーフレームを追加します。(@keyframes ブロック内のキーフレームは昇順に並べ替える必要はありません。通常、開発者は便宜上、キーフレームをこの順序で記述しますが、順序どおりに記述されていなくても問題ありません)。実行後、div が最初に青から緑に変化し、最後に赤に変わることがわかります (注: この例の from はコードの前の行によって削除されています。最初に青から緑に変化し、最後に赤に変化することを確認する必要があります)赤の効果に変わります。keyframesRule.deleteRule("from"); コメントアウトする必要があります)

おすすめ

転載: blog.csdn.net/weixin_46687032/article/details/125096808