지연 로딩은 지연 로딩이라고도 합니다. 일반적으로 페이지에 이미지가 많고 페이지 높이나 너비가 여러 화면인 경우 페이지가 처음 로드될 때 이미지만 표시됩니다. 페이지가 스크롤되면 이미지가 로드되기 전에 표시 영역에 표시됩니다. 이렇게 하면 페이지 로딩 속도가 크게 향상되고 동시 이미지 요청이 줄어들어 서버에 대한 부담도 줄어듭니다. 사용자가 첫 화면에만 머무르면 데이터도 절약할 수 있습니다. TAB에 그림이 많으면 TAB에도 적용할 수 있으며 TAB이 트리거되면 그림이 로드됩니다.
이미지 지연 로딩의 원리는 비교적 간단합니다. 먼저, 사용자 정의 속성(lazy-src)에서 이미지의 실제 주소를 캐시하고 src 주소에 대해 1×1 완전 투명한 자리 표시자 이미지를 사용합니다. . 물론 자리 표시자 이미지가 다른 이미지일 수도 있습니다.

이미지 로딩에는 자바스크립트가 사용되기 때문에 사용자가 자바스크립트를 비활성화한 경우 대체 설정이 가능합니다.

페이지가 처음 로드되면 페이지의 이미지 위치가 얻어지고 캐시됩니다(오프셋 값이 취해질 때마다 페이지 리플로우가 트리거됨). 가시 영역이 계산되고 위치가 보이는 영역에 이미지의 내용이 나타나면 src 값은 실제 주소로 대체되고 이미지 로딩이 시작됩니다.
페이지가 스크롤되면 이미지의 캐시된 위치 값이 가시 영역에 나타나는지 확인하고 대신 src가 로드됩니다. 모든 이미지가 로드되면 해당 트리거 이벤트가 언로드되어 반복 작업으로 인한 메모리 누수를 방지합니다. 전체 창을 큰 컨테이너로 생각하면 페이지에 작은 컨테이너를 설정할 수도 있고 작은 컨테이너에 이미지 지연 로드를 구현할 수도 있습니다.
다음은 제가 jQuery 플러그인으로 작성한 구현 코드입니다.
(function( $ ){
$.fn.imglazyload = function( options ){
var o = $.extend({
attr : 'lazy-src',
container : window,
event : 'scroll',
fadeIn : false,
threshold : 0,
vertical : true
}, options ),
event = o.event,
vertical = o.vertical,
container = $( o.container ),
threshold = o.threshold,
// 将jQuery对象转换成DOM数组便于操作
elems = $.makeArray( $(this) ),
dataName = 'imglazyload_offset',
OFFSET = vertical ? 'top' : 'left',
SCROLL = vertical ? 'scrollTop' : 'scrollLeft',
winSize = vertical ? container.height() : container.width(),
scrollCoord = container[ SCROLL ](),
docSize = winSize + scrollCoord;
// 延迟加载的触发器
var trigger = {
init : function( coord ){
return coord >= scrollCoord &&
coord },
scroll : function( coord ){
var scrollCoord = container[ SCROLL ]();
return coord >= scrollCoord &&
coord },
resize : function( coord ){
var scrollCoord = container[ SCROLL ](),
winSize = vertical ?
container.height() :
container.width();
return coord >= scrollCoord &&
coord }
};
var loader = function( triggerElem, event ){
var i = 0,
isCustom = false,
isTrigger, coord, elem, $elem, lazySrc;
// 自定义事件只要触发即可,无需再判断
if( event ){
if( event !== 'scroll' && event !== 'resize' ){
isCustom = true;
}
}
else{
event = 'init';
}
for( ; i isTrigger = false;
elem = elems[i];
$elem = $( elem );
lazySrc = $elem.attr( o.attr );
if( !lazySrc || elem.src === lazySrc ){
continue;
}
// 先从缓存获取offset值,缓存中没有才获取计算值,
// 将计算值缓存,避免重复获取引起的reflow
coord = $elem.data( dataName );
if( coord === undefined ){
coord = $elem.offset()[ OFFSET ];
$elem.data( dataName, coord );
}
isTrigger = isCustom || trigger[ event ]( coord );
if( isTrigger ){
// 加载图片
elem.src = lazySrc;
if( o.fadeIn ){
$elem.hide().fadeIn();
}
// 移除缓存
$elem.removeData( dataName );
// 从DOM数组中移除该DOM
elems.splice( i--, 1 );
}
}
// 모든 이미지가 로드된 후 트리거 이벤트 언로드
if( !elems.length ){
if( TriggerElem ){
TriggerElem.unbind( event, fire );
}
else{
컨테이너.unbind( o.event, fire );
}
$( window ).unbind( 'resize', fire );
elems = null;
}
};
var fire = function( e ){
loader( $(this), e.type );
};
// 이벤트 바인딩
컨테이너 = 이벤트 === 'scroll' ? 컨테이너 : $( this )
컨테이너.bind( event, fire );
$( window ).bind( 'resize', fire ) ;
// 초기화
loader();
이것을 돌려주세요;
};
})( jQuery );
전화:
$ ( 'img' ).imglazyload({
event : 'scroll',
attr : 'lazy-src'
});
기본 호출에서는 모든 매개변수를 생략할 수 있습니다. .
이미지 지연 로딩을 위한 플러그인 API 설명:
attr string
HTML에 해당하는 이미지의 실제 주소를 저장하는 속성 이름이며 기본값은lazy-src입니다.
컨테이너 돔 및 선택기
기본 컨테이너는 window이며, 컨테이너를 사용자 정의할 수 있습니다.
이벤트 교반
이미지 로딩을 트리거하는 이벤트 유형, 기본값은 window.onscroll 이벤트입니다
fadeIn boolean
jQuery의 fadeIn 효과를 사용하여 표시할지 여부는 기본값이 false입니다.
임계값
이미지에서 지정된 거리까지 스크롤하면 페이지가 로드됩니다. 기본값은 0입니다.
vertical boolean
가로 스크롤 여부는 기본값이 true(세로)입니다.
loadScript(기능 강화 버전) boolean
자바스크립트 광고 이미지를 차단하지 않고 로드할지 여부의 기본값은 false입니다.

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
