首页 > 其他 > 详细

图片懒加载

时间:2019-09-09 09:35:49      阅读:79      评论:0      收藏:0      [点我收藏+]

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0 maximum-scale=1.0 user-scalable=0">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div{
            padding: 100px;
            border: 1px solid red
        }
        img{
            width: 400px;
            height: 300px;
        }
    </style>
</head>
<body>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=C:\Users\Administrator\Desktop\strawberry.jpg></div>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=C:\Users\Administrator\Desktop\orange.jpg></div>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=C:\Users\Administrator\Desktop\grape.jpg></div>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=C:\Users\Administrator\Desktop\banana.jpg></div>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=C:\Users\Administrator\Desktop\apple.jpg></div>
</body>
<script>

// 区别于常见的懒加载的第地方是当img重置src后,向img添加了一个isReset属性,该属性实现两点作用:
// 1如果img都有这个属性,那么不会再对这个img设置src,
// 2如果所有img都有这个属性,那么window的滚动事件解除懒加载函数

var imgs = document.getElementsByTagName(img); // 因为后续使用了数组的every,所以先转换为真实数组
var innerHeight = window.innerHeight || document.documentElement.clientHeight; //视口高度

function throttle(handler,wait){
    var lastTime = 0;
    return function(e){
        nowTmie = new Date().getTime();
        if(nowTmie - lastTime > wait){
            lastTime = nowTmie;
            handler.apply(this,arguments);
        }
    }
}

function lazyLoad(imgs, h){
    var h = h || 0; //  h是一个数值,加给视口高度,
    var isAllLoad = imgs.every(img => {  
        return img.getAttribute(isReset) == true;
    })
    if(isAllLoad){
        window.removeEventListener("scroll", throttleLazyLoad, false)
        return 
    }
    for (var i = 0; i < imgs.length; i++){
        var top = imgs[i].getBoundingClientRect().top; // img距离视口的高度
        var isLoad = imgs[i].getAttribute("isReset") // img的重置状态
        if(top < innerHeight + h && !isLoad){
            imgs[i].src = imgs[i].getAttribute(data_src);
            imgs[i].setAttribute(isReset, true);
        }
    }
}
lazyLoad(imgs) 
var throttleLazyLoad = throttle(lazyLoad, 100).bind(this, imgs, 500); // 节流的同时为了实现解除带参数的事件函数,选择了bind方法
window.addEventListener("scroll", throttleLazyLoad, false);

</script>   
</html>

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0 maximum-scale=1.0 user-scalable=0">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div{
            padding100px;
            border1px solid red
        }
        img{
            width400px;
            height300px;
        }
    </style>
</head>
<body>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=‘C:\Users\Administrator\Desktop\strawberry.jpg‘></div>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=‘C:\Users\Administrator\Desktop\orange.jpg‘></div>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=‘C:\Users\Administrator\Desktop\grape.jpg‘></div>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=‘C:\Users\Administrator\Desktop\banana.jpg‘></div>
    <div><span></span><img src="C:\Users\Administrator\Desktop\white.jpg" alt="" data_src=‘C:\Users\Administrator\Desktop\apple.jpg‘></div>
</body>
<script>

// 区别于常见的懒加载第地方是对img标签添加了一个isReset属性,该属性有两点作用,
// 1如果img都有这个属性,那么不会再对这个img设置src,
// 2如果所有img都有这个属性,那么window的滚动事件解除懒加载函数

var imgs = document.getElementsByTagName(‘img‘); // 因为后续使用了数组的every,所以先转换为真实数组
var innerHeight = window.innerHeight || document.documentElement.clientHeight; //视口高度

function throttle(handler,wait){
    var lastTime = 0;
    return function(e){
        nowTmie = new Date().getTime();
        if(nowTmie - lastTime > wait){
            lastTime = nowTmie;
            handler.apply(this,arguments);
        }
    }
}

function lazyLoad(imgs, h){
    var h = h || 0//  h是一个数值,加给视口高度,
    var isAllLoad = imgs.every(img => {  
        return img.getAttribute(‘isReset‘) == ‘true‘;
    })
    if(isAllLoad){
        window.removeEventListener("scroll", throttleLazyLoad, false)
        return 
    }
    for (var i = 0; i < imgs.length; i++){
        var top = imgs[i].getBoundingClientRect().top; // img距离视口的高度
        var isLoad = imgs[i].getAttribute("isReset"// img的重置状态
        if(top < innerHeight + h && !isLoad){
            imgs[i].src = imgs[i].getAttribute(‘data_src‘);
            imgs[i].setAttribute(‘isReset‘‘true‘);
        }
    }
}
lazyLoad(imgs) 
var throttleLazyLoad = throttle(lazyLoad, 100).bind(this, imgs, 500); 
window.addEventListener("scroll", throttleLazyLoad, false);








// function preloadimg(array){

// var newimg=[];

// for(var i=0;i<array.length;i++){

// newimg[i]=new Image();

// newimg[i].src=array[i];

// }

// }


// function preloader(array) {
//     if (document.images) {
//         var newimg=[];
//         for(var i=0;i<array.length;i++){
//             newimg[i] = new Image();
//             newimg[i].src=array[i];
//         }
//     }
// }
// function addLoadEvent(func) {
//     var oldonload = window.onload;
//     if (typeof window.onload != ‘function‘) {
//         window.onload = func;
//     } else {
//         window.onload = function() {
//             if (oldonload) {
//                 oldonload();
//             }
//             func();
//         }
//     }
// }

// addLoadEvent(preloader(arrPics));





//升序算法
// function sort(arr){
//     for (var i = 0; i <arr.length; i++) {
//         for (var j = 0; j <arr.length-i; j++) {
//             if(arr[j]>arr[j+1]){
//                 var c=arr[j];//交换两个变量的位置
//                 arr[j]=arr[j+1];
//                 arr[j+1]=c;
//             }
//         };
//     };
//     return arr.toString();
// }
// console.log(sort([23,45,18,37,92,13,24]));

// var obj = {proto: {a:1,b:2}};
// function F(){};
// F.prototype = obj.proto;
// var f = new F();
// obj.proto.c = 3;
// obj.proto = {a:-1, b:-2};
// console.log(f.a);
// console.log(f.c);
// delete F.prototype[‘a‘];
// console.log(f.a);
// console.log(obj.proto.a);


</script>   
</html>

图片懒加载

原文:https://www.cnblogs.com/wangjie-nf/p/11489535.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!