用HTML5实现播放gif文件

用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");
        // 清除之前存储的 storeUrl
        selectedGif.storeUrl = null;    
        selectedGif.src = selectElement.value;
    }

    //以下JS代码部分,对HTMLImageElement原型进行了扩展,增加了stop()和play()两个方法
    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("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>

相关推荐

  1. html5播放 m3u8

    2024-05-01 06:04:07       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-01 06:04:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-01 06:04:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-01 06:04:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-01 06:04:07       20 阅读

热门阅读

  1. 深入探索HTML与CSS:构建网页的基础

    2024-05-01 06:04:07       10 阅读
  2. MATLAB初学者入门(27)—— 无监督学习神经网络

    2024-05-01 06:04:07       11 阅读
  3. 云原生周刊:K8s 中的服务和网络 | 2024.4.29

    2024-05-01 06:04:07       19 阅读
  4. Mysql MVVC

    2024-05-01 06:04:07       11 阅读
  5. CSS三个标题及对应内容的tab切换

    2024-05-01 06:04:07       10 阅读
  6. python挑战10秒小程序

    2024-05-01 06:04:07       8 阅读
  7. C语言-宏定义2.0

    2024-05-01 06:04:07       12 阅读
  8. Rust 命令行参数解析指南

    2024-05-01 06:04:07       13 阅读
  9. 动态提示工具插件库——tippyjs

    2024-05-01 06:04:07       10 阅读