视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JS+canvas操作gif动图
2020-11-27 19:54:08 责编:小采
文档


这次给大家带来JS+canvas操作gif动图,JS+canvas操作gif动图的注意事项有哪些,下面就是实战案例,一起来看一下。

HTML5 canvas可以读取图片信息,绘制当前图片。于是可以实现图片马赛克,模糊,色值过滤等很多图片特效。我们这里不用那么复杂,只要读取我们的图片,重绘下就可以。

HTML代码:

<imgid="testImg"src="xxx.gif"width="224"height="126">
<p><inputtype="button"id="testBtn"value="停止"></p>

JS代码:

if('getContext'indocument.createElement('canvas')) {
 HTMLImageElement.prototype.play =function() {
 if(this.storeCanvas) {
 // 移除存储的canvas
 this.storeCanvas.parentElement.removeChild(this.storeCanvas);
 this.storeCanvas =null;
 // 透明度还原
 image.style.opacity ='';
 }
 if(this.storeUrl) {
 this.src =this.storeUrl;
 }
 };
 HTMLImageElement.prototype.stop =function() {
 varcanvas = document.createElement('canvas');
 // 尺寸
 varwidth =this.width, height =this.height;
 if(width && height) {
 // 存储之前的地址
 if(!this.storeUrl) {
 this.storeUrl =this.src;
 }
 // canvas大小
 canvas.width = width;
 canvas.height = height;
 // 绘制图片帧(第一帧)
 canvas.getContext('2d').drawImage(this, 0, 0, width, height);
 // 重置当前图片
 try{
 this.src = canvas.toDataURL("image/gif");
 }catch(e) {
 // 跨域
 this.removeAttribute('src');
 // 载入canvas元素
 canvas.style.position ='absolute';
 // 前面插入图片
 this.parentElement.insertBefore(canvas,this);
 // 隐藏原图
 this.style.opacity ='0';
 // 存储canvas
 this.storeCanvas = canvas;
 }
 }
 };
}
 
varimage = document.getElementById("testImg"),
 button = document.getElementById("testBtn");
 
if(image && button) {
 button.onclick =function() {
 if(this.value =='停止') {
 image.stop();
 this.value ='播放';
 }else{
 image.play();
 this.value ='停止';
 }
 };
}

上面代码并未详尽测试,以及可能的体验问题(IE闪动)没有具体处理(影响原理示意),若要实际使用,需要自己再微调完美下。

不足:

1. IE9+支持。IE7/IE8不支持canvas没搞头。

2. 只能停止gif,不能真正意义的暂停。因为canvas获得的gif图片信息为第一帧的信息,后面的貌似获取不到。要想实现暂停,而不是停止,还需要进一步研究,如果你有方法,非常欢迎分享。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

HTML标签与DOM节点结合

js禁止浏览器后退事件

下载本文
显示全文
专题