如何在Jquery中使用setInterval()来防止图像闪烁?

时间:2017-12-24 04:17:35

标签: jquery css background-image transition setinterval

Jquery的:

var count = 3;

setInterval(function() {
    if (count == 12) {
        count = 3;
    }

    count++;
    $('.desktop').css({'background-image': 'url(images/index_main_bg'+count+'.jpg)'});
}, 3000);

CSS:

.desktop {
    background: url(images/index_main_bg4.jpg) center no-repeat;
    background-size: cover;
    z-index: 9;
    transition: background 1.1s linear;
}

基本上,我只是希望这些背景图像能够平滑过渡,但在看似随机的时间内会出现延迟闪烁。任何帮助表示赞赏!

由于

3 个答案:

答案 0 :(得分:0)

使用包含所有图像的大图像,然后更改背景位置(精灵图像)

var count = 1,varx_pos = 0;
setInterval(function(){
 varx_pos += 180;
 if(count == 3){varx_pos = 0;count=0;}
  $('.desktop').css({'background-position-x':varx_pos+'px'});
 count++;
},150);
.desktop{
background-image:url('http://spritely.net/images/bird_180x180.png');
width:180px;
height:120px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="desktop"></div>

答案 1 :(得分:0)

创建多个'.desktop'元素并为所有元素分配不同的背景。您可以只显示和隐藏(或任何需求的动画)特定的.desktop元素。你不会看到这个解决方案的闪烁。

答案 2 :(得分:0)

这就是我最终做的事情:

Jquery的:

var count=3;

setInterval(function() {
    if(count==11){
        $('#desktop').removeClass('desktop'+(count+1));
        count=3;
        $('#desktop').addClass('desktop'+(count+1));
    } else {
        count++;
        $('#desktop').removeClass('desktop'+count);
        $('#desktop').addClass('desktop'+(count+1));
    }
}, 3000);

CSS(我创建了多个添加和删除的类):

.desktop4 {
  background-image: url(images/index_main_bg4.jpg);
}

.desktop5 {
  background-image: url(images/index_main_bg5.jpg);
}

.desktop6 {
  background-image: url(images/index_main_bg6.jpg);
}

HTML:

<div id="desktop" class="desktop4">
   SOME CONTENT
<div>

这避免了闪烁,而不是像以前那样改变特定类的风格。