前端使用多张图片生成 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 实现

后续有时间更新…

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

热门文章

最新文章

  • 1
    【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 4
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 5
    详解智能编码在前端研发的创新应用
  • 6
    巧用通义灵码,提升前端研发效率
  • 7
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 8
    智能编码在前端研发的创新应用
  • 9
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 10
    抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
  • 1
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
    24
  • 2
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
    43
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    巧用通义灵码,提升前端研发效率
    84
  • 5
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    137
  • 6
    详解智能编码在前端研发的创新应用
    92
  • 7
    智能编码在前端研发的创新应用
    75
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    35
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    111
  • 10
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    73