


Delayed loading of images is also called lazy loading. It is usually applied to web pages with many images. If a page has many images and the page height or width is several screens, when the page is first loaded, only the images in the visible area will be displayed. When the page is scrolling, the image enters the visible area before being loaded. This can significantly improve the loading speed of the page, and fewer concurrent image requests can also reduce the pressure on the server. If users only stay on the first screen, they can also save data. If there are many pictures in TAB, it can also be applied to TAB, and then the pictures will be loaded when TAB is triggered.
The principle of lazy loading of images is relatively simple. First, cache the real address of the image in a custom attribute (lazy-src), and use a 1×1 fully transparent placeholder image for the src address. Instead, of course, the placeholder image can also be another image.

Because javascript is used to load images, if the user has disabled javascript, an alternative can be set up.

When the page is first loaded, the position of the image in the page is obtained and cached (each time the value of offset is taken will trigger a reflow of the page), the visible area is calculated, and when the position of the image appears in the visible area, the src is The value is replaced with the real address, and the image starts loading.
When the page scrolls, it is then determined whether the cached position value of the image appears in the visible area, and the src is loaded instead. When all images are loaded, the corresponding trigger events are unloaded to avoid memory leaks caused by repeated operations. Think of the entire window as a large container, then you can also set up a small container in the page, and you can also implement delayed loading of images in the small container.
The following is the implemented code, which I wrote as a jQuery plug-in.
(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 );
}
}
// Unload the trigger event after all images are loaded
if( !elems.length ){
if( triggerElem ){
triggerElem.unbind( event, fire );
}
else{
container.unbind( o.event, fire );
}
$( window ).unbind( 'resize', fire );
elems = null;
}
};
var fire = function( e ){
loader( $(this), e.type );
};
// Bind event
container = event === 'scroll' ? container : $( this );
container.bind( event, fire );
$( window ).bind( 'resize', fire );
// Initialization
loader();
return this;
};
})( jQuery );
Call:
$( 'img ' ).imglazyload({
event : 'scroll',
attr : 'lazy-src'
});
The default call can omit all parameters.
Plug-in API description for lazy loading of images:
attr string
The attribute name that stores the real address of the image, corresponding to HTML, and the default is lazy-src.
container dom & selector
The default container is window, and the container can be customized.
event stirng
The event type that triggers image loading, the default is window.onscroll event
fadeIn boolean
Whether to use jQuery’s fadeIn effect to display, the default is false.
threshold number
The page will be loaded when it is scrolled to the specified distance from the image. The default is 0.
vertical boolean
Whether to scroll horizontally, the default is true (vertical).
loadScript (enhanced version of the function) boolean
Whether to load JavaScript advertising images without blocking, the default is false.

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

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

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

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

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

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

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

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


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

Atom editor mac version download
The most popular open source editor

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Dreamweaver Mac version
Visual web development tools
