2017-12-24 30 views
1

のjQuery:JQueryでsetInterval()を使用して画像がちらつくのを防ぐにはどうすればよいですか?

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; 
} 

は基本的に、私はこれらの背景画像がスムーズな移行を持っているしたいが、それは一見ランダムなタイミングで遅れちらつきを持っています。どんな助けもありがとう!

おかげ

+0

画像をプリロードすることができます。そのため、画像を背景として定義すると、すでにブラウザのキャッシュにあり、描画する準備ができています。この回答を確認してくださいhttps://stackoverflow.com/questions/476679/preloading-images-with-jquery – luckyape

+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>

+0

フィードバックありがとうございます。これは、異なる背景イメージを持つクラスの束に対してaddClass()およびremoveClass()を使用するよりもコンパクトなアプローチのように思えます。私はあなたが言及したようにすべての画像を含む "大きな画像"を作成する方法がわかりませんでしたか? –

+0

いつも幸せなコーディングを歓迎します –

0

は、複数の 'の.desktop' 要素を作成し、別の割り当てすべての人のための背景。特定の.desktop要素を表示したり非表示にすることができます。あなたはこの解決策ではちらつきが見えません。

+0

ありがとうございます。私は実際にクラス ".desktop"でdivのコンテンツをたくさん持っています。しかし、これは私にも同様のアプローチをもたらしました。これらの異なる背景イメージを持つ.desktop2、.desktop3などの複数のクラスを作成しました。その後、addClass()とremoveClass()を使用しました。 –

+0

クール。共通のクラスを1つ保つことによってコードを最適化できます。 desktopGeneralClassのように、1つのdesktopGeneralClassからアクティブなクラスを削除し、次のdesktopGeneralClassにアクティブを追加します。このようにすることで、カルーセルにもっと多くの画像がある場合に備えて、JavaScriptコードを書く必要がありません。 – Pradeep

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> 

このav前と同じように特定のクラスのスタイルを変更する代わりに、ちらつきが目立たなくなりました。

関連する問題