用HTML5实现播放gif文件

news/2024/5/21 20:37:54

用HTML5实现播放gif文件

在HTML5中,你可以使用<img>标签来播放GIF文件。GIF文件本质上是一种图像格式,它支持动画效果,因此当在网页上加载时,它会自动播放动画。先看一个简单的示例:

<!DOCTYPE html>
<html>
<head><title>GIF播放</title></head>
<body><img id="gifImage" src="example.gif" alt="GIF动画"  width="300" ></body>
</html>

指定GIF动画在网页上的播放区域大小,可以通过调整<img>标签的width和height属性来实现。为了保持GIF动画的原始宽高比,你可以只设置宽度或高度中的一个值,另一个值则让浏览器自动计算以保持比例。

下面给出一个复杂的示例

用一个列表装载多个gif文件,选中哪个,就播放哪个。效果图:

提示:实际运行画面是动态的。

用一个列表装载多个gif文件(如gif1.gif、gif2.gif、gif3.gif),选中哪个,就播放哪个。

你可以gif1.gif、gif2.gif、gif3.gif等替换为您的实际GIF文件名,并确保这些文件位于与HTML文件相同的目录下,或者提供正确的路径。源码如下:

<!DOCTYPE html>
<html>
<head><title>选择并播放GIF动画</title></head>
<body><select id="gifSelect" onchange="playSelectedGif()"><option value="gif1.gif">GIF 1</option><option value="gif2.gif">GIF 2</option><option value="gif3.gif">GIF 3</option>
</select>
<br>
<img id="selectedGif" src="gif1.gif" alt="选择的GIF动画" width="300"><script>function playSelectedGif() {var selectElement = document.getElementById("gifSelect");var selectedGif = document.getElementById("selectedGif");selectedGif.src = selectElement.value;}
</script></body>
</html>

在前端网页中控制GIF 文件的播放,如“暂停”和“继续”控制功能,可能很难,我目前没有找到现实,网上有人说可以使用 JavaScript 库,但试验了很多不成功或过时了。

后来 发现 CSS或JS实现gif动态图片的停止与播放 « 张鑫旭-鑫空间-鑫生活 一文的“四、自己无法控制的gif图片的停止与播放”部分,采用其“对HTMLImageElement原型进行了扩展,增加了stop()和play()两个方法”,有了一定程度的解决——实现了“停止”(回到首图)和“播放”(重新播放),而不是“暂停”和“继续”。

上面的示例修改如下。

先给出效果图:

【提示:实际运行画面是动态的。】

源码如下:


<!DOCTYPE html>
<html>
<head><title>选择并播放GIF动画</title></head>
<body><select id="gifSelect" onchange="playSelectedGif()"><option value="gif1.gif">GIF 1</option><option value="gif2.gif">GIF 2</option><option value="gif3.gif">GIF 3</option>
</select><input type="button" id="testBtn" value="停止">
<br>
<img id="selectedGif" src="gif1.gif" alt="选择的GIF动画" width="300"><script>function playSelectedGif() {var selectElement = document.getElementById("gifSelect");var selectedGif = document.getElementById("selectedGif");// 清除之前存储的 storeUrlselectedGif.storeUrl = null;    selectedGif.src = selectElement.value;}//以下JS代码部分,对HTMLImageElement原型进行了扩展,增加了stop()和play()两个方法if ('getContext' in document.createElement('canvas')) {HTMLImageElement.prototype.play = function() {if (this.storeCanvas) {// 移除存储的canvasthis.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';// 存储canvasthis.storeCanvas = canvas;}}};}var image = document.getElementById("selectedGif"), button = document.getElementById("testBtn");if (image && button) {//if ( button) {button.onclick = function() {if (this.value == '停止') {image.stop();this.value = '播放';} else {image.play();this.value = '停止';}};}</script></body>
</html>


http://www.mrgr.cn/p/74586086

相关文章

软件物料清单(SBOM)生成指南 .pdf

如今软件安全攻击技术手段不断升级&#xff0c;攻击数量显著增长。尤其是针对软件供应链的安全攻击&#xff0c;具有高隐秘性、追溯难的特点&#xff0c;对企业软件安全威胁极大。 同时&#xff0c;软件本身也在不断地更新迭代&#xff0c;软件内部成分安全性在持续变化浮动。…

Eagle for Mac:强大的图片管理工具

Eagle for Mac是一款专为Mac用户设计的图片管理工具&#xff0c;旨在帮助用户更高效、有序地管理和查找图片资源。 Eagle for Mac v1.9.2中文版下载 Eagle支持多种图片格式&#xff0c;包括JPG、PNG、GIF、SVG、PSD、AI等&#xff0c;无论是矢量图还是位图&#xff0c;都能以清…

Kubernetes TDengine 系列|安装 TDengine 的 Grafana 插件|Grafana监控TDengine数据

为了让Grafana 能够监控到TDengine 数据&#xff0c;快速集成搭建数据监测报警系统&#xff0c;所以直接安装TDengine 插件。 目录 一、安装 TDengine 的 Grafana 插件1、下载TDengine grafana插件2、解压到指定目录3、配置未签名插件 二、配置数据源&#xff0c;简单查询TDen…

C语言【动态内存】

1.为什么要有动态内存 我们现在掌握的内存开辟方法有&#xff1a; int val 20;//在栈空间开辟4个字节 char str[10]{0};//在栈空间开辟10个字节的连续的空间但是上述的方式有两个点要注意&#xff1a; 1.空间开辟的大小是固定的 2.数组在申明的时候&#xff0c;一定要指定数…

uView Picker 选择器 setIndexs用法

uView官方文档,质量不高。有很多地方写的不清楚。比如Picker 选择器组件。 项目中有个页面,属于表单,用了Picker 选择器,需要根据数据设置选中项。官方文档如下图。看完根本不知道setIndexs到底要填什么值。应该写个示例。无奈只能看源码。得知应该通过如下方式填写: this…

大模型咨询培训老师叶梓:利用知识图谱和Llama-Index增强大模型应用

大模型&#xff08;LLMs&#xff09;在自然语言处理领域取得了显著成就&#xff0c;但它们有时会产生不准确或不一致的信息&#xff0c;这种现象被称为“幻觉”。为了提高LLMs的准确性和可靠性&#xff0c;可以借助外部知识源&#xff0c;如知识图谱。那么我们如何通过Llama-In…

element 分页切换时:current-page无效 页数不会跟着一起切换

问题回溯&#xff1a;使用el-pagination组件 选择切换当前分页 页数为2 问题结果&#xff1a;el-pagination组件 当前页切换失败 一直都是 1&#xff0c;接口传参分页数据是2&#xff0c;打印当前分页也是2 解决方案1&#xff1a;使用 current-page参数 .sync 修饰符 解决方案2…

基础

计算机组成原理 计算机硬件的组成# 计算机硬件通常由以下几个部分组成: 1.中央处理器(CPU):负责执行计算机指令,完成各种计算和逻辑操作。 2.存储器(Memory):用于存储计算机执行程序所需的数据和指令,包括主存(Random Access Memory,RAM)和辅助存储器(如硬盘、光盘等)。磁…

[Java、Android面试]_24_Compose为什么绘制要比XML快?(高频问答)

欢迎查看合集&#xff1a; Java、Android面试高频系列文章合集 本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&am…

ABC351E

E - Jump Distance Sum 题意简述 Just it. 思路 兔子斜着走->国际象棋里的象->黑象只能到达黑格,白象只能到达白格(横纵坐标相加的奇偶性)。 将点分成两组,则每组内的点之间都有答案。 可以发现可以先朝着那个方向斜着走,然后超出的部分向着那个方向迂回是最优的。如…

2024年十五届蓝桥杯省赛大学B组真题(Java完整版)

2024年十五届蓝桥杯省赛大学B组真题&#xff08;Java&#xff09; 前言&#xff1a; 赛后一直犹豫要不要对比赛进行复盘出个题解&#xff0c;拖到了现在&#xff0c;终于也是等到比赛结果出来&#xff0c;看到没有辜负个人期望成功取得省一&#xff0c;决定在国赛前对省赛进行…

基于SSM的文物管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的文物管理系统拥有俩种角色 管理员&#xff1a;个人信息管理、用户管理、分类管理、文物信息管理、文物外借管理、文物维修管理、留言板管理等 用户&#xff1a;登录注册、分类…

JavaScript原型链深度剖析

目录 前言 一、原型链 1.原型链的主要组成 原型&#xff08;Prototype&#xff09; 构造函数&#xff08;Constructor&#xff09; 实例&#xff08;Instance&#xff09; 2.原型链的工作原理 前言 在JavaScript的世界中&#xff0c;原型链&#xff08;Prototype Chain&…

【webrtc】MessageHandler 1: 基于线程的消息处理:以10毫秒处理音频为例

基于m98 G:\CDN\rtcCli\m98\src\audio\null_audio_poller.h分发的消息由MessageHandler 类通过其抽象接口OnMessage 实现处理 NullAudioPoller NullAudioPoller 是一个处理audio的消息的分发器 poll 启动:

掌握JavaScript面向对象编程核心密码:深入解析JavaScript面向对象机制对象基础、原型模式与继承策略全面指南,高效创建高质量、可维护代码

ECMAScript&#xff08;简称ES&#xff0c;是JavaScript的标准规范&#xff09;支持面向对象编程&#xff0c;通过构造函数模拟类&#xff0c;原型链实现继承&#xff0c;以及ES6引入的class语法糖简化面向对象开发。对象可通过构造函数创建&#xff0c;使用原型链共享方法和属…

计算机网络-IS-IS基础配置实验

前面我们了解了IS-IS的一些基础理论&#xff0c;从建立邻接、链路状态数据库同步以及路由计算&#xff0c;现在开始学习下配置操作。 一、IS-IS配置 网络拓扑图&#xff1a; 拓扑图 IS-IS有Level级别的区分&#xff0c;Level-1可以是性能较低的设备只维护区域内的LSDB&#xff…

qt5-入门-2D绘图-Graphics View 架构

参考&#xff1a; Qt Graphics View Framework_w3cschool https://www.w3cschool.cn/learnroadqt/4mvj1j53.html C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt 5.12 基础知识 QPainter比较适合少量绘图的情…

【Hadoop】-Hive客户端:HiveServer2 Beeline 与DataGrip DBeaver[14]

HiveServer2 & Beeline 一、HiveServer2服务 在启动Hive的时候&#xff0c;除了必备的Metastore服务外&#xff0c;我们前面提过有2种方式使用Hive&#xff1a; 方式1&#xff1a; bin/hive 即Hive的Shell客户端&#xff0c;可以直接写SQL方式2&#xff1a; bin/hive --…

[转帖]SQL Server 锁机制 悲观锁 乐观锁 实测解析

https://www.cnblogs.com/taiyonghai/p/5674462.html 先引入一些概念,直接Copy其他Blogs中的,我就不单独写了。 一、为什么会有锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 1.丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另…

监控java程序启动时的CPU使用情况

监控java程序启动时的CPU使用情况背景 想关注一下 java 程序启动过程中的CPU整体使用 以及启动过程中GC的次数和GC的好是等情况之前使用actuator的方式这里行不通 因为还没有最终暴露服务使用agent的方式虽然那可以暴露启动过程 但是也存在一些其他的问题 比如无法健康hikari,r…