进阶16:懒加载

2018-01-04  本文已影响0人  FLYSASA

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

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
}

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

$(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){
          console.log('true')
          return true
    }
    return false
    }
})

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

$(window).on('scroll',function(){
     $('.container img').each(function(){
    if( isVisible($(this)) && !isLoaded($(this)) ){   
//遍历每个图片如果出现在可视范围内并且没有被加载过,加载图片并且打印true,否则不做处理
      loadImg($(this))
      console.log("true")
    }
  }) 
})

function isVisible($img){           //检查元素是否出现在窗口可视范围
  var scrollTop = $(window).scrollTop()   //滚动高度
  var windowHeight = $(window).height()   //窗口高度
  var offsetTop = $img.offset().top  //页面顶点至目标的高度
  if(offsetTop < scrollTop + windowHeight && offsetTop > scrollTop)  //两个临界点,一个最小值是滚动高度,一个最大值是滚动高度加窗口高度
   {
     return true
 }
 return false
}

function isLoaded($img){            //返回布尔值
  return $img.attr('data-src') === $img.attr('src')
}

function loadImg(#img) {
  $img.attr('src',$img.attr('data-src'))
}

题目4: 图片懒加载的原理是什么?

题目5: 实现视频中的图片懒加载效果

实现:http://js.jirengu.com/jebafozuwa/1/edit

上一篇 下一篇

猜你喜欢

热点阅读