大量の大きな画像 (10-40、~300kb/img) を含むサイトを構築しており、それらを順番にロードする (表示しない!) 方法を探しています。
最初の3つの画像が読み込まれると、カルーセルを表示してトリガーするjsがすでにあります(最初の3つの画像が表示されている間、他の画像はバックグラウンドで読み込まれます)が、画像が非同期に読み込まれるため、あまり役に立ちません.
その場合、前の画像がロードされた場合にのみ画像をロードする方法はありますか?
これが私のhtmlです。
<div class="item active">
<img src="./img/1.jpg" alt="" />
<div class="container">
<div class="carousel-caption">
</div>
</div>
</div>
<div class="item">
<img src="./img/2.jpg" alt="" />
<div class="container">
<div class="carousel-caption">
</div>
</div>
</div>
<div class="item">
<img src="./img/3.jpg" alt="" />
<div class="container">
<div class="carousel-caption">
</div>
</div>
</div>
<div class="item">
<img src="./img/4.jpg" alt="" />
<div class="container">
<div class="carousel-caption">
</div>
</div>
</div>
そして私のjs:
var numImagesLoaded = 0;
function incrementAndCheckLoading(){
numImagesLoaded++;
if(numImagesLoaded == 4){
// trigger carousel
}
}
image1 = new Image();
image1.src = "http://cccctanger.com/test/img/1.jpg"
image1.onload = incrementAndCheckLoading;
image2 = new Image();
image2.src = "http://cccctanger.com/test/img/2.jpg"
image2.onload = incrementAndCheckLoading;
image3 = new Image();
image3.src = "http://cccctanger.com/test/img/3.jpg"
image3.onload = incrementAndCheckLoading;
image4 = new Image();
image4.src = "http://cccctanger.com/test/img/status.gif"
image4.onload = incrementAndCheckLoading;
編集: カルーセルはブートストラップ ベースです!
編集2と解決策:
Luis Lorenzo のソリューションを適用して、すべての img をカルーセルにロード時に追加しました。唯一の問題: 画像は順番に (1-2-3-4-...) ではなく、読み込まれるときに追加されます。これは私が一緒に暮らすことができる小さな問題であることを考えると、問題は解決されます:))
みんなありがとう!!
js は次のとおりです。
$(document).ready(function () {
var images = ["http://cccctanger.com/test/img/1.jpg", "http://cccctanger.com/test/img/2.jpg", "http://cccctanger.com/test/img/3.jpg", "http://cccctanger.com/test/img/4.jpg",
"http://cccctanger.com/test/img/5.jpg"];
var numImagesLoaded = 0;
$.each(images, function(k, v) {
image_temp = new Image();
image_temp.src = v;
image_temp.onload = function () {
$('#carousel-inner').append('<div class="item"
style="position: fixed; width: 100%; height: 100%;
background-image: url('+v+'); background-position: 50% 50%;
background-repeat: no-repeat no-repeat; -webkit-background-size: 100%;
-moz-background-size: 100%; -o-background-size: 100%; background-size:100%;
-webkit-background-size:cover; -moz-background-size:cover;
-o-background-size:cover; background-size:cover;"></div>');
numImagesLoaded++;
if(numImagesLoaded == 4) {
$('#status').fadeOut(); // will first fade out the loading animation
$('#preloader').delay(350).fadeOut('slow', function(){
$( "#carousel-example-generic" ).attr('data-ride', "carousel");
$( ".item" ).first().addClass( "active" );
}); // will fade out the white DIV that covers the website.
$('body').delay(350).css({'overflow':'visible'});
$('.carousel').carousel({
pause: "false",
interval: 10000
});
$('.carousel').css({'margin': 0, 'width': $(window).outerWidth(), 'height': $(window).outerHeight()});
$(window).on('resize', function() {
$('.carousel').css({'width': $(window).outerWidth(), 'height': $(window).outerHeight()});
});
}
}
});
});
および関連する html:
<div id="preloader">
<div id="status"></div>
</div>
<div id="carousel-example-generic" class="carousel slide" data-ride="0">
<!-- Wrapper for slides -->
<div class="carousel-inner" id="carousel-inner"></div>
</div>