gif 动画在 Chrome 和 Firefox 中仅循环一次

2023-11-29

我有一个 gif 动画,我想在页面加载时随时显示它。当我在浏览器外部查看图像时,图像无限循环并且工作得很好,但每当我在浏览器中显示图像时,动画仅循环一次。有人对让图像无限循环有什么建议吗?

目前,我这样做只是为了使图像出现,这确实使它出现,但只循环一次:

document.getElementById('ajaxloader').innerHTML = 
    '<img src="images/ajax-loader.gif" title="Loading, please wait..">';

我也面临着同样的问题GIF我前段时间写的编码器/解码器类(并且不时改进)。我昨天就找到了这个问题的解决方案。这GIF完全没问题,问题出在现代互联网浏览器方面。受影响的浏览器有 Opera、IE 和 Chrome(其他浏览器未测试)。

经过对此事的一些调查(通过比较循环和非循环图像),我发现这些浏览器GIF解码器忽略循环参数GIF文件。相反,它们依赖于第一帧中未记录的应用程序扩展GIF file.

因此解决方案是在第一帧图像数据之前添加此扩展命令。添加这个块:

0x21,0xFF,0x0B,"NETSCAPE","2.0",0x03,0x01,0x00,0x00,0x00

这将迫使浏览器无限循环。

这是一个例子:

looping

十六进制视图,以便您了解它是如何添加的:

hex

The GIF对插入/重新排序非图像数据块不敏感,因此您可以在任何其他扩展之间的任何位置的第一个图像之前插入它。我把它直接放在标题+调色板之后。可以用哪个来完成C++或任何其他语言(不需要重新编码)。欲了解更多信息,请参阅:

  • 如何找到GIF图像中图像块从哪里开始?
  • 解码 GIF87a 光栅数据流的数据字节

[里德·邓克尔编辑]

您也可以使用十六进制编辑器手动完成此操作。我在 macOS Sierra 上使用了“Hex Fiend”。

搜索21 F9在十六进制的开始部分(这是标题)。在上面的照片中,它是21 F9 04 04 00 00 00 00。你的可能略有不同,但请注意它出现在前面2C,它标记图像块的开始。

之前21 F9... 部分,insert以下十六进制,在上图中标记为“应用程序扩展”:

21 FF 0B 4E 45 54 53 43 41 50 45 32 2E 30 03 01 00 00 00

保存并测试一下。

Spektre 的插件:注意:21 F9标记 gfx 扩展块,它是可选的,因此它可能不会出现在所有或任何帧中(但现在这种情况确实很少见)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gif 动画在 Chrome 和 Firefox 中仅循环一次 的相关文章

  • ReactJS 在打字时延迟 onChange

    我需要更改状态以维护用户正在输入的字符串 但是我想延迟操作直到用户停止打字 但我不太清楚如何做到这两点 因此 当用户停止打字时 我希望触发一个操作 但不是在此之前 有什么建议么 使用 React Hooks 和 Function 组件 要保
  • 使用 DataTables (Meteor Tabular) 在新行中绘制数组的每个元素

    我正在使用流星表格包 https atmospherejs com aldeed tabular aldeed tabular它实现了数据表 http datatables net 我正在尝试从 Mongo 集合创建一个表 该集合有一份以下
  • 如何将滚动条更改为自定义设计? (避免使用默认浏览器外观)

    在新的 Gmail 中 您可以看到有一个滚动条 但它看起来与浏览器滚动条不同 怎样制作呢 你看到的是WebKit 特定的重新设计 http css tricks com custom scrollbars in webkit 浏览器的滚动条
  • Javascript - 将类型化数组保存为 blob 并以二进制数据读回

    我有一个充满二进制数据的类型化数组 它是从 ArrayBuffer 生成的 var myArr new Uint8Array myBuffer 我将其呈现给用户 var blob new Blob myArr type octet stre
  • 使用 Leaflet 加载页面时 moveend 事件多次触发

    我需要在地图平移或缩放时执行一些操作 因此我向该事件附加了一个回调moveend map on moveend function code stuff 它工作正常 但是当页面加载时 该事件被触发三次 我不知道为什么 可能是因为在创建过程中地
  • 修复了 Google 地图混搭中的图例

    我有一个带有 Google 地图混搭的页面 其中的图钉按日期 周一 周二等 进行颜色编码 包含地图的 IFrame 是动态调整大小的 因此当浏览器窗口调整大小时 它也会调整大小 我想在地图窗口的一角放置一个图例 告诉用户每种颜色的含义 Go
  • 使用 forEach 循环 Array(n),未定义值的数组[重复]

    这个问题在这里已经有答案了 我想快速构建一个数组n使用数组构造函数的长度Array 然后循环得到的数组 Per MDN 的文档 https developer mozilla org en US docs Web JavaScript Re
  • 严格模式与 React 18 的工作方式是否不同?

    考虑下面的片段 有了 React 18 count每次渲染时都会在控制台上打印两次 但在 React 17 中它只打印一次 反应 18 示例 function App const count setCount React useState
  • Tk 框架内的 Chrome 网页

    我想在 Tcl Tk 框架内运行我的 chrome 页面 我必须从 Windows 平台运行我的脚本 到目前为止 我可以使用 start 命令启动 chrome 页面 如何将我的 chrome 页面包含在 Tk 窗口内 eval exec
  • 如何在鼠标悬停时覆盖 div / box?

    我有一个链接 当用户将鼠标悬停在其上时 它应该在链接下显示一个框 div 盒子应该覆盖其下方的所有内容 我如何使用 css 或 javascript 来做到这一点 您有一个隐藏的绝对定位的 div 和链接的子级 然后 当您将鼠标悬停在链接上
  • Kendo Grid:取消编辑删除新行

    这里有一个demo http plnkr co edit X4ei0zPYiZ1H8AiCTy8B p preview对于我正在经历的行为 如果您编辑 id 为 1 的现有行 将文本更改为其他内容 然后按取消按钮 该行将正确恢复到之前的状态
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 有没有办法使用 JavaScript 发送 CoAP 命令?

    我只是想知道是否有一种方法可以在浏览器中发送 CoAP 查询 使用 JavaScript 但不能使用 node js Thanks 不幸的是 这不可能直接实现 出于安全原因 Web 浏览器不为 UDP 套接字提供任何 JavaScript
  • 如何识别 YouTube 播放器的音量变化

    我正在使用 angualr youtube embed 指令将 YouTube 播放器嵌入到我的 Angular Web 应用程序中 因为我必须识别播放和暂停以及音量变化事件 为了监听播放和暂停事件 我使用下面给出的代码 scope on
  • 为什么我收到此错误:“未捕获类型错误:无法读取未定义的属性“标题””?

    我正在尝试写一个ajax网络应用程序 我有一个函数应该请求一个json对象 然后使用它来重新 填充网站 这里是JavaScript有问题 第 8 16 行 window onload LoadData Home var doc functi
  • 使用 fullpage.js 触发 Velocity.js/Blast.js

    以下是此处发布的解决方案 Velocity js Blast js 从 0 开始不透明度 https stackoverflow com questions 28614890 velocity js blast js starting op
  • 服务器端包括中断布局

    我终于完善了我的网页 它在每个浏览器中都能完美运行 然而 当我将页眉和页脚内容抽象到服务器端包含时 布局在 Firefox Opera Safari 中略有变化 但在 IE 中 布局变化使页面看起来破碎 使用 SSI 时是否存在可能导致布局
  • Json 对象 - 获取键和值

    我是 JSON 的新手 所以 如果这是一个非常基本的疑问 请不要责骂我 我有一个 JSON 对象引用 我想获取 Key 对象只有一个键值对 我如何在 Java 中获得它 您可以使用jsonObject keys 获取所有钥匙 然后您可以迭代
  • 通过innerHTML输入时span不应用css样式

    我有 Angular 应用程序 作为它的一部分 我在 div 中显示查询结果 具有 JSONContainer 的 ID 我想突出显示结果中的特定查询 因此我使用了一个管道来搜索结果 并将文本中的 FIELD VALUE 替换为 span
  • 如何在Javascript中正确使用Jupyter笔记本的kernel.execute方法(计时问题)?

    下面是使用 Jupyter Notebook 的 Python 内核从自定义 JavaScript 客户端执行 Python 代码的草稿 这是一个相关问题 Jupyter 前端扩展 JavaScript API 的文档在哪里 https s

随机推荐