html – 如何顺利地将CSS动画恢复到当前状态?

前端之家收集整理的这篇文章主要介绍了html – 如何顺利地将CSS动画恢复到当前状态?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我没有默认的动画元素.还有一个触发器让我打开&关闭该元素的动画.动画本身非常简单:从左到右移动元素.

当我停止动画时,我的元素显然会回到初始位置.但它突然回来了,并不顺利.所以它只是改变了我从关闭动画到初始动画时的位置.我的问题是:有没有办法让它顺利停止,所以当我关闭动画时它会回到初始位置但是平滑/动画.

这是我的元素和动画:http://jsfiddle.net/2Lwftq6r/

HTML:

  1. <input type="checkBox" id="anim">
  2. <label for="anim">Start / stop animation</label>
  3. <div></div>

CSS:

  1. div {
  2. margin-top: 50px;
  3. width: 50px; height: 10px;
  4. background: #000;
  5. transform: translateX(0);
  6. }
  7.  
  8. #anim:checked ~ div {
  9. -webkit-animation: dance 2s infinite ease-in-out;
  10. -moz-animation: dance 2s infinite ease-in-out;
  11. }
  12.  
  13. @-webkit-keyframes dance {
  14. 0%,100% { -webkit-transform: translateX(0); }
  15. 50% { -webkit-transform: translateX(300px); }
  16. }
  17. @-moz-keyframes dance {
  18. 0%,100% { -moz-transform: translateX(0); }
  19. 50% { -moz-transform: translateX(300px); }
  20. }

解决方法

你不能只用CSS3方式存档这个效果,但如果你真的需要它,你可以使用jQuery CSS3 Transitions.我的解决方案( http://jsfiddle.net/sergdenisov/3jouzkxr/10/):

HTML:

  1. <input type="checkBox" id="anim-input">
  2. <label for="anim-input">Start / stop animation</label>
  3. <div class="anim-div"></div>

CSS:

  1. .anim-div {
  2. margin-top: 50px;
  3. width: 50px;
  4. height: 10px;
  5. background: #000;
  6. }
  7.  
  8. .anim-div_active {
  9. -webkit-animation: moving 2s ease-in-out infinite alternate;
  10. animation: moving 2s ease-in-out infinite alternate;
  11. }
  12.  
  13. .anim-div_return {
  14. -webkit-transition: -webkit-transform 0.5s ease-in-out;
  15. transition: transform 0.5s ease-in-out;
  16. }
  17.  
  18. @-webkit-keyframes moving {
  19. 0% { -webkit-transform: translateX(0); }
  20. 100% { -webkit-transform: translateX(300px); }
  21. }
  22.  
  23. @keyframes moving {
  24. 0% { transform: translateX(0); }
  25. 100% { transform: translateX(300px); }
  26. }

使用Javascript:

  1. $('#anim-input').on('change',function() {
  2. var $animDiv = $('.anim-div');
  3. if (this.checked) {
  4. $animDiv.removeClass('anim-div_return')
  5. .addClass('anim-div_active');
  6. return;
  7. }
  8.  
  9. var transformValue = $animDiv.css('webkitTransform') ||
  10. $animDiv.css('transform');
  11. $animDiv.css({'webkitTransform': transformValue,'transform': transformValue})
  12. .removeClass('anim-div_active');
  13.  
  14. requestAnimationFrame(function() {
  15. $animDiv.addClass('anim-div_return')
  16. .css({'webkitTransform': 'translateX(0)','transform': 'translateX(0)'});
  17. });
  18. });

附:
供应商前缀基于http://caniuse.com的实际浏览器列表.

猜你在找的HTML相关文章