在 Javascript 中更新动画持续时间
Updating animation-duration in Javascript
通过 setProperty("-webkit-animation-duration", value + "s")
JavaScript 更改 animation-duration
(或在本例中为 -webkit-animation-duration
)属性后,我看到了 Chrome 中元素检查器的变化,但实际的动画速度没有变化。此外,如果我在元素检查器中手动更改值,也不会有任何变化。
我设置了一个输入字段来获取动画速度值,该值连接到以下事件侦听器(orbitFactor
是在其他地方定义的全局变量):
function updateSpeed(event) {
var planetDiv = document.getElementById(event.target.id);
planetDiv.style.setProperty("width", event.target.value / orbitFactor);
planetDiv.style.setProperty("height", event.target.value / orbitFactor);
planetDiv.style.setProperty("-webkit-animation-duration", event.target.value + "s");
}
事件侦听器肯定会被调用,元素检查器中的-webkit-animation-duration
值确实会更改,但动画的速度不会更改。关于-webkit-animation-duration
,我在这里缺少什么吗?我正在更改的其他属性(例如 width
和height
)使用相同的方法确实发生了明显的变化。
提前致谢
编辑:请注意,这是Chrome 40中的一个问题,但它在Chrome 42和Firefox 35中正常工作。
直接使用 []
设置 style 元素以访问供应商前缀或本机 css 道具。 将允许您重新应用动画持续时间属性并更改行星的旋转速度。无需jquery。还值得一提的是,在撰写本文时,Firefox 支持无前缀版本的 css 属性,而对其他浏览器则有混合支持或供应商前缀支持。如果考虑使用这些动画,给定的开发人员应该认真考虑他们的潜在用户群,并且可能不会将其作为 Web 应用程序的核心功能。在此处查看更多支持信息:
http://caniuse.com/#feat=css-animation
Le 代码:
orbitFactor = 1e6
function updateSpeed(event) {
var orbitDiv = document.getElementById("Mercury-orbit");
orbitDiv.style["-webkit-animation-duration"] = event.target.value + "s";
}
function updateDiameter(event) {
var planetDiv = document.getElementById("Mercury");
planetDiv.style["width"] = event.target.value + "px";
planetDiv.style["height"] = event.target.value + "px";
}
document.getElementById("orbit-period").addEventListener("change", updateSpeed);
document.getElementById("planet-diameter").addEventListener("change", updateDiameter);
重新启动CSS动画或更改其参数并不容易。但是,我发现了一些技巧。请参阅以下代码。我将动画参数分离到类中,我添加/删除了该类。加上在CSS-Tricks文章中发现的技巧,它有效:
$(document).ready(function() {
$('#slow-btn').click(function(){
$('#testdiv').removeClass("testanimation");
$('#testdiv').css("-webkit-animation-duration", "5s");
$('#testdiv').get(0).offsetWidth = $('#testdiv').get(0).offsetWidth;
$('#testdiv').addClass("testanimation");
});
$('#fast-btn').click(function(){
$('#testdiv').removeClass("testanimation");
$('#testdiv').css("-webkit-animation-duration", "1s");
$('#testdiv').get(0).offsetWidth = $('#testdiv').get(0).offsetWidth;
$('#testdiv').addClass("testanimation");
});
});
#testdiv {
display: block;
position: absolute;
left: 100px;
width: 100px;
height: 100px;
background: red;
}
.testanimation {
-webkit-animation: myanimation 2s linear alternate infinite;
animation: myanimation 2s linear alternate infinite;
}
@-webkit-keyframes myanimation {
from {left: 100px;}
to {left: 400px;}
}
@keyframes myanimation {
from {left: 100px;}
to {left: 400px;}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='testdiv' class='testanimation'></div>
<input id='slow-btn' type='button' value='slow' />
<input id='fast-btn' type='button' value='fast' />
在W3C标准中,它说它没有提到我们可以更改动画持续时间。 所以这一切都取决于explorer.chrome是的,但即不。因此,当我们想要更改时间时,我们应该更新整个动画。
var animation = 'animationName time linear infinite';
var $element= $('selector').css('animation', 'none');
setTimeout(function(){
$element.css('animation', animation);
});
这项工作在IE上
- 在jQuery中,短距离长持续时间的精细字体大小动画
- jQuery动画的持续时间就像一个延迟
- 速度.js动画两个属性时持续时间不同
- d3 动画中的持续时间
- JS:设置src更改的动画持续时间
- 如何为动画持续时间较短的元素制作连续动画's[GASP]
- 在 Javascript 中更新动画持续时间
- JavaScript 动画的持续时间并不精确
- 在同一持续时间内对两个属性进行动画处理
- 网页动画 API - 改变动画持续时间
- 传单.js设置适合边界动画的持续时间
- 对画布上的移动形状或动画形状应用持续时间
- CSS3关键帧-改变动画持续时间导致“;跳跃”;
- 无法使用 jQuery 更改正文上的“动画持续时间”CSS
- 相同CSS动画的不同动画持续时间
- 当Css3动画被相同的事件触发时,具有相同持续时间的动画在不同的时间结束
- 改变动画持续时间CSS3不工作在Chrome
- 如何按比例设置这个jQuery动画的持续时间?
- 如何使用Javascript设置动画的持续时间
- “返回顶部”按钮每次单击都会延长动画持续时间