zoukankan      html  css  js  c++  java
  • 手写图片懒加载

    //50ms节流方案
    let lazyLoadThrottle = throttle(lazyLoad,50);
    window.addEventListener('scroll',lazyLoadThrottle);
    
    //raf的一帧节流方案
    var isScroll = true;
    window.addEventListener('scroll',function(){
        if(isScroll) return;
        requestAnimationFrame(lazyLoad);
    })
    
    function lazyLoad(opts){
        isScroll = true;
        let {conSel,imgSel,offset} = opts;
        let imgCon = document.querySelector(conSel);
        let rect = document.getBoundingClientRect();
        let clientH = document.documentElement.clientHeight;
        if(rect.top - clientH <= offset){
            let imgs = Array.from(imgCon.querySelector(imgSel));
            imgs.forEach(item => {
                let src = item.getAttribute('data-src');
                if(!src) return;
                item.src = src;
                item.removeAttribute('data-src');
            })
        }
    }
    
    function throttle(fn,interval){
        //last为0,cur必然大于它,fn会先立即执行一次
        let last = 0;
        return function(){
            let cur = +new Date();
            if(cur - last >= interval){
                fn.apply(this,args);
                last = cur;
            }
        }
    }
  • 相关阅读:
    关于XML文档
    Why sql is called structured query language?1
    UML学习---交互
    C#为什么不采用多继承:
    url中
    array
    hard
    构造函数返回值
    布局容器layout Container
    k8s的概念
  • 原文地址:https://www.cnblogs.com/mengff/p/12873319.html
Copyright © 2011-2022 走看看