javascript - JS/jQuery - 悬停时仅播放一次 GIF

标签 javascript jquery html animation gif

最近我们为我们的网站制作了一些 GIF 动画。其中一个动画是 map 上的一个标记,它在空中“跳跃”。我们的想法是让标记在鼠标悬停时仅跳转一次。换句话说:它只应该播放一次,并且在悬停时不会进入无限循环。

我首先阅读这篇文章:Animating a gif on hover 。我使用代码在悬停时启动动画,并在鼠标移开时将其替换为静态图像。

但这并没有让我接近我想要的。使用这个脚本,它会一直循环播放,这是符合逻辑的,但正是我们不想要的。另外,当您移开鼠标时,我们希望 GIF 继续播放动画直到完成,而不是立即停止。最后但并非最不重要的一点是:当您悬停时,将鼠标移开,然后在动画仍在播放时立即再次悬停,它不应在仍在播放时重新启动。

据我现在了解,以及我在创建动画时没有意识到的事情,用 jQuery 控制 GIF 动画非常困难。

我唯一能想到的就是处理动画的时间/持续时间。例如。如果动画需要 3 秒,那么我们可以在这段时间内用 GIF 替换静态图像(悬停时)。如果我们在 img 标签的数据属性中传递持续时间,我们甚至可以为所有 GIF 编写通用脚本。但这意味着要编写大量代码,对我来说这似乎不是最简单的方法。

有人知道一种更简单的方法来实现我们想要的吗?我期待听到您对此的想法。

最佳答案

当您创建 gif 图像时,您可以将其创建为仅循环一次。

因此,要解决此问题,请首先加载文件的静态版本。当您将图像悬停时,将其更改为 gif 图像,并保持这种状态,这样它就可以完成一次性动画。

我不会使用任何计时。确切的时间很难预测,因为有些计算机速度较慢,并且还应考虑加载时间。

所以,解决方案:

  • 制作仅循环一次的 gif 图像(如果您有合适的工具,可以在图像本身中设置此属性)。
  • 最初显示图像的静态版本。
  • 鼠标悬停时,向元素添加一个类,以便应用不同的样式,将其更改为不同的图像,或者更改 src 属性(如果您使用 img)元素。
  • 保持现状不变。根本不要删除该类。
  • Preload the image ,因此当您将 src 从静态图像切换到动画 gif 时不会有任何延迟。

关于javascript - JS/jQuery - 悬停时仅播放一次 GIF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33181551/

相关文章:

php - 根据浏览器语言重定向用户时的 CSS 问题

javascript - 通过套接字传输时数组数据被复制(Socket.io)

javascript - 为 url 编码西里尔字母的最快方法

javascript - 我试图用新的视频 ID 更改数据视频​​属性,但它没有改变

javascript - 从background.js操作popup.html的DOM

html - 根据父级高度动态对齐伪元素

HTML 中的 Javascript/jQuery 变量打印

javascript - 推迟函数直到 jQuery 加载(或另一个固定点)

php - 如何将 html 和 php 代码存储在 php 变量中以回显到 html 页面

javascript - 无法在不同域上设置 cookie