我在單個頁面上構建了一個包含5個不同div的大約250-300個縮略圖的網站,每個div都可以水平滾動。
然而,在加載階段,我需要能夠點擊一個縮略圖並在燈箱中加載完整的圖片。如何在加載縮略圖時提供反饋並控制加載順序
我看過Jason Buntings在How to display loading status with preloader and multiple images?的回答,它讓我在那裏得到了一半:它在IE中工作,但在FF中不工作,它不加載lightbox-image,直到加載所有縮略圖。
所以我推出我自己的代碼建立在相同的概念:它的工作原理,但不穩定(隨機掛起),並使用噸的內存:
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');
}
}
這是一個基本合理的概念還是我離開?你知道有更好/更簡單的方法嗎?
對於更正的事件處理(執行處理程序一次,然後解除綁定),代碼似乎是穩定的。 但問題依然存在:這是否是一種有利的方式來做到這一點,還是有更好更快的可能性? – wagi 2009-08-03 11:03:06