javascript - CSS3 重置动画需要超时(如果从外部样式表设置动画)

标签 javascript css css-animations

我有一个 CSS 动画。我将它应用于具有类 span 的 div 元素中的跨度。我从外部样式表应用它:

.skill > span { width:100%; -moz-animation:anim-skill 2s ease-out; -webkit-animation:anim-skill 2s ease-out; }

.anim-skill {width:100%; animation:anim-skill 2s ease-out; -moz-animation:anim-skill 2s ease-out; -webkit-animation:anim-skill 2s ease-out; -o-animation:anim-skill 2s ease-out;}

@keyframes anim-skill { from {width:0px;} to  {width:100%} }

当我想在运行时重置动画时,我会这样做:

var mySkill = document.querySelector('.skill');
var bar = mySkill.childNodes[0];
//make it "from" state
bar.style.animation = 'none';
mySkill.style.width = 0;

//make it run
setTimeout(function () {
    mySkill.style.width = '';
    bar.style.animation = '';
}, 20);

这很hacky。有没有办法在不使用 setTimeout 的情况下重置动画?注意:如果我的超时为 10 毫秒或更短,它也不起作用。

最佳答案

问题是您不能删除类并重新设置它,而不让浏览器自行呈现。

实现此目的的非 hacky 方法稍微复杂一些:让动画自行移除

一个快速而肮脏的实现可以是:

$(document).ready(function() {
    var ele = document.getElementById("test");

    ele.addEventListener( 'webkitAnimationEnd', 
    function( event ) { ele.className = ""; }, false );
})

当动画结束时,这将从元素中删除动画类。之后,您可以再次设置类(class),没有问题

fiddle

关于javascript - CSS3 重置动画需要超时(如果从外部样式表设置动画),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22129216/

相关文章:

javascript - 使用 jQuery 将 ul 拆分为更多 ul

javascript - 尝试水平对齐倒数计时器(第一次编码/构建)

html - 如何在动画后保留样式?

javascript - 带有按钮的 Jquery 自动 slider

javascript - 实现与模态框关联的作业删除按钮

javascript - 在 jquery 中继器的 div 中附加图像

javascript - 更改 ),用 JavaScript 表示为字符串

javascript - 如何在 JQuery TE 工具栏中只配置我需要的选项?

html - 全宽显示子 div

带有渐变 mask 的 CSS 垂直滚动选框