代码之家  ›  专栏  ›  技术社区  ›  nornagon

从javascript重新启动动画gif,而不重新加载图像

  •  20
  • nornagon  · 技术社区  · 14 年前

    我正在使用动画gifs创建动画幻灯片。我正在从一个动画到下一个动画的交叉淡入淡出。问题是:我发现确保GIF从第一帧开始动画的唯一方法是每次显示时都重新加载它。每个gif都是200kb左右,这对于连续的幻灯片来说带宽太大了。

    这是我目前的密码。 img nextimg <div> 包含单个 <img> 每一个。 nextimg_img <IMG & GT; 与要显示的下一个图像对应的标记。

    var tmp = nextimg_img.attr('src');
    nextimg_img.attr('src', '');
    setTimeout(function() { nextimg_img.attr('src', tmp); }, 0);
    img.fadeOut('slow');
    nextimg.fadeIn('slow');
    

    其理念是 src 下一个图像的属性 '' ,然后将其设置回要显示的GIF源。

    这是可行的-它从一开始就重新启动动画-但似乎每次显示gif都会重新加载。

    编辑:这是一个循环幻灯片,我尽量避免在第二次/第三次/后续时间显示时从网上重新加载gif。

    3 回复  |  直到 8 年前
        1
  •  26
  •   spinon    14 年前

    您应该将图像预加载到代码中。

    var image = new Image();
    image.src = "path";
    

    当您想使用时:

    nextimg_img.attr('src', image.src);
    

    然后当您交换SRC时,只需从预加载的图像对象中交换。这样就可以避免重装。

        2
  •  3
  •   Alvaro Silvino    8 年前
    // reset a gif in javascript
    img.src = "your_image_url.gif"+"?a="+Math.random();
    

    塔达!

    请注意,每次都会下载gif文件,因此请将其保存在一个小文件中。

        3
  •  -2
  •   wizawu    8 年前

    我刚刚解决了。将此代码(或其他静态图像,如果愿意)放在第一页:

    <img src="data:image/gif;base64,">
    

    然后在准备播放时用以下代码替换:

    <img src="data:image/gif;base64,R0lGODl...AH0AvI">
    

    它将从GIF开始播放。

    唯一的问题是你不能使用GIF的URL,只能使用它的base64。