아래 함수를 사용하여 내 ajax 페이지에 이미지를 미리로드합니다. 내 페이지에 이미지 갤러리가 있습니다. 하지만 다른 갤러리 링크를 클릭하면 현재 갤러리 미리로드를 중단해야합니다. 어떤 도움이 필요합니까? 감사합니다 ...어떻게 미리로드를 중지 할 수 있습니까?
그것은 예와 ... 여기서 일하고 코드 해결 될 ...
<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>
고맙습니다. 작동합니다 !!! ... 내 수정 된 질문에 대한 코드를 볼 수 있습니다. –
'.unbind()'할 필요가 없다고 확신합니다. '.remove()'를 호출하면 그것을 처리해야한다. – jfriend00
괜찮습니다. 덕분에 ... –