サムネイルを使用して、クリックするとメインステージに大きな画像をロードするシンプルな画像スライドショーローダーを作成しました。「リール」プラグインを使用して、メインステージにパノラマの回転可能な「3D」画像を作成しています。
それは楽しいです、そしてすべてがウェブキットでうまく機能します。あなたはここでライブページを見ることができます:
これのスライドショーの側面は、ネストされたコールバックを使用して行われます。静的なサムネイルリンクのいずれかをクリックします。
a)現在の既存の回転可能な画像をフェードアウトします
b)fadeOut()へのコールバックとして、リールプラグインが画像から削除され、すべてのイベントが画像からバインド解除され、適切な測定のために再び非表示になり、imgsrcが新しいsrcと交換されます。
c)次に、Descandroのimagesloadedプラグインを使用して、imgの新しいsrcがダウンロードされたことをテストすると、メイン画像がフェードインされます。
d)そのフェードインへのコールバックとして、Reelプラグインが新しいイメージで呼び出されます。
問題は次のとおりです。Firefoxでは、以前の古い画像がまだステージ上にある状態でフェードインが発生しています。これは、古いsrcが一時的に「固定」されているかのようです。これは、コールバックスクリプトを順番に実行する必要があるため、奇妙なことです。その後、しばらくすると、画像が突然新しい画像に更新されます。ですから、すべてが機能しますが、スムーズな移行を目指していると、ぎくしゃくします。
注:すべての画像がキャッシュされると、すべてが完全に機能します。したがって、これを少し試した後、動作を再現するためにFirefoxのキャッシュをクリアする必要があるかもしれません。
関連するコードは次のとおりです。
$(document).ready(function () {
$('#the-image-to-rotate').reel(); //runs the plugin
$('#the-image-to-rotate').on('loaded', function(){ // the plugin's 'loaded' event
$(this).data('velocity', 4); // kick off an initial velocity
});
$('#engraved-vase-pager a').on("click", function(event) {
event.preventDefault();
//build the URLS for the new img and the plug-in
var newRelativeUrl = $(this).children('img').attr('src').slice(0,-9);
var firstImageUrl = newRelativeUrl + "01.jpg";
var templateUrl = newRelativeUrl + "##.jpg";
$('#the-image-to-rotate').fadeOut(400, function() {
$(this).unreel() // tear down the plugin
.unbind() // remove anything lingering
.hide() // hide the de-plugin'ed img
.attr('src', firstImageUrl); //swap out with the new src
$(this).imagesLoaded(function($images, $proper, $broken) {
$(this).fadeIn(400, function() {
$(this).reel({
images: templateUrl,
});
$(this).on('loaded', function(){
$(this).data('velocity', imageVelocity);
});
});
});
});
});
Firebugは、以前に表示されていない画像の読み込み時に「画像が破損または切り捨てられた」と言いますが、グリッチを除いてすべてが正常に機能しているため、メッセージは実際には説明的ではありません。私の徹底的なログで、imagesloadedが壊れた画像をゼロに示していることがわかります。
これは私を木の上に追いやっています。洞察を事前に感謝します!