转:   Vue图片懒加载原理和实现    Vue 中实现图片预加载 + 懒加载原理实现 
Vue图片懒加载原理及实现 原理分析   先将img标签的src链接设为同一张图片(默认图片),当js监听到该图片进入可视窗口时,再将实际地址应用。
实现方法 1.判断元素是否在可视范围 1 2 3 4 5 6 7 8 9 10 11 12 /**  * 判断元素是否在可视范围  */ function  isVisible(ele){  let  windowHeight = window.innerHeight   let  position = ele.getBoundingClientRect()   // 当元素的top偏移量小于页面大小并且大于高度的负数   if (position.top<windowHeight && position.top>-position.height){     return  true    }   return  false  } 
 
2.对图片实现懒加载 1 2 3 4 5 6 7 8 9 10 /**  * 对图片进行懒加载  */ function  lazyLoad(img, src){  if (img && src && isVisible(img)){ // 元素存在,元素未被加载,元素可见     setTimeout(function  (){       img.setAttribute('src' , src)     }, 1000) // 模拟网络请求   } } 
 
3.添加滚动监听 1 2 3 4 // 窗口滚动 window.addEventListener('scroll' , function  (){   lazyLoad(img, src) }) 
 
Vue插件实现代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 /**  * 判断元素可见  */ function  isVisible(el){  let  windowHeight = window.innerHeight   let  position = el.getBoundingClientRect()   // 当元素的top偏移量小于页面大小并且大于高度的负数   if (position.top<windowHeight && position.top>-position.height){     return  true    }   return  false  } /**  * 对图片进行懒加载  */ function  lazyLoad(img, src){  if (img && src && isVisible(img)){ // 元素存在,元素未被加载,元素可见     setTimeout(function  (){       img.setAttribute('src' , src)     }, 1000) // 模拟网络请求慢的情况   } } export  default {  install(Vue, options){     Vue.directive('lazy' , {       bind : function (el, binding, vnode){         el.setAttribute('src' , options.loading)         window.addEventListener('scroll' , function  (){           lazyLoad(el, binding.value)         })       },       inserted: function (el, binding, vnode){         lazyLoad(el)       }     })   } } 
 
  main.jsVue.use(myPlugin, {loading: defaultImg})
在Vue中使用 vue-lazyload插件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1.安装插件 npm install vue-lazyload --save-dev 2.在入口文件main.js中引入并使用 import VueLazyload from 'vue-lazyload'  直接使用 Vue.use(VueLazyload) 或者添加自定义选项 Vue.use(VueLazyload, {   preLoad: 1.3,   error: 'dist/error.png' ,   loading: 'dist/loading.gif' ,   attempt: 1 }) 3.修改图片显示方式为懒加载(将 :src 属性直接改为v-lazy) <a href="javascript:;" >   <img v-lazy="'/static/img/' + item.productImage" > </a> 
 
                    
                        
                    
                    
                        
                            
                                评论和共享