LazyLoad 지연 로드(필요 에 따라 불 러 오기)
_this.docInfo=function(){//
var d={},db= (wf)? document.body : warpper,
dd=(wf) ? document.documentElement : warpper;
if(sys.ie){
d.offh=dd.offsetHeight;// H
d.offw=dd.offsetWidth;// W
}else{
if(wf){
d.offw=window.innerWidth;// H
d.offh=window.innerHeight;// W
}else{
d.offh=dd.offsetHeight;// H
d.offw=dd.offsetWidth;// W
}
}
d.jtop=(wf) ? db.scrollTop+dd.scrollTop : db.scrollTop ;//
d.jleft=(wf) ? db.scrollLeft+dd.scrollLeft : db.scrollLeft;//
// window div scrollLeft OK
$j("bbb").innerHTML=d.offh+','+d.offw+','+d.jtop+','+d.jleft
return d;
}
// IE window offsetHeight offsetWidth ( IE )
// IE window window.innerWidth window.innerHeight
// IE window window 。
4.2 획득:로드 내용 의 정 보 를 얻 으 려 면 저 희 는 주로 로드 대상 이 페이지 용기 대상 에서 의 거 리 를 얻 습 니 다.IE 6 7 에는 BUG
wtop=sys.ie ? (sys.ie[1]=='6.0' || sys.ie[1]=='7.0') ? 0 : warpper.offsetTop : warpper.offsetTop,
wleft=sys.ie ? (sys.ie[1]=='6.0' || sys.ie[1]=='7.0') ? 0 : warpper.offsetLeft : warpper.offsetLeft,
getoff=function(o){// IMG offw and offh
o.innerHTML=(o.offsetTop-wtop) +','+ (o.offsetLeft-wleft);
return (o.offsetTop-wtop) +','+ (o.offsetLeft-wleft);
// o.offsetTop chrome window.onload
};
4.3 이 있 습 니 다.로 딩 메 인 프로그램 은 현재 시각 적 범위 내 에서 대상 을 불 러 오 는 것 을 책임 집 니 다.그러면 불 러 올 대상 을 모두 옮 겨 다 녀 야 합 니 다.대상 이 현재 로드 중 인지 판단 합 니 다.그리고 불 러 와.내 밑 에 그림 이 하나 있 을 거 야.방법 이 좋 지 않 을 수도 있 습 니 다)
_this.Load=function(){
var hereline=[];
hereline[1]=doc.offh+doc.jtop;
hereline[2]=doc.offw+doc.jleft;
for(i=0;i<imgs.length;i++){
if(imgs[i][1] != undefined){//
var jj=hereline[1] - imgs[i][1] < doc.offh +130 && hereline[1] - imgs[i][1] > 0 ? true : false,
jjj=hereline[2] - imgs[i][2] < doc.offw +270 && hereline[2] - imgs[i][2] > 0 ? true : false;
if(jj && jjj){
imgall[i].innerHTML+=' '+(++j)+' ';
imgs[i][1]=undefined;
}
}
}
if( j >= imgs.length){//
//
alert(" , ")
warpper.onscroll=null;
warpper.onresize=null;
}
}
저 는 제 판단 절 차 를 별로 좋아 하지 않 지만 잠시 찾 지 못 했 거나 더 좋 은 알고리즘 을 이해 하지 못 했 습 니 다.그래서 이 걸 먼저 썼어 요.대체로 용기 의 시각 높이+용기 스크롤 높이-대상 거리 용기 거리>용기 시각+대상 본 키 또는 너비 로 로드 범위 임 을 증명 합 니 다.(잰말놀이)우 리 는 이미 불 러 온 대상 을 제외 해 야 한다.불 러 온 대상 도 이상 의 공식 을 만족 시 키 는 동시에 판단 을 적 게 할 수 있 기 때문이다.imgs[i][1]=undefined; if(imgs[i][1] != undefined){//현재 대상 이 불 러 왔 는 지 판단 합 니 다.각각 4 개의 서로 다른 뿔 이 시각 범위 내 에 드 러 났 다.그래서 이 네 개의 대상 은 불 러 와 야 합 니 다.대상 의 어떤 점 이나 어떤 선 만 을 고려 해 대상 이 시각 적 범위 에 있 는 지 판단 하면 좋 지 않 은 체험 을 할 수 있다.위의 상황 이 있 기 때문에 우리 의 프로 그래 밍(시각 적 범위 내 에 있 는 지 판단)에 도 어려움 을 증가 시 켰 다.내 위의 방법 은 완성 할 수 있다.버그 를 발견 하면 가르쳐 주세요.사실 나 도 좀 어 지 러 워.)마지막 으로 몇 가지 기술 이 있 습 니 다.예 를 들 어 1:대상 을 모두 불 러 왔 습 니 다.용기 대상 이벤트 트리거 를 제거 해 야 합 니 다.2:대상 이 시각 적 범위 에 있 는 지,또는 옮 겨 다 니 는 대상 의 알고리즘 을 최대한 최적화 합 니 다.많은 브 라 우 저 자원 을 절약 할 수 있다.3:cloudgamer 는 또 하나의 지연 트리거 를 언급 했다.바로 빠 른 미끄럼 스크롤 바 이 고 지연 시 키 는 것 도 작은 최적화 이다.5:클 라 우 드 게 이 머 를 추천 하 는 그 는 상세 하고 나 보다 잘 한다.그래서 이 효 과 를 배 워 보 는 것 을 추천 합 니 다.많은 것들 을 나 도 그 를 거울 로 삼 았 다.그리고 조언 감사합니다.Lazyload 로드 지연 효과 6:나의 소스 코드
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>lazyload</title>
</head>
<body>
<style type="text/css">
body{ margin:0px; padding:0; font-size:12px;}
.jelle_box{width:270px; height:129px; border:1px solid #CCC; float:left;}
</style>
<input type="button" value=" " onclick="lazyload().judge();" />
<div style="width:100%; height:500px; overflow:scroll; border:2px solid #999;" id="jelle_abcd">
<div id="aaa" style="width:2500px; height:800px; margin:10px;">
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
<div class="jelle_box"></div>
</div>
</div>
<div style=" height:30px" id="bbb"></div>
<script type="text/javascript">
(function(){
window.lazyload=function(){
var _this={},//
imgsurl=['baidu_logo_2.gif']// 。
imgs=[],// IMG [[url,offw,offh],[url,offw,offh]]
i=0,//
j=0,//
warpper=document.getElementById('jelle_abcd'),//window,//
wf=(warpper==window) ? true : false;
doc={offw:0,offh:0,jtop:0,jleft:0},//
sys=(function(){// ,
var ua=navigator.userAgent.toLowerCase(),sys={};
sys.firefox=ua.match(/firefox\/([\d\.]+)/);
sys.ie=ua.match(/msie\s([\d\.]+)/);
sys.chrome=ua.match(/chrome\/([\d\.]+)/);
return sys;
})(),
$j=function(id){return document.getElementById(id);},
imgall=$j('aaa').getElementsByTagName('DIV'),
getoff=function(o){// IMG offw and offh
//alert(o.width)
o.innerHTML=(o.offsetTop-warpper.offsetTop) +','+ (o.offsetLeft-warpper.offsetLeft);
return (o.offsetTop-warpper.offsetTop) +','+ (o.offsetLeft-warpper.offsetLeft);
// o.offsetTop chrome window.onload
};
//o.offsetTop 。( window )
(function(){// ==
if(wf){
window.onscroll=function(){_this.judge();};
window.onresize=function(){_this.judge();};
}else{
warpper.onscroll=function(){_this.judge();}
warpper.onresize=function(){_this.judge();}
}
window.onload=function(){setTimeout(_this.judge,500);};
})()
//
for( i ; i<imgall.length ; i++ ){// imgs
var arr=[],off;
off=getoff(imgall[i]);
//alert(off)
arr.push(imgsurl[0]);
arr.push((off.split(',')[0]));
arr.push((off.split(',')[1]));
imgs.push(arr);
}
_this.Load=function(){
var hereline=[];
hereline[1]=doc.offh+doc.jtop;
hereline[2]=doc.offw+doc.jleft;
for(i=0;i<imgs.length;i++){
if(imgs[i][1] != undefined){//
var jj=hereline[1] - imgs[i][1] < doc.offh +130 && hereline[1] - imgs[i][1] > 0 ? true : false,
jjj=hereline[2] - imgs[i][2] < doc.offw +270 && hereline[2] - imgs[i][2] > 0 ? true : false;
if(jj && jjj){
imgall[i].innerHTML+=' '+(++j)+' ';
imgs[i][1]=undefined;
}
}
}
if( j >= imgs.length){//
//
alert(" , ")
warpper.onscroll=null;
warpper.onresize=null;
}
}
_this.docInfo=function(){//
var d={},db= (wf)? document.body : warpper,
dd=(wf) ? document.documentElement : warpper;
if(sys.ie){
d.offh=dd.offsetHeight;// H
d.offw=dd.offsetWidth;// W
}else{
if(wf){
d.offw=window.innerWidth;// H
d.offh=window.innerHeight;// W
}else{
d.offh=dd.offsetHeight;// H
d.offw=dd.offsetWidth;// W
}
}
d.jtop=(wf) ? db.scrollTop+dd.scrollTop : db.scrollTop ;//
d.jleft=(wf) ? db.scrollLeft+dd.scrollLeft : db.scrollLeft;//
// window div scrollLeft OK
$j("bbb").innerHTML=d.offh+','+d.offw+','+d.jtop+','+d.jleft
return d;
}
// IE window offsetHeight offsetWidth ( IE )
// IE window window.innerWidth window.innerHeight
// IE window window 。
_this.judge=function(){//
var d=_this.docInfo();
if( d.jtop != doc.jtop || d.jleft != doc.jleft || d.offw > doc.offw || d.offh > doc.offh){
//
// y x
doc.jtop = d.jtop;
doc.offh = d.offh;
doc.jleft = d.jleft;
doc.offw = d.offw;
_this.Load();//
}
}
//setTimeout(_this.judge,500);//
//setTimeout onload onscroll
// onscroll onload
return _this;
}
})()
lazyload();
</script>
</body>
</html>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Jquery.LazyLoad.js 수정판 다운로드,이미지 지연 로드 플러그 인 구현인터넷 에서 내 려 받 은 버 전 은 많 든 적 든 버그 가 있다.특히 불 러 온 후 IE6 와 IE7 에서 그림 이 반 짝 이 는 것 은 큰 문제 로 인터넷 에서 오랫동안 찾 아 봤 지만 관련 해결 방안 을 찾 지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.