JS 이미지 게 으 름 로드(lazyload)과정 상세 설명 실현
게 으 름 로드 의 의미(게 으 름 로드 를 왜 사용 하 는 지)
페이지 로 딩 속도 에 가장 큰 영향 을 미 치 는 것 은 그림 입 니 다.일반적인 그림 한 장 은 몇 M 의 크기 에 달 할 수 있 고 코드 는 몇 십 KB 에 불과 할 수도 있 습 니 다.페이지 그림 이 많 을 때 페이지 의 로드 속도 가 느 리 고 몇 S 시간 동안 페이지 가 로드 되 지 않 아 많은 사용 자 를 잃 을 수 있 습 니 다.
따라서 그림 이 너무 많은 페이지 에 대해 페이지 로 딩 속 도 를 가속 화하 기 위해 서 는 화면 에 나타 나 지 않 은 그림 을 불 러 오지 않 고 시각 영역 으로 스크롤 한 후에 불 러 와 야 할 때 가 많 습 니 다.이렇게 하면 페이지 로 딩 성능 이 크게 향상 되 고 사용자 체험 도 향상 된다.
의 원리
페이지 에 있 는 img 태그 src 를 작은 그림 이나 src 를 비어 있 는 것 으로 가리 키 고 데이터-src(이 속성 은 사용자 정의 이름 을 지정 할 수 있 습 니 다.저 는 데이터-src)속성 으로 실제 그림 을 가리 킵 니 다.src 는 기본 그림 을 가리 키 며,그렇지 않 으 면 src 가 비어 있 을 때 서버 에 요청 을 보 냅 니 다.loading 주 소 를 가리 킬 수 있 습 니 다.
주:그림 은 너비 와 높이 를 지정 해 야 합 니 다.
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" />
페이지 를 불 러 올 때 시각 영역 에 있 는 img 태그 의 data-src 속성 값 을 src 에 마이너스 로 한 다음 스크롤 이 벤트 를 감청 하여 사용자 가 볼 그림 을 불 러 옵 니 다.이렇게 하면 게 으 른 로드 를 실현 할 수 있다.코드
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
img {
display: block;
margin-bottom: 50px;
width: 400px;
height: 400px;
}
</style>
</head>
<body>
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="default.jpg" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt="">
<img src="default.jpg" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt="">
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="default.jpg" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt="">
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
</body>
JavaScript
<script>
var num = document.getElementsByTagName('img').length;
var img = document.getElementsByTagName("img");
var n = 0; // ,
lazyload(); //
window.onscroll = lazyload;
function lazyload() { //
var seeHeight = document.documentElement.clientHeight; //
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //
for (var i = n; i < num; i++) {
if (img[i].offsetTop < seeHeight + scrollTop) {
if (img[i].getAttribute("src") == "default.jpg") {
img[i].src = img[i].getAttribute("data-src");
}
n = i + 1;
}
}
}
</script>
jQuery
<script>
var n = 0,
imgNum = $("img").length,
img = $('img');
lazyload();
$(window).scroll(lazyload);
function lazyload(event) {
for (var i = n; i < imgNum; i++) {
if (img.eq(i).offset().top < parseInt($(window).height()) + parseInt($(window).scrollTop())) {
if (img.eq(i).attr("src") == "default.jpg") {
var src = img.eq(i).attr("data-src");
img.eq(i).attr("src", src);
n = i + 1;
}
}
}
}
</script>
절 류 함수 로 성능 최적화스크롤 이벤트 에 함 수 를 직접 연결 하면 페이지 가 굴 러 갈 때 함수 가 고주파 로 작 동 됩 니 다.이것 은 브 라 우 저의 성능 에 매우 영향 을 줍 니 다.
나 는 트리거 주파 수 를 제한 하여 성능 을 최적화 시 키 고 싶다.
절 류 함수:한 함수 만 N 초 안에 실행 할 수 있 습 니 다.다음은 간단 한 절 류 함수 입 니 다.
//
//fun
//delay
//time time
function throttle (fun, delay, time) {
let timeout
let startTime = new Date()
return function () {
let context = this
let args = Array.prototype.slice.call(arguments)
let curTime = new Date()
clearTimeout(timeout)
if (curTime - startTime >= time) {
// , handler
fun.apply(context, args)
startTime = curTime
} else {
// ,
timeout = setTimeout(function () {
fun.apply(context, args)
}, delay)
}
}
};
// scroll handler
function lazyload(event) {}
//
window.addEventListener('scroll',throttle(lazyload,500,1000));
떨 기 함수 로 성능 최적화떨 기 비교 절 류 함 수 는 조금 간단 해 야 합 니 다.떨 기 는 함 수 를 지연 시 키 는 것 이 고 절 류 는 떨 기 보다 하나 더 많 습 니 다.일정 시간 에 한 번 씩 실행 해 야 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 판단 수조 네 가지 실현 방법 상세그러면 본고는 주로 몇 가지 판단 방식과 방식 판단의 원리를 바탕으로 문제가 있는지 토론하고자 한다. 예를 들어 html에 여러 개의 iframe 대상이 있으면 instanceof의 검증 결과가 기대에 부합되지 않을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.