Meta
VILIC15:03 - 07.29 2010
CSS3+PNG解决GIF动画无半透明的问题( 4 responses )

因为GIF不支持半透明, 在使用时, 如果背景固定还好说, 如果背景是变化的, 那么透明的GIF图片边缘会有很明显的粗糙锯齿.

最近做JS游戏, 因为只针对设备开发的, iPhone和iPod里的Mobile Safari支持部分CSS3, 所以就想出了这个解决办法. 虽然比较小众, 但是对于我来说, 还是有价值的.

当然, 因为PNG图一般都偏大, 所以这个方案不适用于帧数很多的动画.

思路是很简单的, 通过改变背景的位置(背景定位)来实现.

首先我们需要把动画中出现的每一帧连成一个长条, 就像电影一样, 然后通过CSS3, 使它们逐帧显示出来. 例子如下(以Webkit为例).

@-webkit-keyframes 'somename' {
    0% { background-position: 0px; }
    49.9999% { background-position: 0px; }
    50% { background-position: -100px; }
    100% { background-position: -100px; }
}

#someid {
    background-image: url(somepic.png);
    -webkit-animation-name: somename;
    -webkit-animation-duration: 0.2s;
    -webkit-animation-iteration-count: infinite;
}

属性的意思我就不解释了, 英文, 很明了的. 因为CSS3动画本身貌似不是为逐帧的动画而生, 所以, 请注意49.9999%和50%这个百分比, 因为相隔很近, 可以让背景一次性从一个位置, 跳动到另一个位置, 这样以来, 就模拟了帧的变化.

如果想了解更多的CSS3动画技术, 请Google之. 其实我也不是很懂. 所以说不定会有更加直接的办法呢?

Original link of this archive: http://www.vilic.info/blog/archives/458
本文的原始链接: http://www.vilic.info/blog/archives/458

There're 4 Comments to "CSS3+PNG解决GIF动画无半透明的问题"
  • 耗子15:21 - 08.09 2010
    用JS来改变css sprite就可以兼容低级浏览器了。不过IE6用透明png,虽然没有毛边,但有灰边。主要是做这个动画的图片做起来貌似很麻烦,得先用flash做好动画补间,然后导出一侦侦png图片,再将一张张图片拼到同一张画布上去。还有,如果每一侦时间不一样的话,貌似就不好控制了.
    你的博客很好,能换个友链么 http://haozi.cc 你的链接我已经加上了
    耗子
  • Vilic15:29 - 08.09 2010
    @耗子:
    谢谢提议. 链接我已经加上了. 因为这些游戏是专门给iPhone/iPod做的, 所以不用考虑太多的兼容问题.
    Vilic
  • mot01:20 - 09.03 2011
    请问下你做的web os上传到空间后,打开首页一直都显示正在加载。为什么呢?地址:www.xianqini.com/a
    mot
  • VILIC11:02 - 09.04 2011
    @mot hi, 刚刚我试了下, 貌似是因为一个文件未找到. 你确定所有文件都正确上传, 并且没有修改配置位置吗?
    VILIC
Leave a Comment