使用JS和canvas实现gif动图的停止和播放代码


Posted in Javascript onSeptember 01, 2017

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

使用JS和canvas实现gif动图的停止和播放代码

HTML代码:

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

JS代码:

if ('getContext' in document.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() {
  var canvas = document.createElement('canvas');
  // 尺寸
  var width = 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;
   }
  }
 };
}
 
var image = 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图片信息为第一帧的信息,后面的貌似获取不到。要想实现暂停,而不是停止,还需要进一步研究,如果你有方法,非常欢迎分享。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用phantomjs进行网页抓取的实现代码
Sep 29 Javascript
两种JS实现屏蔽鼠标右键的方法
Aug 20 Javascript
JS中的数组方法笔记整理
Jul 26 Javascript
vue.js实现请求数据的方法示例
Feb 07 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
Mar 07 Javascript
Linux CentOS系统下安装node.js与express的方法
Apr 01 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
javascript实现的时间格式加8小时功能示例
Jun 13 Javascript
JointJS JavaScript流程图绘制框架解析
Aug 15 Javascript
java实现单链表增删改查的实例代码详解
Aug 30 Javascript
Vue退出登录时清空缓存的实现
Nov 12 Javascript
关于Promise 异步编程的实例讲解
Sep 01 #Javascript
[js高手之路]单例模式实现模态框的示例
Sep 01 #Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 #jQuery
详解使用angular的HttpClient搭配rxjs
Sep 01 #Javascript
JS中关于正则的巧妙操作
Aug 31 #Javascript
JavaScript表单即时验证 验证不成功不能提交
Aug 31 #Javascript
js实现canvas保存图片为png格式并下载到本地的方法
Aug 31 #Javascript
You might like
php 调试利器debug_print_backtrace()
2012/07/23 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
jQuery ready函数滥用分析
2011/02/16 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
Python自定义简单图轴简单实例
2018/01/08 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
Python实现播放和录制声音的功能
2020/08/12 Python
如何完美的建立一个python项目
2020/10/09 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
2014年上半年工作自我评价
2014/01/18 职场文书
艺术节主持词
2014/04/02 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
新教师个人工作总结
2015/02/06 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
普通员工辞职信范文
2015/05/12 职场文书
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS