美文网首页
懒加载——lazyload

懒加载——lazyload

作者: 手劲很大 | 来源:发表于2019-08-02 16:07 被阅读0次

在声明img元素时,只需要将其图片地址放到data-src中,并且声明class="lazyload"即可实现图片的懒加载效果。
示例:

<img data-src="https://xxxxxx.com?sjdijsa" class="lazyload">
<img data-src="https://xxxxxx.com?sjdijsa" class="lazyload">

调用lazyload函数,并传入参数。

  • 第一个参数表示所有的img标签,可以根据具体的元素进行调整
  • 第二个参数表示图片距离视口多少距离
lazyload(document.querySelectorAll('img'),0)

以下为实现的源码。
具体思路:每次触发scroll事件时(节流),找到所有含有class为lazyload的img标签。遍历所有标签,判断是否符合加载的要求,完成渲染。

lazyload(document.querySelectorAll('img'),0)

function lazyload(images,distance){
  imgs = Array.from(images)

  if('IntersectionObserver' in window){
    let observer = new IntersectionObserver(function(entries){
      entries.forEach(entry=>{
        loadImage(entry.target,()=>{
          observer.unobserve(entry.target)
        })
      })
    },{threshold: 0.01})
    imgs.forEach(img=>observer.observe(img))
  }else{
    document.onscroll = throttle(function(){
      imgs = imgs.filter(img=>img.classList.contains('lazyload'))
      imgs.forEach(img=>{
        if(imgView(img,distance)){
          loadImage(img)
        }
      })
    },200)
    document.dispatchEvent(new Event('scroll'))
  }
  function throttle(fn,wait){
    let lastTime = null
    let nowTime = null
    return function(){
      nowTime = new Date()
      if(!lastTime || nowTime - lastTime > wait){
        fn.apply(this,arguments)
        lastTime = nowTime
      }
    }
  }
  
  function imgView(img,distance){
    let { top } = img.getBoundingClientRect()
    let viewHeight = document.documentElement.clientHeight
    return top>0 && top<viewHeight+distance
  }
  
  function loadImage(img,callback){
    let image = new Image()
    image.src = img.dataset.src
    image.onload = function(){
      img.src = image.src
      img.classList.remove('lazyload')
      callback()
    }
  }
}

相关文章

  • vue-cli 插件 vue-lazyload 图片懒加载

    vue-lazyload 图片懒加载 解决

  • 前端性能优化之Lazyload

    前端性能优化之Lazyload @(冬晨)[JavaScript|技术分享|懒加载] [TOC] Lazyload...

  • 懒加载 -- lazyLoad

    懒加载原理: 先将img标签中的src链接设为同一张图片(空白图片),将其真正的图片地址存储再img标签的自定义属...

  • 懒加载(LazyLoad)

    懒加载,即延迟加载,需要的时候再加载到内存。 一次性加载数据,类似C语言中变量的定义,需要统一在函数体的最开始部分...

  • 懒加载——lazyload

    在声明img元素时,只需要将其图片地址放到data-src中,并且声明class="lazyload"即可实现图片...

  • 懒加载和预加载

    懒加载 js懒加载 意义 懒加载(LazyLoad)是前端优化的一种有效方式,能极大的提升用户体验,图片加载是其重...

  • Vue-lazyload 的使用

    Vue 项目使用 Vue-lazyload 做图片懒加载。 下载 下载 Vue-lazyload 的包NPM包 引...

  • Vue-lazyload 的使用

    Vue 项目使用 Vue-lazyload 做图片懒加载。 下载 下载 Vue-lazyload 的包NPM包[h...

  • 相关插件

    axios vue-router vuex vue-lazyload 图片懒加载 element-ui 按需加载 ...

  • 在vue中使用图片懒加载vue-lazyload插件

    在vue中使用图片懒加载vue-lazyload插件 使用方式 使用vue的 vue-lazyload 插件插件地...

网友评论

      本文标题:懒加载——lazyload

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