美文网首页web前端
task-29Jquery懒加载、回顶部

task-29Jquery懒加载、回顶部

作者: Maggie_77 | 来源:发表于2017-01-01 19:01 被阅读16次

    问答

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

    function isVisible($node){
            var scrollTop = $(window).scrollTop(),
                    winH = $(window).height(),
                    top = $node.offset().top;
            if (scrollTop+winH>top) {
                return true;
            }else{
                return false;
            }
     }
    

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

    function logVisible($node){
            $(window).on('scroll',function(){
                var scrollTop = $(this).scrollTop(),
                    winH = $(this).height(),
                    top = $node.offset().top;
            if (scrollTop+winH>top) {
                console.log('true');
            }
            })  
     }
    
    logVisible($('div'));
    

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

    function logVisible($node) {
            $(window).on('scroll', function() {
                var scrollTop = $(this).scrollTop(),
                winH = $(this).height(),
                top = $node.offset().top;
                if (scrollTop + winH > top) {
                    if ($node.data('visible')) {
                        return;
                    }
                    $node.data('visible', true);
                    console.log('true');
                } else {
                    $node.data('visible', false);
                }
            })
        }
        logVisible($('div'));
    

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

    • 什么是图片滚动加载?
      通俗的讲就是:当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次),只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来。这就是图片懒加载。

    • 为什要使用这个技术?
      比如一个页面中有很多图片,如淘宝、京东首页等等,如果一上来就发送这么多请求,页面加载就会很漫长,如果js文件都放在了文档的底部,恰巧页面的头部又依赖这个js文件,那就不好办了。更为要命的是:一上来就发送百八十个请求,服务器可能就吃不消了(又不是只有一两个人在访问这个页面)。

    因此优点就很明显了:不仅可以减轻服务器的压力,而且可以让加载好的页面更快地呈现在用户面前(用户体验好)。

    • 怎么实现?
      其实原理上很简单,在页面载入的时候将页面上的img标签的src指向一个小图片,把真实地址存放在一个自定义属性中,这里我用data-src来存放,如下。
      ![](loading.gif)
      然后将页面img标签获取并保存,开启一个定时器,遍历保存的img标签,判断其位置是否出现在了可视区域内。如果出现在可视区域了那么就把真实的src地址给赋值上。并且从数组中删除,避免重复判断。 那么你可能会问,如何判断是否出现在可视区域内呢?那就是你可以获取当前img的相对于文档顶的偏移距离减去scrollTop的距离,然后和浏览器窗口高度在进行比较,如果小于浏览器窗口则出现在了可视区域内了,反之,则没有。

    代码

    源码地址
    1. backtop 预览
    2. 图片懒加载 预览
    3. 懒加载ajax 预览(本地测试成功)

    相关文章

      网友评论

        本文标题:task-29Jquery懒加载、回顶部

        本文链接:https://www.haomeiwen.com/subject/rbjivttx.html