【发布时间】:2013-05-15 02:18:19
【问题描述】:
我在一个 HTML 页面上有很多 <img> 标签,其中一些标签共享同一个动画 GIF 文件。 src URL 是由 JavaScript 动态设置的,但在我的代码中,相同的字符要么再次播放,要么在最后一帧立即显示后续字符。
想法:这是一个艺术项目。输入一些文本后,字符会以特殊字体显示,并且每个字符一个字符(一个接一个)完成一些转换,我只能通过使用动画 GIF 来实现。文本被拆分为单个字符,<img> 标签创建如下:
<!-- delivered HTML at page load -->
<img src="initial/f.png"> <!-- I used to PNG here to outline -->
<img src="initial/o.png"> <!-- the animation is NOT set a first -->
<img src="initial/o.png">
当动画开始时,第一个 <img> 的 URL 设置为 transition/f.gif。只有在它完成播放后(由时间确定),才会设置第二张图像等。
<!-- while 2nd animation is running -->
<img src="transition/f.gif"> <!-- already finished, displays last frame -->
<img src="transition/o.gif"> <!-- being animated right now -->
<img src="transition/o.png"> <!-- will be reset to o.gif in next step -->
我无法解决的问题: 示例中的o.gif 播放后,下一个O 的动画无法正常工作。
我尝试为每个角色定义一个类并将图像分配为background-image。一旦任何出现的字符已经播放,任何后续出现的相同字母都会在显示时立即显示该 GIF 的最后一帧(结束状态)。
我也尝试直接使用 JavaScript 设置 src 属性,但是当第二个字母 O 设置为这样时,第一个字母 O 的动画会同步重新启动。但它应该停留在最后一帧。
由于 HTML 页面也应该在本地文件系统上工作,我认为像 o.gif?random=argument 这样绕过缓存机制的参数将不起作用或没有任何效果(可能在某些计算机上,我自己的测试不会伪造)。
【问题讨论】:
-
“一种特殊的字体和一些转换是每个字符(一个接一个)完成的,我只能通过使用动画 GIF 来实现” - 我相信你可以使用其他东西来做到这一点,例如画布,特别是如果它用于艺术项目,因此您可能不关心浏览器支持
-
广泛的浏览器支持不是必须的,但总是好的。动画是由不会编写代码的艺术家自己创作的。由于时间和预算的限制,我们肯定会坚持使用 GIF 文件。易于在这里创建和我使用(除了这个问题)。
-
我讨厌推荐互联网的壁橱里的骷髅,但你考虑过 Flash 吗?在大多数 GIF 动画师中易于学习、制作动画,并且您可以完全控制同步和时间。
-
“Flash”的有趣解释:-) 好吧,我从来没有学过 Flash 并且拒绝为一个小艺术项目做。当我第一次与艺术家见面时,我也提到了 Flash,甚至她作为一个非技术人员也强行拒绝了它。可以这么说,是的,我们考虑过 Flash 但不想使用它。 GIF 问题是常见问题吗?
-
并非如此,有几个 javascript 插件至少可以对 GIF 进行某种逐帧控制,但它们看起来都不容易进行逆向工程。您将要为这个项目学习一些新东西,我建议您构建自己的超级简单的 Javascript 动画师。让它将一些图像加载到一个数组中,并使用
setTimeout()循环浏览它们。这样您就可以完全控制一切!
标签: javascript html browser asynchronous animated-gif