如何避免"眨眼"交换GIF时?

时间:2016-07-28 12:55:48

标签: javascript jquery css if-statement gif

我正在创建一个网站,当您滚动到某个区域时,会出现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');
    }

  });

});

我尝试从?v='+v+'移除background-image,但每次更改时都不会加载...有没有办法保持功能不闪烁?< / p>

1 个答案:

答案 0 :(得分:2)

预加载第二张图像,闪烁来自图像的远程抓取时间。如果您之前在此网站上的任何位置预先加载了相同的图像,则新图像将直接从浏览器的缓存加载,并将替换之前的图像,而不会发生任何可见的转换。

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

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

}