zoukankan      html  css  js  c++  java
  • 关于图片img的Lazyload

    定义:延迟加载也称为惰性加载,即在长网页中延迟加载图像。用户滚动到它们之前,视口外的图像不会加载。这与图像预加载相反,在长网页上使用延迟加载将使网页加载更快。在某些情况下,它还可以帮助减少服务器负载。

    举个例子来说明,当打开淘宝首页的时候,只有在浏览器窗口里的图片才会被加载,当你滚动首页向下滑的时候,进入视口内的图片才会被加载,而其它从未进入视口的图像不会也不会加载。

    那么延迟加载有什么好处:

    1. 首先它能提升用户的体验,试想一下,如果打开页面的时候就将页面上所有的图片全部获取加载,如果图片数量较大,对于用户来说简直就是灾难,会出现卡顿现象,影响用户体验。
    2. 有选择性地请求图片,这样能明显减少了服务器的压力和流量,也能够减小浏览器的负担。

    那么下面就介绍延迟加载的三种实现方式:

    第一种:

    首先将页面上的图片的 src 属性设为 loading.gif,而图片的真实路径则设置在 data-src 属性中,页面滚动的时候计算图片的位置与滚动的位置,当图片出现在浏览器视口内时,将图片的 src 属性设置为 data-src 的值,这样,就可以实现延迟加载。

    下面是具体的实现代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Lazyload 1</title>
        <style>
            img {
    	    display: block;
    	    margin-bottom: 50px;
    	    height: 200px;
    	}
        </style>
    </head>
    <body>
        <img src="images/loading.gif" data-src="images/1.png">
        <img src="images/loading.gif" data-src="images/2.png">
        <img src="images/loading.gif" data-src="images/3.png">
        <img src="images/loading.gif" data-src="images/4.png">
        <img src="images/loading.gif" data-src="images/5.png">
        <img src="images/loading.gif" data-src="images/6.png">
        <img src="images/loading.gif" data-src="images/7.png">
        <img src="images/loading.gif" data-src="images/8.png">
        <img src="images/loading.gif" data-src="images/9.png">
        <img src="images/loading.gif" data-src="images/10.png">
        <img src="images/loading.gif" data-src="images/11.png">
        <img src="images/loading.gif" data-src="images/12.png">
        <script>
            function lazyload() {
    	    var images = document.getElementsByTagName('img');
    	    var len    = images.length;
    	    var n      = 0;      //存储图片加载到的位置,避免每次都从第一张图片开始遍历		
    	    return function() {
    		var seeHeight = document.documentElement.clientHeight;
    		var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    		for(var i = n; i < len; i++) {
    		    if(images[i].offsetTop < seeHeight + scrollTop) {
    		        if(images[i].getAttribute('src') === 'images/loading.gif') {
    			     images[i].src = images[i].getAttribute('data-src');
    			}
    			n = n + 1;
    		     }
    		}
    	    }
    	}
    	var loadImages = lazyload();
    	loadImages();          //初始化首页的页面图片
    	window.addEventListener('scroll', loadImages, false);
        </script>
    </body>
    </html>
    

    比较 image 的 offsetTop 与 seeHeight + scrollTop 的大小,当小于时则说明图片已经出现过在视口中,这时候继续判断图片是否已经替换过,如果没有替换过,则进行替换。

    实现的效果:不断滑动页面时,图片延迟加载

    上面的代码用到了 JS 闭包的知识,如果你不太熟悉的话,可以自行百度一下。

  • 相关阅读:
    《软件需求模式》阅读笔记二
    《软件需求模式》阅读笔记一
    《编写有效用例》阅读笔记三
    《编写有效用例》阅读笔记二
    《编写有效用例》阅读笔记一
    《软件需求十步走》阅读笔记三
    英文一分钟自我介绍
    c语言面试常见题
    docker
    LLDP
  • 原文地址:https://www.cnblogs.com/mei123/p/8528921.html
Copyright © 2011-2022 走看看