首页 > 代码库 > 解决浏览器background-image属性不支持css3动画

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

问题

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

原因

通过网上查找,才发现W3C标准中明确background-image属性是不支持动画的,所以firefox由于遵循了该标准,并没有给该属性支持动画。

解决过程

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

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

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

 

例子:

  <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>

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