Jquery 如何停止预加载?
我正在使用下面的函数在我的ajax页面上预加载图像。我的页面包含图像库。但当我点击另一个库链接时,我需要停止预加载当前库。有什么帮助吗?谢谢 问题解决了。。。下面是一个示例的工作代码Jquery 如何停止预加载?,jquery,image,preloading,Jquery,Image,Preloading,我正在使用下面的函数在我的ajax页面上预加载图像。我的页面包含图像库。但当我点击另一个库链接时,我需要停止预加载当前库。有什么帮助吗?谢谢 问题解决了。。。下面是一个示例的工作代码 <html> <head> <script type="text/javascript"> (function($) { imgList = []; $.extend({ preload: function(imgArr, option) {
<html>
<head>
<script type="text/javascript">
(function($) {
imgList = [];
$.extend({
preload: function(imgArr, option) {
var setting = $.extend({
init: function(loaded, total) {},
loaded: function(img, loaded, total) {},
loaded_all: function(loaded, total) {},
cancel: function() {}
}, option);
setting.cancel(imgList);
var total = imgArr.length;
var loaded = 0;
setting.init(0, total);
for(var i in imgArr) {
imgList.push($("<img />")
.attr("src", imgArr[i])
.load(function() {
var loadedImg=$("img[src='"+$(this).attr("src")+"']");
if(loadedImg.attr("width")==undefined){
$("img[src='"+$(this).attr("src")+"']").attr({
width: this.width,
height: this.height
});
};
loaded++;
setting.loaded(this, loaded, total);
if(loaded == total) {
setting.loaded_all(loaded, total);
imgList = [];
};
})
);
}
}
});
})(jQuery);
function preload(arr,preloaderFunc,preloaderCompleteFunc){
$.preload(arr, {
init: function(loaded, total) {
var percent=(100/total)*loaded;
eval(preloaderFunc+"("+percent+")");
},
loaded: function(img, loaded, total) {
var percent=(100/total)*loaded;
eval(preloaderFunc+"("+percent+")");
},
loaded_all: function(loaded, total) {
eval(preloaderCompleteFunc+"()")
},
cancel: function(imgList) {
if(imgList.length>0){
for(var i in imgList) {
console.log("remove:"+imgList[i])
imgList[i].unbind("load").remove();
}
imgList = [];
};
}
});
};
function preloader(percent){
$(".loaderBar").stop().animate({ "width" : percent+"%" }, 500)
};
function initPreloadImgs(){
if($('.preloadImgs').length != 0) {
$('.preloadImgs').not(".preloadImgs-ok").each(function(index) {
$(this).addClass("preloadImgs-ok");
var preloaderFunc=hasClassVal($(this),"preloaderFunc:");
var preloaderCompleteFunc=hasClassVal($(this),"preloaderCompleteFunc:");
clearClass($(this),"preloaderFunc:");
clearClass($(this),"preloaderCompleteFunc:");
var preloadThem=[];
$('.preloadImgs').find("img").each(function(){
preloadThem.push($(this).attr("src"));
});
if(preloadThem.length==0){
eval(preloaderCompleteFunc+"()");
}else{
preload(preloadThem,preloaderFunc,preloaderCompleteFunc);
};
});
};
};
function preloaded(){
$(".main").fadeIn(1000);
};
function hasClassVal(obj,val){
var classes=$(obj).attr("class")!=undefined?$(obj).attr("class").split(" "):"";
var valLength=val.length;
var getVal=""
for(var i in classes){
var optz=classes[i];
if(optz.length>valLength){
if(optz.substr(0,valLength) == val){
getVal = optz.substr(valLength);
break;
};
};
};
return getVal;
};
</script>
</head>
<body>
<div class="loader"><div class="loaderBar"></div></div>
<div class="main preloadImgs preloaderFunc:preloader preloaderCompleteFunc:preloaded" style="display:none;">
<img src="assets/001.jpg"/>
<img src="assets/002.jpg"/>
<img src="assets/003.jpg"/>
</div>
</body>
</html>
(函数($){
imgList=[];
$扩展({
预加载:功能(imgArr,选项){
var设置=$.extend({
init:函数(已加载,总计){},
已加载:函数(img,loaded,total){},
loaded_all:函数(loaded,total){},
取消:函数(){}
},选择权);
设置。取消(imgList);
var total=imgArr.length;
var=0;
设置.init(0,总计);
用于(imgArr中的var i){
imgList.push($($0){
for(imgList中的var i){
日志(“删除:+imgList[i])
imgList[i].解除绑定(“加载”).remove();
}
imgList=[];
};
}
});
};
函数预加载程序(百分比){
$(“.loaderBar”).stop().animate({“宽度”:百分比+“%”),500)
};
函数initpreload imgs(){
如果($('.preloimgs').length!=0){
$('.preloimgs')。不是(“.preloimgs ok”)。每个(函数(索引){
$(this.addClass(“preloimgs ok”);
var preparerfunc=hasClassVal($(这个),“preparerfunc:”);
var preload-completefunc=hasClassVal($(这个),“preload-completefunc:”);
clearClass($(this),“preforerFunc:”);
clearClass($(this),“preprederCompleteFunc:”);
var=他们[];
$('.preloimgs').find(“img”).each(function(){
preload.push($(this.attr(“src”));
});
如果(预加载它们。长度==0){
eval(prepredercompletefunc+“()”);
}否则{
预加载(预加载它们、预加载函数、预加载完成函数);
};
});
};
};
函数预加载(){
$(“.main”).fadeIn(1000);
};
函数HASSCLASSVAL(obj,val){
var classes=$(obj.attr(“类”)!=未定义?$(obj.attr(“类”).split(“”):;
var valLength=val.length;
var getVal=“”
对于(类中的变量i){
var optz=类别[i];
如果(optz.length>valLength){
if(optz.substr(0,valLength)=val){
getVal=optz.substr(valLength);
打破
};
};
};
返回getVal;
};
您所能做的就是释放现有的映像引用。是否删除正在运行的映像请求取决于浏览器的内部实现。清除事件处理程序至少会阻止您在加载映像时处理它们。您可以通过添加cancel()来清除所有引用
方法将对象设置为如下所示:
cancel: function() {
for (var i = 0; i < imgList.length; i++) {
// clean up any jQuery data and event handlers associated with this object
imgList[i].remove();
}
// clear out the imgList so all former array elements can be garbage collected
imgList = [];
}
function Loader(gallery)
{
this.terminated = false;
this.load = function()
{
// Loading code.
for (loop condition)
{
// break if this.terminated becomes true.
}
}
}
var loader = null;
function preloadGallery(gallery)
{
// Tell the previous one to stop.
if (loader !== null)
loader.terminated = true;
// Start the new one.
loader = new Loader(gallery);
}
cancel:function(){
对于(变量i=0;i
如果将加载程序放入类中,则可以在单击链接时创建一个已加载的加载程序。以前的任何加载程序都可以获得一个属性,告诉它停止加载
大概是这样的:
cancel: function() {
for (var i = 0; i < imgList.length; i++) {
// clean up any jQuery data and event handlers associated with this object
imgList[i].remove();
}
// clear out the imgList so all former array elements can be garbage collected
imgList = [];
}
function Loader(gallery)
{
this.terminated = false;
this.load = function()
{
// Loading code.
for (loop condition)
{
// break if this.terminated becomes true.
}
}
}
var loader = null;
function preloadGallery(gallery)
{
// Tell the previous one to stop.
if (loader !== null)
loader.terminated = true;
// Start the new one.
loader = new Loader(gallery);
}
顺便说一句,在我看来,你使用了一种不同于平常的技术来预加载图像。看看。我很确定你不必执行
。unbind()
。调用.remove()
应该为你解决这个问题。另外,你真的不应该使用表单(imgList中的var I)
在数组上。它迭代对象的所有属性,这些属性可以包括数组元素以外的内容。应使用直接数组索引对数组进行迭代,以便仅使用for(var i=0;i
或更新的.foreach()
获取数组值。