📜  如何动态创建“@-Keyframe”CSS 动画?

📅  最后修改于: 2021-08-31 01:56:45             🧑  作者: Mango

为了给我们的 HTML 网页动态分配关键帧动画,我们将使用 CSS 样式表的insertRule()方法。我们将从文本区域获取关键帧动画,然后将这些规则应用于我们的网页。

insertRule() 方法:该方法用于在当前 CSS 样式表中插入一些新的 CSS 规则(受一些限制)。

句法:

stylesheet.insertRule(rule [, index])

参数:该方法接受上面提到和下面描述的两个参数:

  • Rule:一个 DOMstring,它本质上是要插入的 CSS 规则。

  • index(optional): CSSStyleSheet.cssRules 中插入规则的索引

例子:

  • HTML:首先,让我们使用 HTML 和 CSS 来制作我们页面的布局结构。
    html
    
    
    
      
      
    
    
      

    GeeksforGeeks

      
      
        
           
      


    javascript
    // Javascript code to add keyframes
    let styleSheet = null;
    dynamicAnimation = (name,styles) => {
    // Creating a style element
    // To add the keyframes
    if (!styleSheet){
      styleSheet = document.createElement('style');
      styleSheet.type = 'text/css';
      document.head.appendChild(styleSheet);
    }
    // Adding The Keyframes
    styleSheet.sheet.insertRule(`@keyframes ${name} {${styles}}`,
    styleSheet.length
    );
    }
       
    const form = document.getElementById("input");
    const text = document.getElementById("text");
    form.addEventListener('submit', (e)=>{
      e.preventDefault()
      // Adding an animation
      // NewAnimation, with the 
      // Keyframes to the Stylesheet
      dynamicAnimation('newAnimation', text.value);
      // Timing and duration can be altered
      // As per user requirements
      document.getElementById("element").style.animation = 
      'newAnimation 3s infinite';
    });


    html
    
    
    
      
      
    
    
      

    GeeksforGeeks

      
      
        
           
         


    CSS
    25%{
        transform : translateX(25%);
        border-radius : 25%;
       }
    50%{
        transform : translateX(50%);
        border-radius : 50%;
       }
    75%{
        transform : translateX(25%);
        border-radius : 25%;
    }
    100%{
        transform : translateX(0%);
        border-radius : 0%;
    }


  • 输出:结构看起来像。
  • JavaScript:现在,我们将在上面的文本区域中输入关键帧动画并将其添加到我们创建的元素中。

    javascript

    // Javascript code to add keyframes
    let styleSheet = null;
    dynamicAnimation = (name,styles) => {
    // Creating a style element
    // To add the keyframes
    if (!styleSheet){
      styleSheet = document.createElement('style');
      styleSheet.type = 'text/css';
      document.head.appendChild(styleSheet);
    }
    // Adding The Keyframes
    styleSheet.sheet.insertRule(`@keyframes ${name} {${styles}}`,
    styleSheet.length
    );
    }
       
    const form = document.getElementById("input");
    const text = document.getElementById("text");
    form.addEventListener('submit', (e)=>{
      e.preventDefault()
      // Adding an animation
      // NewAnimation, with the 
      // Keyframes to the Stylesheet
      dynamicAnimation('newAnimation', text.value);
      // Timing and duration can be altered
      // As per user requirements
      document.getElementById("element").style.animation = 
      'newAnimation 3s infinite';
    });
    

实现代码:

html




  
  


  

GeeksforGeeks

  
  
    
       
     

CSS:现在,我们要将以下关键帧规则集添加到文本框元素。

CSS

25%{
    transform : translateX(25%);
    border-radius : 25%;
   }
50%{
    transform : translateX(50%);
    border-radius : 50%;
   }
75%{
    transform : translateX(25%);
    border-radius : 25%;
}
100%{
    transform : translateX(0%);
    border-radius : 0%;
}

输出:

  • 提交关键帧之前:

  • 提交关键帧后: