如何使用JavaScript控制CSS Animations和Transitions
2017-10-09
展开全部
控制CSS Animation(动画)
就像我们刚刚了解到的,我们可以看到与元素动画相关的事件:animationStart,animationIteration,animationEnd。但是如果我们想改变CSS animation(动画)执行过程中的动画,还需要一点技巧!
animation-play-state属性
当你想在动画执行过程中暂停,并且接下来让动画接着执行。这时CSS的animation-play-state属性是非常有用的。你可以可以通过JavaScript像这样更改CSS(注意你的前缀):
element.style.webkitAnimationPlayState = "paused";
element.style.webkitAnimationPlayState = "running";
然而当使用animation-play-state让CSS 动画暂停时,动画中的元素变形也会以相同的方式被阻止。你不能使这种变形暂停在某个状态,使它变形,使它恢复,更不用期望它能从新的变形状态中恢复到流畅运行。为了实现这些控制,我们需要做一些更复杂的工作。
获取当前keyvalue的百分比
不幸的是,在这个阶段没有办法获得当前CSS动画关键帧的“完成百分比”。最好的获取近似值的方法是使用setInterval 函数在动画过程中迭代100次。它的本质是:动画持续的时间(单位是毫秒)/100。例如,如果动画时长4秒,则得到的setInterval的执行时间是每40ms(4000 / 100)。
var showPercent = window.setInterval(function() {
if (currentPercent < 100) {
currentPercent += 1;
} else {
currentPercent = 0;
}
// Updates a div that displays the current percent
result.innerHTML = currentPercent;
}, 40);
这种做法很不理想,因为函数实际运行频率要远少于每40ms。我发现将它设为39ms更准确。但这个也不是好实现,因为它依赖于浏览器,并非所有浏览器下都能得到很完美效果。
获取当前动画的CSS属性值
在理想的情况下,我们选择一个使用CSS动画的元素,删除该元素当前动画再给它添加个新的动画,让它可以从当前状态开始新的动画。但是现实情况却很复杂。
下面我们就有一个演示,用来测试获取和改变CSS动画”中间流”的技术。该动画让一个元素沿一个圆形路径移动,起始位置在圆形的顶部中心(或称为“十二点”)位置。当按钮被单击时,元素的起始位置变成元素当前移动到的位置。元素会沿着之前相同的路径继续移动,只是现在“起始”的位置变成了你按下按钮时元素移动到的位置。通过在动画的第一关键帧把元素的颜色变成红色,来表示元素动画起始点位置发生了改变。
http://www.w3cplus.com/animation/controlling-css-animations-transitions-javascript.html
就像我们刚刚了解到的,我们可以看到与元素动画相关的事件:animationStart,animationIteration,animationEnd。但是如果我们想改变CSS animation(动画)执行过程中的动画,还需要一点技巧!
animation-play-state属性
当你想在动画执行过程中暂停,并且接下来让动画接着执行。这时CSS的animation-play-state属性是非常有用的。你可以可以通过JavaScript像这样更改CSS(注意你的前缀):
element.style.webkitAnimationPlayState = "paused";
element.style.webkitAnimationPlayState = "running";
然而当使用animation-play-state让CSS 动画暂停时,动画中的元素变形也会以相同的方式被阻止。你不能使这种变形暂停在某个状态,使它变形,使它恢复,更不用期望它能从新的变形状态中恢复到流畅运行。为了实现这些控制,我们需要做一些更复杂的工作。
获取当前keyvalue的百分比
不幸的是,在这个阶段没有办法获得当前CSS动画关键帧的“完成百分比”。最好的获取近似值的方法是使用setInterval 函数在动画过程中迭代100次。它的本质是:动画持续的时间(单位是毫秒)/100。例如,如果动画时长4秒,则得到的setInterval的执行时间是每40ms(4000 / 100)。
var showPercent = window.setInterval(function() {
if (currentPercent < 100) {
currentPercent += 1;
} else {
currentPercent = 0;
}
// Updates a div that displays the current percent
result.innerHTML = currentPercent;
}, 40);
这种做法很不理想,因为函数实际运行频率要远少于每40ms。我发现将它设为39ms更准确。但这个也不是好实现,因为它依赖于浏览器,并非所有浏览器下都能得到很完美效果。
获取当前动画的CSS属性值
在理想的情况下,我们选择一个使用CSS动画的元素,删除该元素当前动画再给它添加个新的动画,让它可以从当前状态开始新的动画。但是现实情况却很复杂。
下面我们就有一个演示,用来测试获取和改变CSS动画”中间流”的技术。该动画让一个元素沿一个圆形路径移动,起始位置在圆形的顶部中心(或称为“十二点”)位置。当按钮被单击时,元素的起始位置变成元素当前移动到的位置。元素会沿着之前相同的路径继续移动,只是现在“起始”的位置变成了你按下按钮时元素移动到的位置。通过在动画的第一关键帧把元素的颜色变成红色,来表示元素动画起始点位置发生了改变。
http://www.w3cplus.com/animation/controlling-css-animations-transitions-javascript.html
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询