如何更改 JavaScript 中的动画计时功能?

Posted

技术标签:

【中文标题】如何更改 JavaScript 中的动画计时功能?【英文标题】:How do I change animation-timing-function in JavaScript? 【发布时间】:2013-06-22 04:56:21 【问题描述】:

我在 CSS 中有一个动画,它围绕其中心旋转图像。我希望能够在 javascript 中以编程方式更改 animation-timing-function 和 -webkit-animation-timing-function 等。这是代码和我尝试过的:

  <div id="content"> <div id="container"> 
<div id="outerQ"></div> <div id="innerQ">
</div>
 </div>
 <div id="logo"></div> 
<span id="sp"></span> 
<input type="button" id="linear" value="Linear"/>
 <input type="button" id="ease" value="Ease in and out"/>
 </div>

脚本:

<head>
    <script src="http://code.jquery.com/jquery-2.0.1.min.js"></script>
<script>
        $(document).ready(function ()
        
            $("#linear").click(function ()
            
                $("#innerQ").css("-webkit-animation-timing-function", "linear");
            );

            $("#ease").click(function ()
            
                $("#innerQ").css("-webkit-animation-timing-function", "ease-in-out");
            );
        );
    </script>

CSS:

 <style>
            body
            
                background: #018a9a;
                margin: 20px;
            

            #content
            
                width: 566px;
                height: 120px;
                position: fixed;
                top: 50%;
                left: 50%;
                margin-top: -80px;
                margin-left: -278px;
            

            #outerQ
            
                width: 96px;
                height: 120px;
                background-image: url('outerQ.png');
            

            #innerQ
            
                width: 96px;
                height: 120px;
                background-image: url('innerQ.png');
                position: absolute;
                left: 0;
                top: 0;
            

            #container
            
                width: 96px;
                height: 120px;
                float: left;
            

            #logo
            
                width: 470px;
                height: 120px;
                background-image: url('LogoLarge.png');
                float: left;
            

            #sp
            
                clear: both;
            

            @keyframes spin
            
                from 
                    transform: rotate(0deg);
                
                to 
                    transform: rotate(360deg);
                
            

            @-webkit-keyframes spin
            
                from 
                    -webkit-transform: rotate(0deg);
                
                to 
                    -webkit-transform: rotate(360deg);
                
            

            @-moz-keyframes spin
            
                from 
                    -moz-transform: rotate(0deg);
                
                to 
                    -moz-transform: rotate(360deg);
                
            

            #innerQ
            
                /*IE 10*/
                animation-name: spin;
                animation-iteration-count: infinite;
                animation-timing-function: linear;
                animation-duration: 1.3s;
                animation-play-state: running;
                transform-origin: 48px 50.5px;

                /*Chrome*/
                -webkit-animation-name: spin;
                -webkit-animation-iteration-count: 1;
                -webkit-animation-timing-function: linear;
                -webkit-animation-duration: 1.3s;
                -webkit-animation-play-state: running;
                -webkit-transform-origin: 48px 50px;

                /*Firefox*/
                -moz-animation-name: spin;
                -moz-animation-iteration-count: infinite;
                -moz-animation-timing-function: linear;
                -moz-animation-duration: 1.3s;
                -moz-animation-play-state: running;
                -moz-transform-origin: 48px 50px;
            
        </style>
</head>
<body>

HTML:

        <input type="button" id="linear" value="Linear"/>
        <input type="button" id="ease" value="Ease in and out"/>
    </div>


</body>

我在这里使用 webkit,因为我使用 Chrome,单击按钮什么也不做。我还想更改“动画迭代计数”和“动画持续时间”,但这些不起作用。唯一有效的是“-webkit-animation-play-state”。我也试过:

$("#innerQ").style.WebkitAnimationTimingFunction = "ease-in-out";

那也行不通。有没有办法在页面加载后更改这些属性?谢谢

【问题讨论】:

试试$("#innerQ")[0].style.…document.getElementById("innerQ").style.…。 jQuery 集合没有 style 属性。 html 的其余部分在哪里? id 为“innerQ”的元素在哪里??? 我已经尝试了其他方法,它们也不起作用。 你尝试过什么?如果需要,可以链接。 我不太明白你的答案,我尝试将函数作为点击事件并在那里更改类。那没有用。链接是什么? 【参考方案1】:
function function_name() 
    document.getElementById('innerQ"').className = "innerQ";

CSS

.innerQ
        
           //you css code(put all timing stuff here!!!)
        

//Step 1--->Put you desired css animation in a css class
//Step 2--->add that css class with javascript(className)
//Step 3---->Call function animation on click of the button

【讨论】:

永远不要把你的代码放在评论框里!!!把它放在你的问题中或尝试一些小提琴!!!转到 meta *** 并学习如何提问!!!

以上是关于如何更改 JavaScript 中的动画计时功能?的主要内容,如果未能解决你的问题,请参考以下文章

非活动选项卡中的 Javascript/Jquery 计时错误

如何为每个属性定义具有不同计时功能的 CSS 动画?

javascript 通过JavaScript计时器动画模型项

CSS有个类似过渡的功能,是啥呢?

Flash 计时器中的文本动画

使用 CSS attr() 函数和数据标签进行动画计时