博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
延时加载
阅读量:5233 次
发布时间:2019-06-14

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

一、为什么使用延迟加载技术:

 1 避免浪费带宽 节约流量

 2 减轻服务器的压力 带来更好的用户体验

当页面内图片达到一定的数量,页面的加载速度就越来越差.

我们并不需要把所有图片一次性加载完,而且,用户也不会一次性把所有图片看完.

所以,我们需要做的就是按需加载,只显示用户需要看的图片

图片惰性延迟加载好处

1. 按需加载图片,加快加载页面速度

2. 减少对服务器的请求数

3. 减少初始页面加载页面大小

图片惰性延迟加载坏处

1. SEO,因为图片都被替换成假的图片,所以会影响图片的收录,所以这功能不建议在详情页使用

未加图片惰性加载功能:

图片惰性延迟性能对比

已加图片惰性加载功能:

二、原理

  随着用户向下滚动页面,只有当图片滚动到可视视窗内,或接近可视视窗时,这个图片才会从服务器加载。这样就是尽可能的减少不必要的加载。

三、使用方法

  只需要在图片上这样写:

 <img class="lazy" data-original="img/example.jpg"  >

  【 如果此处不使用class 可在初始化时使用:

 $("img").lazyload({effect: "fadeIn"});

  初始化设置:

<script type="text/javascript" charset="utf-8">

  $(function() {

      $("img.lazy").lazyload({effect: "fadeIn"});

  });

</script> 】

  然后用一段js

$(function() {

    $("img.lazy").lazyload();

});

 需要引用的插件:

<script src="jquery-1.11.0.min.js"></script>

<script src="jquery.lazyload.js"></script> 

参数设置

$("img.lazy").lazyload({

  placeholder : "img/grey.gif",       //用图片提前占位

  effect: "fadeIn",                  // 载入使用淡入效果;

  threshold: 200,                   // 滚动条在离目标位置还有200的高度时就开始加载图片;    

  event: 'click',                  // 事件触发时才加载 有:值有click(点击),mouseover(鼠标划过)等;

  container: $("#container"),     // 对某容器中的图片实现效果;值为某容器 如window;

  failurelimit : 10              // 图片排序混乱时, 值为数字.lazyload默认在找到第一张不在可见区域里的图片时则不再继续加载,但当HTML容器混乱的时候可能出现可见区域内图片并没加载出来的情况,failurelimit意在加载N张可见区域外的图片,以避免出现这个问题

 附:

1.背景图片的延迟加载

  背景图延迟加载的用法和图片延时加载的用法很相似,首先,你需要使用背景的元素需要这样写:

  <div class="lazy" data-original="img/example.jpg" ></div>

  然后用一段js

  $(function() {

    $("div.lazy").lazyload();

});

详见:http://www.webhek.com/background-image-lazy-load/ 

      http://www.jq22.com/jquery-info390

2.浏览器兼容性:

 适应 火狐 谷歌 safari ie 6~11

3.含有轮播效果的延迟加载?

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

参考链接http://www.itnose.net/detail/6633575.html

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

(function( $ ){

$.fn.imglazyload = function( options ){

    var o = $.extend({

                attr        :   'lazy-src',

                container   :   window,

                event       :   'scroll',              

                fadeIn      :   false,         

                threshold   :   0,

                vertical    :   true   

            }, options ),

        event = o.event,

        vertical = o.vertical,

        container = $( o.container ),

        threshold = o.threshold,   

        // 将jQuery对象转换成DOM数组便于操作

        elems = $.makeArray( $(this) ),    

        dataName = 'imglazyload_offset',       

        OFFSET = vertical ? 'top' : 'left',

        SCROLL = vertical ? 'scrollTop' : 'scrollLeft',        

        winSize = vertical ? container.height() : container.width(),

        scrollCoord = container[ SCROLL ](),

        docSize = winSize + scrollCoord;      

    // 延迟加载的触发器

    var trigger = {

         init : function( coord ){

            return coord >= scrollCoord &&

                            coord <= ( docSize + threshold );

        },

        scroll : function( coord ){

            var scrollCoord = container[ SCROLL ]();

            return coord >= scrollCoord &&

                    coord <= ( winSize + scrollCoord + threshold );

        },

         

        resize : function( coord ){

            var scrollCoord = container[ SCROLL ](),

                winSize = vertical ?

                            container.height() :

                            container.width();

            return coord >= scrollCoord &&

                   coord <= ( winSize + scrollCoord + threshold );

        }

    };

         

    var loader = function( triggerElem, event ){

        var i = 0,

            isCustom = false,

            isTrigger, coord, elem, $elem, lazySrc;

          

        // 自定义事件只要触发即可,无需再判断

        if( event ){

            if( event !== 'scroll' && event !== 'resize' ){

                isCustom = true;

            }

        }

        else{

            event = 'init';

        }             

        for( ; i < elems.length; i++ ){

            isTrigger = false;

            elem = elems[i];

            $elem = $( elem );

            lazySrc = $elem.attr( o.attr );

             

            if( !lazySrc || elem.src === lazySrc ){

                continue;

            }

            // 先从缓存获取offset值,缓存中没有才获取计算值,

            // 将计算值缓存,避免重复获取引起的reflow

            coord = $elem.data( dataName );

             

            if( coord === undefined ){

                coord = $elem.offset()[ OFFSET ];

                $elem.data( dataName, coord );

            }

 

            isTrigger = isCustom || trigger[ event ]( coord );         

 

            if( isTrigger ){

                // 加载图片

                elem.src = lazySrc;

                if( o.fadeIn ){

                    $elem.hide().fadeIn();

                }

                // 移除缓存

                $elem.removeData( dataName );

                // 从DOM数组中移除该DOM

                elems.splice( i--, 1 );

            }

        }

 

        // 所有的图片加载完后卸载触发事件

        if( !elems.length ){

            if( triggerElem ){

                triggerElem.unbind( event, fire );

            }

            else{

                container.unbind( o.event, fire );

            }

            $( window ).unbind( 'resize', fire );

            elems = null;

        }

         };

     

    var fire = function( e ){

        loader( $(this), e.type );

    };

         // 绑定事件

    container = event === 'scroll' ? container : $( this );

    container.bind( event, fire );

    $( window ).bind( 'resize', fire );

    // 初始化

    loader();

    return this;

};

})( jQuery );

 

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

http://www.itnose.net/st/6446364.html

 

 

 

 

转载于:https://www.cnblogs.com/hilxj/p/7399271.html

你可能感兴趣的文章
【linux】su和sudo命令的区别
查看>>
【NOI2015】品酒大会
查看>>
『重构--改善既有代码的设计』读书笔记---Duplicate Observed Data
查看>>
pycharm的list中append的应用
查看>>
python学习笔记01-简单接触
查看>>
关于博客的一点计划
查看>>
COJ968 WZJ的数据结构(负三十二)
查看>>
MySQL数据库常用操作和技巧
查看>>
文字或边框等的样式变换
查看>>
二叉树的线索化
查看>>
聊聊高并发(四十四)解析java.util.concurrent各个组件(二十) Executors工厂类
查看>>
mfc笔记--摘录关于裁剪窗口区域的设置,WS_CLIPCHILDREN和WS_CLIPSIBLINGS的理解
查看>>
菜单功能视图
查看>>
第二节课-Data-driven approach:KNN和线性分类器分类图片
查看>>
第三章 指令-- 29 指令-自定义全局指令让文本框获取焦点
查看>>
Jsp之一 WEB应用程序概述
查看>>
java反射机制学习笔记
查看>>
工厂方法
查看>>
html锚点 点击跳转到页面指定位置
查看>>
从零开始学springboot笔记(一)-Spring boot之Hello Word
查看>>