Arnoud Sietsemaの答えをさらに一歩進めました。カルーセル内の画像には、最初から GIF が読み込まれている可能性があります。それで...
カルーセルを表示する
function showGallery(startIndex) {
//Load first, second and last image
var imageElement = $('#fullscreengallery .item:nth-child(' + (startIndex + 1) + ') img');
imageElement.attr('src', imageElement.attr('data-lazy-load-src'));
imageElement.attr('data-loaded', '1');
imageElement = $('#fullscreengallery .item:nth-child(' + (startIndex + 2) + ') img');
imageElement.attr('src', imageElement.attr('data-lazy-load-src'));
imageElement.attr('data-loaded', '1');
imageElement = $('#myCarousel .item:last img');
imageElement.attr('src', imageElement.attr('data-src'));
imageElement.attr('data-loaded', '1');
//Init carousel
$('#fullscreengallery').carousel(startIndex);
//Show carousel
$('#fullscreengallery').removeClass('hidden');
};
遅延読み込みを行う
$('#fullscreengallery').on('slid.bs.carousel', function() {
//Lazy load
var nextImage = $('.active.item', this).next('.item').find('img');
//If no next, select first
if(nextImage.length === 0){
nextImage = $('#fullscreengallery .item:nth-child(1) img');
}
//Set the source if it hasn't been set already
if (nextImage.attr('data-loaded') == '0') {
var $downloadingImage = $("<img>");
$downloadingImage.load(function(){
nextImage.attr("src", $(this).attr("src"));
nextImage.attr('data-loaded', '1');
});
$downloadingImage.attr("src", nextImage.attr('data-src'));
}
var prevImage = $('.active.item', this).prev('.item').find('img');
//If none, select last
if(prevImage.length === 0){
prevImage = $('#myCarousel .item:last img');
}
//Set the source if it hasn't been set already
if (prevImage.attr('data-loaded') == '0') {
var $downloadingImage = $("<img>");
$downloadingImage.load(function(){
prevImage.attr("src", $(this).attr("src"));
prevImage.attr('data-loaded', '1');
});
$downloadingImage.attr("src", prevImage.attr('data-src'));
}
});
違いは、次のスライドを読み込もうとすると、最初に「ボンネットの下」に読み込まれ、読み込まれたときにのみカルーセルに挿入されることです。その結果、画像が完全に読み込まれるまで、読み込み中の画像が表示されます。
また、カルーセルを両方向に移動できるようになりました。