【问题标题】:How to avoid the "blink" when exchanging gifs?交换gif时如何避免“眨眼”?
【发布时间】:2016-12-02 21:14:46
【问题描述】:

我正在创建一个网站,当您滚动到某个区域时,会出现 gif。它只循环一次;如果你继续滚动,它会变成另一个gif(也只播放一次)如果你往回滚动,它会变成第一个gif,重新启动它可以再次播放。

但是,当发生变化时,会出现我不想要的眨眼。这是fiddle。这是javascript

$(window).ready(function() {
  var v = 0;

  $(window).on("scroll", function() {
    var scrollTop = $(this).scrollTop();

    if (scrollTop > 100 && scrollTop < 200) {

      if ($('#container').attr('data-img') != 'http://i.imgur.com/Hhmt8.gif') {
        ++v;
        $('#container').attr('data-img', 'http://i.imgur.com/Hhmt8.gif');
        $('#container').css('background-image', 'url(http://i.imgur.com/Hhmt8.gif?v=' + v + ')');
      }

    } else if (scrollTop >= 200) {

      if ($('#container').attr('data-img') != 'http://i.imgur.com/TUAwA.gif') {
        ++v;
        $('#container').attr('data-img', 'http://i.imgur.com/TUAwA.gif');
        $('#container').css('background-image', 'url(http://i.imgur.com/TUAwA.gif?v=' + v + ')');
      }

    } else {
      $('.imageHolder').css('background', 'blue');
    }

  });

});

我尝试从background-image 中删除?v='+v+',但每次更改时它都不会加载...有没有办法在不闪烁的情况下保持其功能?

【问题讨论】:

  • 预加载它们......
  • 它不会动画。将显示最后一帧。你可以看到这个fiddlethis one 明白我的意思。在那里你没有眨眼,但 gif 只发生一次

标签: javascript jquery css if-statement gif


【解决方案1】:

预加载第二张图片,闪烁来自图片的远程抓取时间。如果您之前在本网站的任何位置预加载了相同的图像,新图像将直接从浏览器的缓存中加载,并且将替换之前的图像而没有任何可见的过渡。

$(window).ready(function () {
   var v = 0;
   var image = new Image();
   image.src = 'http://i.imgur.com/TUAwA.gif';

   $(window).on("scroll", function () {
       /* ... */
   }

}

【讨论】:

  • 是的,但是如果缓存替换了以前的,它就不会动画。图像将是 gif 的最后一帧。你可以看到这个fiddlethis one 明白我的意思。在那里你没有眨眼,但 gif 只发生一次
  • 不要使用变量中的图像,而只是像以前一样从服务器获取图像一样再次加载图像。浏览器将加载图像并播放动画,但不必先通过网络获取。
  • 按你说的试过了,还是不行……看看here还是会闪烁
  • 如果你在 URL 中添加一个不断变化的 '?querystring' ,这意味着图像每次都是通过网络加载的。如果您想完全摆脱闪烁,您将不得不通过一些步骤扩展脚本,包括将两个图像加载到 2 个容器中并切换它们,例如通过更改 z-index。例如,您可以在 JavaScript 中将“onload”处理程序添加到“Image()”对象并处理此类函数中的所有操作。此外,图像都大于 1 MB,这增加了一些额外的问题。抱歉,我没有时间创建解决方案。
猜你喜欢
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2017-02-05
  • 2015-12-11
  • 2012-11-01
  • 2023-04-02
相关资源
最近更新 更多