我正在建立一个网站,在一个页面上包含大约 250-300 个缩略图,包含在 5 个不同的 div 中,每个 div 都可以水平滚动。
但是,在加载阶段,我需要能够单击缩略图并将全分辨率图片加载到灯箱中。
我看过 Jason Buntings 在How to display loading status with preloader and multiple images? 中的回答?这让我走到了一半:它在 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');
}
}
这是一个基本合理的概念还是我离题了?你知道任何更好/更简单的方法吗?