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

后续有时间更新…


相关文章
|
2天前
|
前端开发
若依框架---如何使用多数据源?前端table中如何显示图片?
若依框架---如何使用多数据源?前端table中如何显示图片?
120 2
|
2天前
|
前端开发 JavaScript 算法
前端面试100道手写题(7)—— 循环轮播图
前端面试100道手写题(7)—— 循环轮播图
55 0
|
2天前
|
JavaScript 前端开发
【Web 前端】如何在点击一个按钮时使用 jQuery 隐藏一个图片?
【5月更文挑战第2天】【Web 前端】如何在点击一个按钮时使用 jQuery 隐藏一个图片?
|
2天前
|
XML JSON 前端开发
【Flutter前端技术开发专栏】Flutter中的图片、视频与网络资源加载
【4月更文挑战第30天】Flutter是谷歌的开源前端框架,因其高性能、流畅UI和多端运行能力受开发者喜爱。本文聚焦于Flutter中的资源加载:使用`Image`组件加载静态、网络和本地图片;通过`video_player`库加载和播放视频;利用`http`包进行网络资源请求。掌握这些技巧将有助于提升Flutter应用的开发效率和质量。
【Flutter前端技术开发专栏】Flutter中的图片、视频与网络资源加载
|
2天前
|
编解码 前端开发 JavaScript
纯前端也能实现视频转GIF
纯前端也能实现视频转GIF
|
2天前
|
编解码 Rust 前端开发
纯前端也能实现在线GIF压缩
纯前端也能实现在线GIF压缩
|
2天前
|
前端开发
前端使用多张图片生成 Gif 效果(支持循环、不循环、完成回调)
前端使用多张图片生成 Gif 效果(支持循环、不循环、完成回调)
62 0
|
2天前
|
前端开发
前端实现视频或者图片直链下载
前端实现视频或者图片直链下载
73 0
|
2天前
|
前端开发 JavaScript 小程序
前端图片转base64 方法
前端图片转base64 方法
57 0
|
2天前
|
前端开发
elementui-upload组件自定义样式上传(upload中常用的属性,但是网络上却找不到教程)(解决bug删除之后再次上传会上传删除的图片)专注后端工程师的前端速成
elementui-upload组件自定义样式上传(upload中常用的属性,但是网络上却找不到教程)(解决bug删除之后再次上传会上传删除的图片)专注后端工程师的前端速成
82 0