HOME/Articles/

懒加载相关问题

Article Outline

懒加载相关问题

<!--more-->

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

 function isVisible ($node) {
        var scrollTop = $(window).scrollTop();
        var windowHeight = $(window).height();
        var targetOffsetTop = $node.offset().top;

        if (targetOffsetTop < (scrollTop + windowHeight) && targetOffsetTop > scrollTop) {
            return true;
        }
        return false;
    }

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

    //$node为目标元素

    $(window).on('scroll',function () {
        if (isVisible($node)) {
            console.log(true);
        }
    });

    function isVisible($node){
        var scrollTop = $(window).scrollTop()
        var windowHeight = $(window).height()
        var offsetTop = $node.offset().top

        if(offsetTop < scrollTop + windowHeight && offsetTop > scrollTop){
            return true
        }
        return false
    }

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

 //$node为目标元素
    function checkshow ($node) {
        var windowHeight = $(window).height();
        var scrollTop = $(window).scrollTop();
        var nodeOffsetTop = $node.offset().top;

        if (nodeOffsetTop < (windowHeight + scrollTop) && nodeOffsetTop > scrollTop) {
            return true;
        }
        else {
            return false;
        }
    }
    function firstShow ($node) {
        $node.data('hasShowed',false); //自定义一个属性来标记元素是否已经被展示过了
        if (checkshow($node)) {
            if (!$node.data('hasShowed')) { //第一次时为false
                $node.data('hasShowed',true);
                console.log(true);
            }
        }
    }

###4,图片懒加载的原理是什么? 对于一个有多个图片的网站来说,访问的时候不应该直接加载所有图片,而是应该只讲浏览器窗口内的图片进行加载。当滚动的时候,在加载更多的图片。叫做图片的懒加载。

我们可以通过给img自定义一个新属性,来存储图片真实的src地址,当需要加载的时候,再将这个真实的地址赋给src,进行图片加载。

###整体思路: 所以大体的思路为:

  • 设置个data-src(自定义一个属性)来存放真实地址
  • 当滚动页面时,检查所有的img标签,看是否出现在视野中,如果已经出现在了视野中,那继续再进行判断,看其是否已经被加载过了,如果还没有被加载过,那就进行加载。