【发布时间】:2015-10-26 16:51:58
【问题描述】:
我一直认为 CSS3 动画(不同于 CSS3 过渡)一旦开始,总是完成工作,无论选择器是否不再匹配激活它们的元素。
我今天意识到我可能错了。
在以下示例中,动画由 :focus 和 :active 伪类触发。
关注第一个文本字段:
- 如果你慢慢按下tab按钮,你会看到动画正确开始和结束;
- 如果你快速按下tab按钮,你会看到一旦新元素获得焦点,旧元素的动画立即结束并消失。
@-webkit-keyframes pressed {
0%, 100% { transform : scale(1); }
50% { transform : scale(2); }
}
@keyframes pressed {
0%, 100% { transform : scale(1); }
50% { transform : scale(2); }
}
a:focus, a:active {
-webkit-animation : pressed 2s;
animation : pressed 2s;
}
a, input {
border : 1px solid silver;
padding : 5px;
height : 40px;
line-height : 28px;
margin : 0px;
display : inline-block;
width : 33.3%;
box-sizing : border-box;
background : white;
vertical-align : middle;
}
a {
color : dodgerBlue;
text-decoration : none;}
input {
color : red;
}
<input type="text" id="foo" value="Start here, then press tab" /><a href = "#">
Lorem
</a><a href = "#">
Ipsum
</a><a href = "#">
dolor
</a><a href = "#">
sit
</a><a href = "#">
amet
</a><a href = "#">
consectetur
</a><a href = "#">
adipiscing
</a><a href = "#">
elit
</a>
我知道我可以通过以下应用使其顺利结束(在某些浏览器上,例如 Firefox 是,Chrome 否):
a { transition: all 2s ease; }
因此,如果它加载到(例如)40%,它会从 40% 动画回到 0%,而不是立即下降到 0%。
- 我也知道我可以使用 jQuery 动画而不是 CSS3 动画并让它以这种方式工作;
(编辑:根据评论,如果我没看错的话,即使是 jQuery 动画也不会这样工作)
作为一名 CSS3 动画新手,我在这里要问的是:
是否有一种纯 CSS3 方式可以强制动画运行到 100%,无论初始条件是否不再有效?
【问题讨论】:
-
看起来不像。甚至 Animations level 2 也只是为此提供了一个 DOM 事件,这意味着您现在甚至无法通过脚本控制它,直到实现
animationcancel。 -
不完全相关,但您能否使用
transition顺利地将其动画化?我以前从未见过这种情况,我的 sn-p 不会发生这种情况(在 Chrome v38 中)。 -
@BoltClock:所以答案是 “不,即使使用 jQuery” ?我还没有尝试过,只是假设通过编写脚本它会起作用。好吧,我想我会用一些 JS 魔法来解决问题,然后:/ 谢谢,随时添加它作为答案。
-
@Harry:你说得对,它在 Firefox 上完美运行,但在 Chrome 上却无法运行(无论是动画还是 -webkit-animation...):|
-
@Harry 是的,这就是我做这类事情的方式,例如。在需要时用于 IE 的逆向兼容性(不过通常使用 jQuery)。随意将其添加为答案,我总是支持每个(有用的)答案。 PS:我也不是移动开发专家...实际上,我什至不是前端开发人员:DI 就像照顾这部分一样,特别是因为我们超级昂贵的前端人员甚至更多比我马虎:|所以我要全栈和广度优先。
标签: html css css-selectors css-animations