一. 实现原理
图片序列帧技术的原理其实非常简单,就是先将 Gif 图片找美工拆成一堆的 Png 或者 Jpg 格式的图片。然后在前端写一个定时器,每隔一段时间加载一张图片就可以了。这里还有一个需要注意的地方,就是我们要对每一次加载的图片在前端进行缓存,如果不缓存,在一些加载比较慢的电脑上就会出先闪一下的情况。
二. 演示以及说明
- 一般来说在 FireFox、Chrome浏览器中直接使用
<img src="xxx.gif">
就可以实现动图的效果,但是在 IE 内核的浏览器会出现直接使用 Gif 图片不动的问题
- 下面是一个直接使用 <img> 标签的实现动图效果的例子(方便对比)
<img src="" />
效果图:
- 接着下面是一个使用图片序列化播放效果的例子
- 使用这个方法有三个好处:
- 不会出现闪烁的问题;
- 不出在 IE 下出现动图卡住不动的 Bug ;
//html代码
<img id="imgDiv" src="Images/png/bzhan233niang1.png" width="420" height="480">
<input type="button" value="取消图片播放" onclick="CancelPlay();"/>
//js代码
<script type="text/javascript">
//定时器句柄
var timer = null;
//当前图片的序号
var imageIndex = 1;
window.onload = function () {
var imgDiv = document.getElementById("imgDiv");
if (imgDiv) {
//设定计时器
timer = window.setInterval(function () {
//缓冲图片
var bufferImage = new Image();
bufferImage.src = "Images/png/bzhan233niang" + imageIndex + ".png";
imgDiv.src = bufferImage.src;
//序号+1
imageIndex++;
//如果序号到达最大,那么重置
if (imageIndex > 20) {
imageIndex = 1;
}
}, 50);
}
};
function CancelPlay() {
if (timer != null) {
window.clearInterval(timer);
}
};
</script>
- 最后,要注意如下几点:
- 由于限制,我上面只能使用 Bmp 格式的文件,而且只传了20张,正常状态下一般使用 Png 格式的(文件大小会小一点) ;
- 图片的后缀名称必须和图片真正的格式相互匹配,否则在 IE 10 (也可能是在 IE 9 下,忘记了...)下会出现加载不出来的问题(显示为 " X ");
- 这种方式不能加载很多大的图片,只能加载一些简单的小图片动画,加载太多会导致内存溢出;
- 需要找美工把 Gif 制作成 Png (大小每一张要都和 Gif 原图大小相同),最好不要使用 Jpg ( Jpeg );
- img 中的 src 必须要先初始化,不然在文档加载慢的时候IE下会有一个加载失败的图标;
- 示例下载