我正在寻找一种预加载特定图像并将其添加到队列中的方法。
这是我目前所处的位置:http://shivimpanim.org/testsite/imageloader.html http://shivimpanim.org/testsite/imageloader.html
您可以看到它具有图像预加载功能,但据我所知,没有队列管理(或者如果新写入 DOM,浏览器是否会智能地在队列中增加所请求的图像?)
换句话说,image10 可能自然地位于预加载队列的末尾......但它可能是用户在开始时悬停的位置。因此 image10 应该被移至队列顶部并立即加载。完成后,队列应从中断处继续加载。
Thanks!
EDIT:我现在已经更新了代码,以便预加载工作......主要的“问题”是图像必须添加到 DOM 中,onLoad 才能在 Mac 上的 Firefox 中触发,而我的具体需要是跟踪原始索引路线(匹配标题等)
似乎有效..但奇怪的是,第二个项目的顺序很奇怪(它在自动模式下在项目 #2 之前加载项目 #3)。
但总而言之,它主要以正确的顺序一次自动加载 2 个项目,当用户将鼠标悬停在链接上时,它会将该项目放入队列中,然后在加载时显示它:)
我还没有进行广泛的测试 - 但在 firebug 中,事情看起来有些正常:)
像这样的东西(未经测试):
function loader( images, n_parallel ){
this.queue = images.slice( 0 );
this.loading = [];
for( var i=0; i<n_parallel; i++ ) this.dequeue();
}
loader.prototype.dequeue = function(){
if( !this.loading.length ){ return; }
var img = new Image(),
self = this;
img.src = this.queue.unshift();
if(img.width){
self.dequeue();
}else{
img.onload = function(){
self.dequeue();
}
}
}
loader.prototype.promote = function( src ){
for(var i=0, l=this.queue.length; i<l; i++){
if(this.queue[i] == src){
this.queue.unshift( this.queue.splice(i, 1)[0] );
break;
}
}
}
var imgs = new loader( ['foo.jpg', 'bar.jpg', 'foobar.jpg', ...], 2 );
...
imgs.promote( 'some_img.jpg' );
为了使其工作,您不能在页面加载时将所有图像添加到 dom。您需要按需添加它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)