前端使用多张图片生成 Gif 效果(支持循环、不循环、完成回调)

简介: 前端使用多张图片生成 Gif 效果(支持循环、不循环、完成回调)

一、创建 多个 img 标签 实现 Gif 效果

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    /* 初始化样式 */
    #gif-container {
      width: 100%;
    }
    .gif-img {
      width: 100%;
      object-fit: contain;
    }
  </style>
</head>
<body>
  <div id="gif-container"></div>
  <script>
    // 获得容器
    const div = document.getElementById('gif-container')
    // 创建图片标签
    for (let index = 58; index <= 84; index++) {
      // 创建图片
      const img = document.createElement('img')
      // 设置 class
      img.className = 'gif-img'
      // 设置图片
      img.src = `./images/fireworks_000${index}.png`
      // 设置隐藏
      img.style = 'display: none;'
      // 添加
      div.appendChild(img)
    }
    // 获取 imgs
    const imgs = div.children
    // 总数量
    let count = imgs.length
    // 开始索引
    let index = 0
    // 定时器
    let timer = undefined
    // 切换图片间隔时间(毫秒)
    let interval = 100
    // 是否循环
    let loop = true
    // 上一张图片
    let lastImg = undefined
    // 开始轮播
    function run () {
      // 清空定时器
      clearTimer()
      // 初始化图片
      change()
      // 开始倒计时
      timer = setInterval(() => {
        // 叠加
        index += 1
        // 超过最后一张了则重新开始
        if (index > count) {
          // 回到第一张
          index = 0
          // 如果不循环则暂停(如果需要播放完成回调,在这里面添加即可)
          if (!loop) { clearTimer() }
        }
        // 切换图片
        change()
      }, interval)
    }
    // 切换图片
    function change () {
      // 有图片进行隐藏
      if (lastImg) {
        // 隐藏
        lastImg.style = 'display: none;'
        // 清空
        lastImg = undefined
      }
      // 获取图片
      lastImg = imgs[index]
      // 进行展示
      if (lastImg) {
        // 显示
        lastImg.style = 'display: block;'
      }
    }
    // 清空定时器
    function clearTimer () {
      if (timer) {
        clearInterval(timer)
        timer = undefined
      }
    }
    // 开始
    run()
  </script>
</body>
</html>

二、通过 1个 img 标签 实现 Gif 效果

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    /* 初始化样式 */
    #gif-container {
      width: 100%;
      object-fit: contain;
    }
  </style>
</head>
<body>
  <img id="gif-container">
  <script>
    // 获得容器
    const img = document.getElementById('gif-container')
    // 图片开始索引(图片命名规则数字)
    let start = 58
    // 图片结束索引(图片命名规则数字)
    let end = 84
    // 开始索引
    let index = start
    // 定时器
    let timer = undefined
    // 切换图片间隔时间(毫秒)
    let interval = 100
    // 是否循环
    let loop = true
    // 开始轮播
    function run () {
      // 清空定时器
      clearTimer()
      // 初始化图片
      change()
      // 开始倒计时
      timer = setInterval(() => {
        // 叠加
        index += 1
        // 超过最后一张了则重新开始
        if (index > end) {
          // 回到第一张
          index = start
          // 如果不循环则暂停(如果需要播放完成回调,在这里面添加即可)
          if (!loop) { clearTimer() }
        }
        // 切换图片
        change()
      }, interval)
    }
    // 切换图片
    function change () {
      // 设置图片
      img.src = `./images/fireworks_000${index}.png`
    }
    // 清空定时器
    function clearTimer () {
      if (timer) {
        clearInterval(timer)
        timer = undefined
      }
    }
    // 开始
    run()
  </script>
</body>
</html>

三、通过 CSS Animation 实现

后续有时间更新…

相关文章
|
前端开发
后端返回图片二进制流,前端转base64
本文介绍了如何将后端返回的图片二进制流转换为Base64格式,以便在前端使用。通过在axios请求中设置`responseType`为`arraybuffer`,然后使用`btoa`和`Uint8Array`进行转换。
956 5
|
存储 前端开发 JavaScript
🚀前端轻松实现网页内容转换:一键复制、保存图片及生成 Markdown
在现代前端开发中,提升用户的交互体验至关重要。本文将详细介绍如何使用 HTML2Canvas 和 Turndown 两个强大的 JavaScript 库,实现将网页选中文本转化为图片并保存或复制到剪贴板,或将内容转换为 Markdown 格式。文章包含核心代码实现、技术细节和功能拓展方向,为开发者提供了一个轻量级的解决方案,提升用户体验。
1157 68
|
前端开发 JavaScript
前端基础(八)_JavaScript循环(for循环、for-in循环、for-of循环、while、do-while 循环、break 与 continue)
本文介绍了JavaScript中的循环语句,包括for循环、for-in循环、for-of循环、while循环、do-while循环以及break和continue的使用。
857 1
前端基础(八)_JavaScript循环(for循环、for-in循环、for-of循环、while、do-while 循环、break 与 continue)
|
JavaScript 前端开发 Python
django接收前端vue传输的formData图片数据
django接收前端vue传输的formData图片数据
246 4
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
172 1
|
前端开发 JavaScript 编译器
不走弯路,纯前端如何把图片导出成视频!
【10月更文挑战第3天】不走弯路,纯前端如何把图片导出成视频!
720 3
|
JavaScript 前端开发 编译器
吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
【10月更文挑战第2天】吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
288 2
|
前端开发 小程序 JavaScript
信前端里的循环显示如何编写代码?
信前端里的循环显示如何编写代码?
189 5
|
前端开发 Windows
【前端web入门第一天】02 HTML图片标签 超链接标签 音频标签 视频标签
本文档详细介绍了HTML中的图片、超链接、音频和视频标签的使用方法。首先讲解了`&lt;img&gt;`标签的基本用法及其属性,包括如何使用相对路径和绝对路径。接着介绍了`&lt;a&gt;`标签,用于创建超链接,并展示了如何设置目标页面打开方式。最后,文档还涵盖了如何在网页中嵌入音频和视频文件,包括简化写法及常用属性。
317 13
|
前端开发
前端之图片操作
前端之图片操作

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    前端工程化演进之路:从手工作坊到AI驱动的智能化开发
  • 3
    Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 6
    实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    413
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    148
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    164
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    122
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    214
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    276
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    136
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    66
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    134
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    185