使用JS和canvas实现gif动图的停止和播放代码
发布时间 - 2026-01-11 03:03:34 点击率:次HTML5 canvas可以读取图片信息,绘制当前图片。于是可以实现图片马赛克,模糊,色值过滤等很多图片特效。我们这里不用那么复杂,只要读取我们的图片,重绘下就可以。

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图片信息为第一帧的信息,后面的貌似获取不到。要想实现暂停,而不是停止,还需要进一步研究,如果你有方法,非常欢迎分享。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# canvas
# gif
# 动画
# html5
# nodejs实现截取上传视频中一帧作为预览图片
# javascript帧动画(实例讲解)
# 复杂的javascript窗口分帧解析
# 详解关于JSON.parse()和JSON.stringify()的性能小测试
# JS使用JSON.parse()
# JSON.stringify()实现对对象的深拷贝功能分析
# 关于JSON.parse()
# JSON.stringify()
# jQuery.parseJSON()的用法
# js获取 gif 的帧数的代码实例
# 你有
# 要想
# 不支持
# 可以实现
# 若要
# 还需
# 大家多多
# 移除
# 就可以
# 而不是
# 插入图片
# 要进一步
# src
# testImg
# xxx
# width
# height
# button
# testBtn
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Laravel如何配置Horizon来管理队列?(安装和使用)
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
免费视频制作网站,更新又快又好的免费电影网站?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
JavaScript如何实现路由_前端路由原理是什么
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
如何快速搭建个人网站并优化SEO?
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
如何在腾讯云服务器上快速搭建个人网站?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何彻底卸载建站之星软件?
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
BootStrap整体框架之基础布局组件
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
如何在云服务器上快速搭建个人网站?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
奇安信“盘古石”团队突破 iOS 26.1 提权
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
如何彻底删除建站之星生成的Banner?
*服务器网站为何频现安全漏洞?
Android GridView 滑动条设置一直显示状态(推荐)
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
香港服务器租用每月最低只需15元?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
浅谈javascript alert和confirm的美化
Laravel如何为API生成Swagger或OpenAPI文档
微信小程序 五星评分(包括半颗星评分)实例代码
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
如何在七牛云存储上搭建网站并设置自定义域名?
Laravel如何处理异常和错误?(Handler示例)
Laravel怎么判断请求类型_Laravel Request isMethod用法
使用C语言编写圣诞表白程序
打造顶配客厅影院,这份100寸电视推荐名单请查收
如何登录建站主机?访问步骤全解析
浅谈redis在项目中的应用
,在苏州找工作,上哪个网站比较好?
制作旅游网站html,怎样注册旅游网站?
如何快速辨别茅台真假?关键步骤解析
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
详解阿里云nginx服务器多站点的配置
bing浏览器学术搜索入口_bing学术文献检索地址
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问

