解决浏览器background-image属性不支持css3动画

问题

最近在使用background-image属性来实现CSS3的逐帧动画时,碰到了个问题。在chrome浏览器上,background-image属性是支持css3动画的,可是到了firefox上,就彻底看不到任何动画。css

缘由

经过网上查找,才发现W3C标准中明确background-image属性是不支持动画的,因此firefox因为遵循了该标准,并无给该属性支持动画。html

解决过程

解决方法是使用backgrond-position属性,该属性在W3C标准中是支持动画的,所以全部浏览器应该是能够支持的。这在实现时,原来咱们能够每一张图片做为一帧,如今就要改为把每一帧的图片拼接到一张图片上,而后根据background-position定位到每一帧的图片,这里我推荐一个比较好的插件grunt-spritesmith,它能够帮助你快速的把你每一帧的图片拼接在一块儿并生成相应的backgrond-position属性定位信息。css3

从background-image属性换成background-position属性来实现动画后,又遇到了个问题。因为css3动画的关键帧之间是有补间动画,所以background-position属性在每一帧之间的过渡时,它的效果是在这张拼接的图片上的两个定位之间进行移动,这个并非我想要的。web

所以就须要去除该补间动画,直接跳过这关键帧之间的过渡。这就须要应用到animation-timing-function属性,该属性可使用阶跃函数steps()定义关键帧之间分多少步进行过渡,这里设置为step(1)就表示关键帧之间一步到位,去除了补间动画,这就不会让图片出如今background-position属性之间的移动动画,而是看到直接的图片切换。关于阶跃函数,可具体查看某大神的博客chrome

 

例子:npm

  <div class="test1"></div>
  <style> .test1 {
  width: 90px;
  height: 60px;
  -webkit-animation-name: skyset;
  -webkit-animation-duration: 2000ms;
  -webkit-animation-iteration-count: infinite; /*无限循环*/
  -webkit-animation-timing-function: step-start;
  }
   
  @-webkit-keyframes skyset {
  0% {
  background: red;
  }
  50%{
  background: blue
  }
  100% {
  background: yellow;
  }
  }</style>
  <script></script>
相关文章
相关标签/搜索