博客
关于我
[转]javascript 懒加载技术(lazyload)简单实现
阅读量:466 次
发布时间:2019-03-06

本文共 2114 字,大约阅读时间需要 7 分钟。

懒加载技术并非新技术,它是JavaScript开发者为优化网页性能所采用的有效方法。懒加载的核心理念是按需加载资源,以减少初始页面加载时间。无论是大型动态网站还是静态页面,懒加载都能发挥重要作用。例如,谷歌图片搜索、迅雷首页、淘宝网以及QQ空间等知名网站都采用了懒加载技术。掌握这一技术不仅能提升开发效率,还能显著改善用户体验。

在实际应用中,懒加载技术主要用于加载占用带宽较多的资源,例如图片、Flash元素、iframe以及一些大型网页编辑器(如FCK等)。这些资源在页面初始加载时可能会占用大量带宽,尤其是在用户尚未将这些资源滚动到可视区域时。通过懒加载,可以避免一次性加载过多资源,从而减少等待时间,提升用户体验。

实现懒加载的关键在于确定何时加载所需资源。这需要了解两个核心信息:第一,浏览器当前可视区域的位置;第二,待加载资源相对于浏览器可视区域的位置。为此,可以通过以下方法获取这些信息:

function getClient() {    var l = document.documentElement.scrollLeft || document.body.scrollLeft;    var t = document.documentElement.scrollTop || document.body.scrollTop;    var w = document.documentElement.clientWidth;    var h = document.documentElement.clientHeight;    return { left: l, top: t, width: w, height: h };}
function getSubClient(p) {    var l = 0, t = 0, w = p.offsetWidth, h = p.offsetHeight;    var element = p.offsetParent;    while (element) {        l += element.offsetLeft;        t += element.offsetTop;        element = element.offsetParent;    }    return { left: l, top: t, width: w, height: h };}

通过上述两个函数,可以分别获取浏览器可视区域的信息和待加载资源的位置信息。接下来,需要判断这两个区域是否相交。可以通过以下函数实现:

function intens(rec1, rec2) {    var lc1 = rec1.left + rec1.width / 2;    var lc2 = rec2.left + rec2.width / 2;    var tc1 = rec1.top + rec1.height / 2;    var tc2 = rec2.top + rec2.height / 2;    var w1 = (rec1.width + rec2.width) / 2;    var h1 = (rec1.height + rec2.height) / 2;    return Math.abs(lc1 - lc2) < w1 && Math.abs(tc1 - tc2) < h1;}

在实际应用中,可以将这些逻辑嵌入到window.onscroll事件处理函数中,监控目标区域是否进入浏览器可视区域。例如:

var d1 = document.getElementById("d1");window.onscroll = function() {    var prec1 = getClient();    var prec2 = getSubClient(d1);    if (intens(prec1, prec2)) {        alert("true");    }};

需要注意的是,为了避免过多的onscroll事件处理,建议将监测逻辑抽象出来,并使用数组收集需要监测的对象。同时,确保在onscrollonresize事件中都能够及时更新可视区域信息,可以通过以下方式实现:

function autocheck() {    var prec1 = getClient();    jiance(arr, prec1, function(obj) {        alert(obj.innerHTML);    });}
var arr = [d1, d2];window.onscroll = function() {    autocheck();};window.onresize = function() {    autocheck();};

通过上述方法,可以实现按需加载资源的效果。对于具体实现细节,可以根据实际需求进行调整。如有疑问或需要进一步的优化,可以随时联系我。

转载地址:http://bmgfz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现euler modified变形欧拉法算法(附完整源码)
查看>>
Objective-C实现eulerianPath欧拉路径算法(附完整源码)
查看>>
Objective-C实现EulersTotient欧拉方程算法(附完整源码)
查看>>
Objective-C实现eval函数功能(附完整源码)
查看>>
Objective-C实现even_tree偶数树算法(附完整源码)
查看>>
Objective-C实现Exceeding words超词(差距是ascii码的距离) 算法(附完整源码)
查看>>
Objective-C实现extended euclidean algorithm扩展欧几里得算法(附完整源码)
查看>>
Objective-C实现Factorial digit sum阶乘数字和算法(附完整源码)
查看>>
Objective-C实现factorial iterative阶乘迭代算法(附完整源码)
查看>>
Objective-C实现factorial recursive阶乘递归算法(附完整源码)
查看>>
Objective-C实现factorial阶乘算法(附完整源码)
查看>>
Objective-C实现Fast Powering算法(附完整源码)
查看>>
Objective-C实现fenwick tree芬威克树算法(附完整源码)
查看>>
Objective-C实现FenwickTree芬威克树算法(附完整源码)
查看>>
Objective-C实现fft2函数功能(附完整源码)
查看>>
Objective-C实现fibonacci斐波那契算法(附完整源码)
查看>>
Objective-C实现FigurateNumber垛积数算法(附完整源码)
查看>>
Objective-C实现first come first served先到先得算法(附完整源码)
查看>>
Objective-C实现Gale-Shapley盖尔-沙普利算法(附完整源码)
查看>>
Objective-C实现hamiltonianCycle哈密尔顿图算法(附完整源码)
查看>>