html图片懒加载,图片懒加载原理及实现

原理:

先将img标签的src链接设为同一张图片(比如空白图片),然后给img标签设置自定义属性(比如 data-src),然后将真正的图片地址存储在data-src中,当JS监听到该图片元素进入可视窗口时,将自定义属性中的地址存储到src属性中。达到懒加载的效果。

这样做能防止页面一次性向服务器发送大量请求,导致服务器响应面,页面卡顿崩溃等。

实现:

Document

.container{

max-width: 800px;

margin:0 auto;

}

.container:after{

content:"";

display: block;

clear:both;

}

.container img{

width:50%;

height:260px;

float:left;

}

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

// 一开始没有滚动的时候,出现在视窗中的图片也会加载

start();

// 当页面开始滚动的时候,遍历图片,如果图片出现在视窗中,就加载图片

var clock; //函数节流

$(window).on('scroll',function(){

if(clock){

clearTimeout(clock);

}

clock = setTimeout(function(){

start()

},200)

})

function start(){

$('.container img').not('[data-isLoading]').each(function () {

if (isShow($(this))) {

loadImg($(this));

}

})

}

// 判断图片是否出现在视窗的函数

function isShow($node){

return $node.offset().top <= $(window).height()+$(window).scrollTop();

}

// 加载图片的函数,就是把自定义属性data-src 存储的真正的图片地址,赋值给src

function loadImg($img){

$img.attr('src', $img.attr('data-src'));

// 已经加载的图片,我给它设置一个属性,值为1,作为标识

// 弄这个的初衷是因为,每次滚动的时候,所有的图片都会遍历一遍,这样有点浪费,所以做个标识,滚动的时候只遍历哪些还没有加载的图片

$img.attr('data-isLoading',1);

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值