细说jQuery如何实现懒加载

作者: 韩宝亿 | 来源:发表于2016-06-08 14:08 被阅读8488次

一、为什么需要懒加载?

  • 对于图片过多的使用场景,为了提高页面加载速度,改善用户体验,我们对未出现在视野范围内的图片先不进行加载,等到出现在视野范围才去加载。

二、懒加载的实现原理

-它的实现原理很简单,先把img的src指向一个小图片,图片真实的地址存储在img一个自定义的属性里,<img src="lazy-load.png" data-src="xxx" />,等到此图片出现在视野范围内了,获取img元素,把data-src里的值赋给src。

三、实现懒加载必备的知识点

(一)获取窗口、窗口滚动和元素距离窗口顶部的偏移高度,计算元素是否出现在窗口可视范围内;
Paste_Image.png
    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 = $(this);
            if(!!isloaded($cur)){return;}//判断是否已加载
            if (isShow($cur)) {
              setTimeout(function(){
                showImg($cur);
                },300)//设置时间是为了更好的看出效果
            };
        });
    }
(三)元素显示的时候把之前的默认照片替换成data-src里的照片。
    function showImg($el){
        $el.attr('src', $el.attr('data-src'));
        $cur.data('isloaded',true);
    }
Paste_Image.png Paste_Image.png

相关文章

  • 细说jQuery如何实现懒加载

    一、为什么需要懒加载? 对于图片过多的使用场景,为了提高页面加载速度,改善用户体验,我们对未出现在视野范围内的图片...

  • jQuery实现懒加载

    题目1:如何判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视)。写一个函数 isVisib...

  • Jquery实现图片懒加载

    https://www.liaoxuefeng.com/article/00151045553343934ba3b...

  • jQuery实现图片懒加载

    一、懒加载 1.什么是懒加载 目前,网络上各大论坛,尤其是一些图片类型的网站上,在图片加载时均采用了一种名为懒加载...

  • jQuery实现图片懒加载...

    一、什么是图片懒加载 当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片...

  • ViewPager预加载、懒加载和禁止左右滑动

    此笔记主要是说一下ViewPager如何实现预加载,以及如何实现懒加载、禁止左右滑动。 ViewPager 作为平...

  • swift学习之懒加载

    在移动端开发过程之中,懒加载随处可见。在swift中,苹果推荐使用懒加载,如何实现懒加载呢? 关键字: lazy ...

  • JQuery 懒加载

    思路:1,引入jq的一个懒加载插件:jquery.lazyload.js2,不要给图片设置src属性,设置data...

  • jQuery懒加载

    问答 1. 如何判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视)。写一个函数 isVis...

  • jquery懒加载

    如何判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视)。写一个函数 isVisible实现...

网友评论

  • 3b2d4a4d59b5:你好,这个可以懒加载数据吗?有时候需要加载几M或者十几M的数据,为了提升速度,可以浏览到在实行分布加载。�
    3b2d4a4d59b5:@饥人谷_韩宝亿 965671492,给我个demo也行,谢谢啦。
    3b2d4a4d59b5:@饥人谷_韩宝亿 我已经能做出来了,但是一暴露会一直重复加载,能加个qq吗?我需要这个判断数据已存在的暂停机制。
    韩宝亿:@微光刺眼丶 数据跟发请求有关,你可以让它暴露出屏幕再发请求
  • 娃娃魚:同上,一堆报错。。。咋弄
    韩宝亿:@娃娃魚 报错信息是什么,这篇博客只是截取部分代码
  • 636feebc071e: 同问isloaded,能否指点一下?
    韩宝亿:@我就这六个字 字面意思,标记一下是否已经加载过了
  • d51dd0dd4a62:我用的是angular的框架写的,直接一次性加载 完了,怎么都做不出懒加载的效果,求解啊 QQ 823386717
    韩宝亿:@十多年以后 用angular就没必要用jq了
    韩宝亿:@十多年以后 angular我不懂噢,没学过
  • 3bdc9c221470:我的QQ是790026924可以加一下我的QQ吗,想请教您一些问题😊
  • 3bdc9c221470:你好,能不能加一下你的QQ,请教几个问题😊
  • 5419e7e81a99:谢谢分享😎
    a96aaa6213f2:@饥人谷_韩宝亿 同求demo+qq 1427417697 先大神 谢谢啦!:kissing_heart:
    韩宝亿:@10007ce9ae58 加你了
    10007ce9ae58:大神我也要demo +我q 783587466 我是 感叹号!
  • d337c7d2c9c4:作者你好,我还是没有明白代码中isloaded的怎么使用,我用你的代码复制过来做了一个demo,用两处报错了;第一个地方是:checkShow方法中的 /*if(!!isloaded($cur)){ return;}*/ 的isloaded
    另一个是:showImg()方法中的$cur.data('isloaded',true);的$cur;不知道我哪里使用错了
    韩宝亿:@宝宝取昵称醉了 干脆你加我QQ,我发几个demo给你参考一下
    d337c7d2c9c4:@饥人谷_韩宝亿 添加了一个全部变量:var isloaded= false;这次控制台报的是isloaded is not a function了
    韩宝亿:@宝宝取昵称醉了是报isloaded未定义吧?这个不是完整代码,要先定义一个isloaded变量,比如var isloaded = false; 这只是一个标志状态的作用
  • codingpanda:isloaded 方法好像没有吧!demo 希望放出来一下
    韩宝亿:@codingpanda 它只是给元素绑定一个自定义data属性,判断元素是否已被加载
    韩宝亿:@codingpanda isloaded不是方法,是一个标志而已
  • 阡陌夕殇:谢谢分享,很实用
    韩宝亿:@爱做梦的码农 不客气:smile:
  • 九号咖啡屋:原理是这样的原理 不错 这样可以自己写了 数据和背景图 应该都可以用
    韩宝亿:@凌霄道人 什么意思?
    a92403d0cb90:@饥人谷_韩宝亿 脑洞比头大😂
    韩宝亿:@Dexc 可以把它再封装一下写成插件,还可以结合ajax

本文标题:细说jQuery如何实现懒加载

本文链接:https://www.haomeiwen.com/subject/yrkjdttx.html