懒加载

1.如何判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视)。写一个函数 isVisible实现。

function isVisible($node){ var windowHeight=$(window).height(); var scrollTop=$(window).scrollTop(); var nodeOffsetTop=$node.offset().top(); var nodeHeight=$node.outerHeight(); if((windowHeight+scrollTop)>nodeOffsetTop && scrollTop<(nodeOffsetTop+nodeHeight)){ return true; }else{ return false; } }

2.当窗口滚动时,判断一个元素是不是出现在窗口可视范围。每次出现都在控制台打印 true 。用代码实现。

$(window).on("scroll",function(){ if(isVisible($("#btn"))){ console.log(true); } }) function isVisible($node){ var windowHeight=$(window).height(); var scrollTop=$(window).scrollTop(); var nodeOffsetTop=$node.offset().top(); var nodeHeight=$node.outerHeight(); if((windowHeight+scrollTop)>nodeOffsetTop && scrollTop<(nodeOffsetTop+nodeHeight)){ return true; }else{ return false; } }

3.当窗口滚动时,判断一个元素是不是出现在窗口可视范围。在元素第一次出现时在控制台打印 true,以后再次出现不做任何处理。用代码实现。

//设置标志位:第一次出现过则改变状态 var isShowed=false; $(window).on("scroll",function(){ if(isVisible($("#btn")) && !isShowed){ console.log(true); isShowed=true; } })

function isVisible($node){ var windowHeight=$(window).height(); var scrollTop=$(window).scrollTop(); var nodeOffsetTop=$node.offset().top(); var nodeHeight=$node.outerHeight(); if((windowHeight+scrollTop)>nodeOffsetTop && scrollTop<(nodeOffsetTop+nodeHeight)){ return true; }else{ return false; } }

4.图片懒加载的原理是什么?

一、原理

  1. 在浏览器滚动的时候,遍历所有图片,若图片在视窗可视区域,则加载该图片

  2. 将图片地址存放在自定义属性中(data-src),需要加载图片再从中取出来

  3. 判断图片可见:

  • 图片上部分进入可视窗体
    windowHeight + scrollTop > offsetTop
  • 图片下部分进入可视窗体
    offsetTop + nodeHeight > scrollTop

二、如何实现

  1. 需要用到4个高度
    let windowHeight = $(window).height(), //视窗高度
    scrollTop = $(window).scrollTop(), //滚动条滚动距离
    offsetTop = $node.offset().top() //图片相对于文档的垂直坐标
    nodeHeight = $node.outerHeight(); //图片高度

  2. 判断图片可见

    if ( (windowHeight + scrollTop) > offsetTop && (offsetTop + 
    nodeHeight ) > scrollTop) {
         return true;
    } else {
        return false;
    }
    
  3. 方法:是否显示该图片

    const isShow = ($node) => {
        let windowHeight = $(window).height(),
        scrollTop = $(window).scrollTop(),
        offsetTop = $node.offset().top();
        nodeHeight = $node.outerHeight();
        if (windowHeight + scrollTop > offsetTop && offsetTop + 
        nodeHeight > scrollTop) {
            return true;
        } else {
           return false;
        }
    }
    
  4. 方法:遍历所有图片,加载没有load类名且isShow返回true的图片(加载前给图片加类名load)

    const loadImgs = ()=>{
       console.log('1');
       $('.wrapper img').not('.load').each(function(index){
           console.log('2');
           let $node = $(this);
           if(isShow($node)){
           $node.addClass('load');
           $node.attr('src',$node.attr('data-src'));
           }
       });
     }
    
  5. 最后,监听屏幕滚动事件,并在一开始进入界面时加载图片
    loadImgs();
    $(window).scroll(function () {
    loadImgs();
    })

5.实现视频中的图片懒加载效果

代码
展示

6.实现视频中的新闻懒加载效果

代码

你可能感兴趣的:(懒加载)