反向的css动画,反向使用CSS动画(通过重置状态?)

小编典典

不,没有办法单独使用CSS重新启动动画。您必须使用JavaScript从元素中删除动画,然后将其重新应用到元素(经过延迟)以重新启动。

以下是[W3C的CSS3动画规范说的(在不同的上下文中,但这一点也应适用于这种情况):

还要注意,更改“ animation- name”的值不一定会重新启动动画(例如,如果应用了一个动画列表,并且从列表中删除了一个动画,则仅该动画将停止;其他动画将继续)。 为了重新启动动画,必须将其删除然后重新应用。

重点是我的

注意:**

本文引用了Oli的涉猎内容,该文章声称更改持续时间,迭代计数等属性会使其在Webkit上重新启动,但由于它们已不再在Chrome上运行,因此似乎已经过时了)。

摘要:

尽管您已经谈到以下内容,但为了完整性起见,我将再次重申:

将动画应用于元素后,它将保留在元素上,直到将其删除。

UA会跟踪元素上的动画以及动画是否完成。

当您将相同的动画应用于:checked(尽管方向不同)时,UA不会执行任何操作,因为该动画已经存在于元素上。

单击复选框时位置(瞬时)的切换是因为transform在:checked选择器中应用了。动画的存在没有区别。

解决方案:

从下面的代码片段中可以看出,即使使用JavaScript,使用单个动画实现此操作也非常复杂。

var input = document.getElementsByClassName("my-checkbox")[0];

input.addEventListener('click', function() {

if (this.checked) {

this.classList.remove('my-checkbox');

window.setTimeout(function() {

input.classList.add('anim');

input.classList.add('checked');

}, 10);

} else {

this.classList.remove('anim');

window.setTimeout(function() {

input.classList.remove('checked');

input.classList.add('my-checkbox');

}, 10);

}

});

input {

transform: translate3d(50px, 0, 0);

}

.my-checkbox {

animation: moveLeft 1s;

animation-direction: reverse;

}

.checked {

transform: translate3d(0px, 0, 0);

}

.anim{

animation: moveLeft 1s;

}

@keyframes moveLeft {

from {

transform: translate3d(50px, 0, 0);

}

to {

transform: translate3d(0px, 0, 0);

}

}

因此, 最好的选择 (如果要坚持使用CSS动画)是 使用两种不同的动画 。

或者,您也可以查看Marcelo的评论。如果实际用例恰好是小提琴中提供的用例,那么transition就足够了,animation并且不是必需的。过渡本质上可以在正向和反向两个方向上起作用,因此将是一个更安全的选择。

2020-05-16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值