VUE--Lazyload(二十四)

一、Lazyload简介

vue-lazyload是通过指令的方式实现的,定义的指令是v-lazy指令,指令被bind时会创建一个listener,并将其添加到listener queue里面, 并且搜索target dom节点,为其注册dom事件(如scroll事件),dom事件回调中,会遍历listener queue里的listener,判断此listener绑定的dom是否处于页面中perload的位置,如果处于则加载异步加载当前图片的资源,同时listener会在当前图片加载的过程的loading,loaded,error三种状态触发当前dom渲染的函数,分别渲染三种状态下dom的内容。


lazyload流程图

https://www.npmjs.com/package/vue-lazyload

二、Vue Lazyload插件

  1. 安装
npm install vue-lazyload --save-dev
  1. main.js引入插件
import VueLazyLoad from 'vue-lazyload'
Vue.use(VueLazyLoad,{
    error:'./static/error.png',
    loading:'./static/loading.png'
})
  1. vue文件中将需要懒加载的图片绑定 v-bind:src 修改为 v-lazy
<img class="item-pic" v-lazy="newItem.picUrl"/>

三、功能扩展

参数选项说明:

键 描述 默认 选项
preLoad proportion of pre-loading height(预加载高度比例) 1.3 Number
error src of the image upon load fail(图片路径错误时加载图片) 'data-src' String
loading src of the image while loading(预加载图片) 'data-src' String
attempt attempts count(尝试加载图片数量) 3 Number
listenEvents events that you want vue listen forM
(想要监听的vue事件)
默认['scroll']可以省略,
当插件跟页面中的动画或过渡等事件有冲突是,
可以尝试其他选项
['scroll'(默认),'wheel',
'mousewheel','resize',
'animationend','transitionend','touchmove']
Desired Listen Events
adapter dynamically modify the attribute of element(动态修改元素属性) { } Element Adapter
filter the image's listener filter(动态修改图片地址路径) { } Image listener filter
lazyComponent 组件懒加载 false Lazy Component
dispatchEvent 触发元素状态监听事件(error, loaded, rendered) false Boolean
throttleWait throttle wait 200 Number
observer use IntersectionObserver false Boolean
observerOptions IntersectionObserver options { rootMargin: '0px', threshold: 0.1 } IntersectionObserver

四、示例

import Vue from 'vue'
import App from './App.vue'
import VueLazyload from 'vue-lazyload'  //引入这个懒加载插件

Vue.use(VueLazyload)

// 或者添加VueLazyload 选项
Vue.use(VueLazyload, {
  preLoad: 1.3,
  error: 'dist/error.png',
  loading: 'dist/loading.gif',
  attempt: 1
})

new Vue({
  el: 'body',
  components: {
    App
  }
})

在入口文件添加后,在组件任何地方都可以直接使用把 img 里的:src -> v-lazy:

 <div class="pic">
    <a href="#"><img :src="'/static/img/' + item.productImage" alt=""></a>
</div>

把之前项目中img 标签里面的 :src 属性 改成 v-lazy 
 <div class="pic">
    <a href="#"><img v-lazy="'/static/img/' + item.productImage" alt=""></a>
</div>

可以通过传递数组来配置想要使用vue - lazyload的事件:

Vue.use(VueLazyload, {
  preLoad: 1.3,
  error: 'dist/error.png',
  loading: 'dist/loading.gif',
  attempt: 1,
  // the default is ['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend']
  listenEvents: [ 'scroll' ]
})
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原理简述 vue-lazyload是通过指令的方式实现的,定义的指令是v-lazy指令指令被bind时会创建一个l...
    AmazRan阅读 5,848评论 0赞 1
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,468评论 0赞 6
  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 1,321评论 0赞 1
  • Vue官方文档以下内容作为本人日常学习使用,不作为参考 一、Vue环境搭建以及vue-cli的使用 Vue多页面应...
    好一只帅卤蛋阅读 926评论 0赞 1
  • 1概述 上一章我们说了Vue是用于构建用户界面的框架,它最终呈现给用户的是一个一个HTML标签。Vue可以使用HT...
    书上得来终觉浅阅读 627评论 1赞 0

友情链接更多精彩内容