私は、1ページに約250〜300のサムネイルがあり、それぞれが水平方向にスクロールできる5つの異なるdivに含まれているWebサイトを構築しています。
ただし、読み込み段階では、サムネイルをクリックして、ライトボックスにフル解像度の画像を読み込むことができる必要があります。
プリローダーと複数の画像で読み込みステータスを表示する方法のJasonBuntingsの回答を見てきました。IEでは機能しますが、すべてのサムネイルが読み込まれるまでライトボックス画像が読み込まれないFFでは機能しません。
そこで、同じ概念に基づいて独自のコードを作成しました。これは機能しますが、不安定で(ランダムにハングし)、大量のメモリを使用します。
function doLoadThumbnails(queue) {
if (!queue.isEmpty()) {
if (connManager.AcquireConnection()) {
var imageLink = queue.dequeue();
var loader = new Image();
loader.onload = function() {
imageLink.firstChild.src = imageLink.href;
connManager.ReleaseConnection();
}
loader.src = imageLink.href;
doLoadThumbnails(queue);
} else {
connManager.getEventObject().bind('connReleased', function(e) {
window.setTimeout(function() {
doLoadThumbnails(queue);
}, 50);
connManager.getEventObject().unbind('connReleased', arguments.callee);
});
}
}
}
ConnectionManagerは次のようになります。
function ConnectionManager() {
var eventObject = $('<span id="ConnectionManager"></span>').appendTo("body");
var activeConnections = 0;
var maxConnections = 5;
this.getEventObject = function() {
return eventObject;
}
this.isConnectionAvailable = function() {
return activeConnections < maxConnections;
}
this.AcquireConnection = function() {
if (activeConnections < maxConnections) {
activeConnections++;
return true;
} else {
return false;
}
}
this.ReleaseConnection = function() {
activeConnections--;
eventObject.trigger('connReleased');
}
}
これは基本的に健全な概念ですか、それとも私は道を外れていますか?これを行うためのより良い/より簡単な方法を知っていますか?