简单实现懒加载效果

懒加载原理就是先利用自定义属性存放图片资源,然后监听浏览器窗口,滑动的时候才设置图片资源(发送请求),从而实现懒加载效果。

代码如下:

<!DOCTYPE HTML>

<html>

    <head>
        <meta charset="utf-8" />
        <title>懒加载</title>

    </head>
    <style type="text/css">
        div:not(#wrapper) {
            display: block;
            height: 400px;
        }
    </style>

    <body>

        <div id="wrapper">

            <a href="#" class="image featured"><img data-src="http://img02.sogoucdn.com/app/a/100520093/60d2f4fe0275d790-fbe7539243950f9f-7f669dbeead0ad667f21be96b5efd843.jpg" /></a>
            <div>占位</div>
            <a href="#" class="image featured"><img data-src="http://bizhi.zhuoku.com/2010/10/22/kuanping/kuanping39.jpg" /></a>
            <div>占位</div>
            <a href="#" class="image featured"><img data-src="http://image.tianjimedia.com/uploadImages/2011/306/MOH58845COC4.jpg" /></a>
            <div>占位</div>
            <a href="#" class="image featured"><img data-src="http://image.tianjimedia.com/uploadImages/2011/306/EQ2E3ZUPNMNV.jpg" /></a>
            <div>占位</div>
            <a href="#" class="image featured"><img data-src="http://a2.att.hudong.com/79/22/01000000000000119062273272179.jpg" /></a>
            <div>占位</div>
            <a href="#" class="image featured"><img data-src="http://img1.3lian.com/2015/w7/90/d/5.jpg" /></a>
            <div>占位</div>

            <script>
                //针对firefox的load事件
                window.addEventListener("DOMContentLoaded", lazyLoadImages);
                //通用load事件
                window.addEventListener("load", lazyLoadImages);
                //浏览器窗口调整
                window.addEventListener("resize", lazyLoadImages);
                //页面滚动事件
                window.addEventListener("scroll", lazyLoadImages);

                function lazyLoadImages() {

                    var images = document.querySelectorAll("img[data-src]");
                    //遍历所有的img标签
                    //[].forEach.call(...)是Array.prototype.forEach.call(...)简写
                    [].forEach.call(images, function(item) {
                        //item是images数组对象,即是一个个img标签
                        if(elementInViewport(item)) {
                            //将data-src替换src属性
                            item.setAttribute("src", item.getAttribute("data-src"));
                            item.removeAttribute("data-src")
                        }
                    })

                    if(images.length == 0) {
                        window.removeEventListener("DOMContentLoaded", lazyLoadImages);
                        window.removeEventListener("load", lazyLoadImages);
                        window.removeEventListener("resize", lazyLoadImages);
                        window.removeEventListener("scroll", lazyLoadImages);
                    }

                }
                //元素
                function elementInViewport(el) {
                    //获取DOMRect对象边框相对于浏览器的位置
                    var rect = el.getBoundingClientRect();
                    //返回DOMRect对象上下左右的位置坐标
                    return(
                        rect.top >= 0 &&
                        rect.left >= 0 &&
                        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
                        rect.right <= (window.innerWidth || document.documentElement.clientWidth)
                    );
                }
            </script>
    </body>

</html>

附图:

PS:此代码仅用于研究懒加载功能具体怎么实现。具体请参考LazyLoad.js插件。

总结:实际的项目中,建议使用LazyLoad.js(2.0)插件或者blazy.js插件,更好的满足项目的实际需求。

时间: 2024-08-03 15:26:21

简单实现懒加载效果的相关文章

Jquery滚动到页面底部自动Ajax加载图文列表,类似图片懒加载效果,带加载效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>滚动到页面顶部加载</title&g

jq demo 简单的图片懒加载效果

重点:在元素进入可视区域后,把图片元素的 _src 的值,赋值给 src <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <style> div{ margin-top:300px; width:

js效果笔记:怎样实现图片的懒加载以及jquery.lazyload.js的使用

在项目中有时候会用到图片的延迟加载,那么延迟加载的好处是啥呢? 我觉得主要包括两点吧,第一是在包含很多大图片长页面中延迟加载图片可以加快页面加载速度:第二是帮助降低服务器负担. 下面介绍一下常用的延迟加载插件jquery.lazyload.js以及怎样实现一个延迟加载的插件. 一:jquery.lazyload.js插件 lazyload是jQuery写的延迟加载插件,在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 实现原理 首

懒加载原理分析

最近添加了相册功能到网站上,一旦打开浏览器就会加载大量图片,从而造成页面的卡顿和跳动,同时对服务器也造成一定的压力.所以很显然需要用到懒加载功能. 懒加载的概念,就是等到让图片出现在浏览器中的窗口的时候再去加载该图片资源.这样避免网页在同一时间加载过多资源出现的页面卡死. 牛刀小试 现有插件很多,我也直接拿来用了,推荐使用 jQuery 的 lazyload.js ,大致阐述一下它的用法. <!-- css --> <style> img.lazy { /* 设置宽高 */ } &

抛砖引玉:大型网站性能优化之Javascript异步懒加载技术

懒加载技术是现在许多大型网站的都使用的提高网站性能的方式,它的核心思想是当用户想看页面某个区域时,再加载该区域的数据.这在一定程度上减轻了服务器端的压力,也加快了页面的呈现速度. 其实国内很多网站都用到了懒加载技术,比如国内两个大型电商网站的页面都运用到了这项技术: 天猫首页: 京东商品列表页: 最近在学习时,自己写了一个带懒加载功能的电影列表展示页,大家可以先看下页面效果: http://f81236211.w4w7.tumm.top/lazyload/ 然后自己在页面底部写了一个分页功能,页

使用jQuery实现图片懒加载原理

原文:https://www.liaoxuefeng.com/article/00151045553343934ba3bb4ed684623b1bf00488231d88d000 在网页中,常常需要用到图片,而图片需要消耗较大的流量.正常情况下,浏览器会解析整个HTML代码,然后从上到下依次加载<img src="xxx">的图片标签.如果页面很长,隐藏在页面下方的图片其实已经被浏览器加载了.如果用户不向下滚动页面,就没有看到这些图片,相当于白白浪费了图片的流量. 所以,淘

viewpager+fragment的懒加载实现微信点击和滑动切换功能(切换效果)

前言 1.从上一片文章之后已经半年没有写文章了,那篇文章之后公司进入疯狂的加班,一直到放年假.年后回来之后换了一家创业公司之后,然后又进入疯狂的加班(≧﹏ ≦) -所以一直都没有写文章(其实这都是借口⊙﹏⊙).现在公司没有那么忙了,也该把文章捡起来了,这毕竟是百利有一害的事(一害:费时间). 2.这半年里除了对代码的热情更加高涨(虽然它总是虐我千百遍(≧﹏ ≦) ),还深深的中了爬山的毒,对于年轻的我来说,爬山让我明白了许多.懂得了许多,也锻炼了我的身体.对于程序员来说身体是非常重要的,大家在周

vue-lazyload图片懒加载的简单使用

一.vue lazyload插件: 插件地址:https://github.com/hilongjw/vue-lazyload demo:http://hilongjw.github.io/vue-lazyload/ 二.简单使用实例: 这个插件还是蛮好用的,就是感觉这个插件的开发文档有点太啰嗦了,一股脑把所有的api扩展都罗列出来,源码中并没有可以运行的实例提供. 其实这个插件做简单使用的话是很简单的,看官方文档的话反而被误导了,可以先按下边的实例实现简单引用,后边再根据开发文档做扩展. 1.

简单代码实现 加载更多效果

JS <script type="text/javascript"> //定义全局变量,用于计算分页 var more_i = 1; $('#showmore').click(function() { $.ajax({ type : 'get', url : '__URL__/ajax_more', data : { 'evalue_id' : {$evalue_info.evalue_id}, 'num' : more_i, }, dataType: 'json', su