我在单个页面上构建了一个包含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