懒加载实现原理:

21 篇文章 0 订阅
7 篇文章 0 订阅

1、对于img标签,只要将图片地址赋给src属性,浏览器解析的时候就会自动去请求图片地址所指向的资源,浏览器的这个机制我们是没办法改变的,那么我们只能在src属性上做文章,在刚开始的时候我们把图片地址赋给img标签一个自定义属性例如data-src,src属性留空。

2、设置一个定时器定时检测出现在视图内的图片,并将其data-src属性的值赋值给src属性。(其实这个地方也可以通过事件来检测)

原生js的实现:

var imgs = document.getElementsByTagName(“img”);
function lazyload(){
var scrollTop = window.pageXOffset || document.documentElement.scrollTop || document.body.scrollTop;
var viewportSize = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
for(var i=0,len=imgs.length;i<len;i++){ var x = scrollTop + viewportSize - imgs[i].offsetTop; if(x>0){
imgs[i].src = imgs[i].getAttribute(“loadpic”);
}
}
}
setInterval(lazyload,1000);

jQuery的实现:
$(function(){
var viewportSize = $(window).height();
var lazyload = function(){
var scrollTop = $(window).scrollTop();
$(“img”).each(function(){
var _this = $(this);
var x = viewportSize + scrollTop + _this.position().top;
if(x>0){
_this.attr(“src”,_this.attr(“loadpic”));
}
})
}
setInterval(lazyload,1000);
})

我是分割线---------------------------------------------------------------------------------------------------------------------------------------------
图片延迟加载主要是用来解决一个页面中图片太多,导致打开页面的时候一次性加载太多图片导致打开速度慢的问题。现在在很多网站上都用得很多,比如说微店,淘宝等一些图片量较大的网站,采取懒加载也是利于用户体验。

原理即是网页代码中有img标签,但是没有src属性,只是把src原本应该放的图片链接放到另外一个属性值去,比如说data-src,这样浏览器就不能把图片渲染出来。但是可以通过js获取这个图片链接,通过适时把获取到的图片链接赋值给src属性上,这样图片就能在适时的时候渲染出来,而不是一次性全部加载,而是通过鼠标滚动,一个一个加载进来。

基于jQuery的代码(使用前务必引入jQuery):

====================================================================================================================================================================

-它的实现原理很简单,先把img的src指向一个小图片,图片真实的地址存储在img一个自定义的属性里,,等到此图片出现在视野范围内了,获取img元素,把data-src里的值赋给src。
(一)获取窗口、窗口滚动和元素距离窗口顶部的偏移高度,计算元素是否出现在窗口可视范围内;
function isShow($el){
var winH = $(window).height(),//获取窗口高度 scrollH = $(window).scrollTop(),//获取窗口滚动高度 top = $el.offset().top;//获取元素距离窗口顶部偏移高度
if(top < scrollH + winH){
return true;//在可视范围
}else{
return false;//不在可视范围
} }
(二)监听窗口滚动事件,检查元素是否在可视范围内;
$(window).on(‘scroll’, function(){//监听滚动事件 checkShow(); }) checkShow(); function checkShow(){//检查元素是否在可视范围内 $(‘img’).each(function(){//遍历每一个元素 var $cur = ( t h i s ) ; i f ( ! ! i s l o a d e d ( (this); if(!!isloaded( (this);if(!!isloaded(cur)){return;}//判断是否已加载 if (isShow(KaTeX parse error: Expected '}', got 'EOF' at end of input: …ion(){ showImg(cur); },300)//设置时间是为了更好的看出效果 }; }); }
(三)元素显示的时候把之前的默认照片替换成data-src里的照片。
function showImg($el){
$el.attr(‘src’, $el.attr(‘data-src’));
$cur.data(‘isloaded’,true);
}

转自:博客(https://www.cnblogs.com/luckygirl-1/p/10286132.html)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值