广告
返回顶部
首页 > 资讯 > 精选 >vue-lazyload如何使用
  • 507
分享到

vue-lazyload如何使用

2023-07-04 13:07:52 507人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“Vue-lazyload如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue-lazyload如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。v-lazy这个是Vue-La

本文小编为大家详细介绍“Vue-lazyload如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue-lazyload如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

v-lazy

这个是Vue-Lazyload最常用的一个东西,用法也非常的简单:

<ul>   <li v-for="img in list">     <img v-lazy="img.src" >   </li></ul>

我们现在来看看它的内部是如何实现的,首先我们进入它GitHub上的源码可以发现它的定义:

Vue.directive('lazy', {  bind: lazy.add.bind(lazy),  update: lazy.update.bind(lazy),  componentUpdated: lazy.lazyLoadHandler.bind(lazy),  unbind: lazy.remove.bind(lazy)})Vue.directive('lazy-container', {  bind: lazyContainer.bind.bind(lazyContainer),  update: lazyContainer.update.bind(lazyContainer),  unbind: lazyContainer.unbind.bind(lazyContainer)})

我们可以发现它是利用vue的自定义指令实现的,vue的自定义指令可以自定义v-***之类的指令,例如你定义了Vue.directive('demo',..)那么你就可以使用v-demo这样的指令,当你使用了之后就会有对应事件供你回调,例如bind,insert,unbind等,具体可以看看下面的demo:

=> vue自定义指令(二维码)

进入demo后我们可以看到一进去就出发了bind和insert事件,然后你在输入框输入内容就会触发update和updateComponent事件,当你点击隐藏就会触发unbind事件,当你点击显示则又会触发bind和insert事件。(具体含义可以去查阅官方文档)

vue的自定义指令还可以带参数,例如vue-lazy:background-image.container='src'这样的结构,我们可以通过事件里面的binding参数获取到,例如上面的background-image可以通过binding.arg获取,.container可以通过binding.modifiers获取。

好了,讲了这么多,v-lazy的实现思路应该比较清楚了,就是内部实现了一个lazy的类,通过vue自定义指令将对象和参数传进去,然后通过检测事件(scroll等)检测位置,如果一旦这个对象出现在屏幕里就加载图片。下面看看已经实现好的demo:(包含img的v-lazy和div的v-lazy:background-image两种情况)

=> v-lazy demo(二维码)

注意:这里的v-lazy='src'中的src一定要使用data里面的变量,不能写真实的图片路径,这样会报错导致没有效果,因为vue的自定义指令必须对应data中的变量或者是数字,你写一个图片路径识别不了,我之前就是被坑了。(这里的图片fadeIn效果是在load事件之后添加了一个fadeIn的class)。

v-lazy-container

这个总体上和v-lazy差不多,也是通过自定义指令去定义的,不过v-lazy-container扫描的是内部的子元素,v-lazy-container一般使用如下:

<div v-lazy-container="{ selector: 'img' }">   <img data-src="//domain.com/img1.jpg">  <img data-src="//domain.com/img2.jpg">  <img data-src="//domain.com/img3.jpg"></div>

v-lazy-container和v-lazy不同的是,v-lazy-container是通过设置指定的子元素的data-src,data-loading,data-error去设置图片的路径的,我们看内部实现就可以看到:

const imgs = this.getImgs()imgs.forEach(el => {   this.lazy.add(el, assign({}, this.binding, {     value: {       src: 'dataset' in el ? el.dataset.src : el.getAttribute('data-src'),       error: 'dataset' in el ? el.dataset.error : el.getAttribute('data-error'),       loading: 'dataset' in el ? el.dataset.loading : el.getAttribute('data-loading')     }   }), this.vnode) })

下面是写好的v-lazy-container demo:

=> v-lazy-container demo(二维码)

注:v-lazy-container内部指定元素设置的data-src是图片的真实路径,不能是data变量,这个和v-lazy完全相反。

lazy-component

这个和上面的不太一样,这个严格来说不单单能够做图片懒加载,还可以做组件的懒加载,一般结构如下:

<lazy-component @show="handler">   <img class="mini-cover" :src="img.src" width="100%" height="400"></lazy-component>

实现方面,先用Vue.component('lazy-component',...)注册了一个全局的组件,然后通过检测位置,如果在视图范围之内就吐出它内部的内容,这个设计还是比较巧妙:

render (h) {   if (this.show === false) {     return h(this.tag)   }   return h(this.tag, null, this.$slots.default) },

我们一般用component都是指定一个template,它这里是利用render来自己生成内容,它这里通过一个变量show控制是否绘制内部的内容,开始的时候show为false,那么这里就绘制一个div(tag为div),等检测(检测div)出现屏幕了,show就为true,就会绘制它内部的真实内容了(this.$slots.default就是自定义控件下面的内容)。

lazy-component作为一个组件,给外部提供了一个回调事件(show),表示已经开始load了,所以我们可以在外层监听这个事件:

load () {   this.show = true   this.state.loaded = true   this.$emit('show', this) }

我们来看一个做好的demo,这个demo还是以实现图片懒加载为主。

=> lazy-component demo(二维码)

注:lazy-component本身不能实现图片懒加载,它只是实现组件懒加载,上面demo真正实现懒加载是因为用了v-lazy。lazy-component有一个问题,就是它的上方必须要有东西,否则可能没有效果,因为它在检测的时候有一个判断:bottom>0,所以如果你在第一个元素使用lazy-component可能没有效果。

Vue的优点

Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快等优势,Vue中页面使用的是局部刷新,不用每次跳转页面都要请求所有数据和dom,可以大大提升访问速度和用户体验。

读到这里,这篇“vue-lazyload如何使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: vue-lazyload如何使用

本文链接: https://www.lsjlt.com/news/345573.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue-lazyload如何使用
    本文小编为大家详细介绍“vue-lazyload如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue-lazyload如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。v-lazy这个是Vue-La...
    99+
    2023-07-04
  • vue-lazyload怎么用
    这篇文章主要为大家展示了“vue-lazyload怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue-lazyload怎么用”这篇文章吧。当你用vue开...
    99+
    2022-10-19
  • vue中如何使用图片懒加载vue-lazyload插件
    这篇文章给大家分享的是有关vue中如何使用图片懒加载vue-lazyload插件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:说明当网络请求比较慢的时候,提前给这张图片...
    99+
    2022-10-19
  • react lazyLoad加载如何使用
    本篇内容介绍了“react lazyLoad加载如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.lazyLoad用处默认...
    99+
    2023-07-05
  • vue如何使用vue-loader
    这篇文章主要介绍vue如何使用vue-loader,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!vue-loader小技巧vue-loader 是处理 *.vue 文件的 webpa...
    99+
    2022-10-19
  • Vue中如何使用vue mixins
    这篇文章主要介绍了Vue中如何使用vue mixins,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用场景:例如我们在Vue单页面开发的时...
    99+
    2022-10-19
  • vue-swiper如何使用
    小编给大家分享一下vue-swiper如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!swiper是我之前做前端页面会用到...
    99+
    2022-10-19
  • vue-router如何使用
    这篇文章将为大家详细讲解有关vue-router如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、引子要学习vue-router就要先知道这里的路由是什么?为什么...
    99+
    2022-10-19
  • Vue如何使用video.js
    这篇文章给大家分享的是有关Vue如何使用video.js的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、下载video.jsnpm install --save-dev video...
    99+
    2023-06-29
  • vue中如何使用vue-resource插件
    vue中如何使用vue-resource插件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在使用这个插件之前,当然是先安装啦:npm ...
    99+
    2022-10-19
  • Vue中如何使用slot
    这期内容当中小编将会给大家带来有关Vue中如何使用slot,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。关于slot是这样说的,除非子组件模板包含至少一个 <slot> 插口,否则父组件的内容...
    99+
    2023-06-04
  • vue中axios如何使用
    这篇文章主要讲解了“vue中axios如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中axios如何使用”吧!1.axios配置 我的目录结构src/axios/in...
    99+
    2023-07-04
  • Vue片段如何使用
    这篇文章主要介绍“Vue片段如何使用”,在日常操作中,相信很多人在Vue片段如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue片段如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!在 Vue...
    99+
    2023-07-04
  • 如何使用vue路由
    小编给大家分享一下如何使用vue路由,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!概念路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地...
    99+
    2023-06-28
  • vue中$set如何使用
    vue中$set如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码如下:<!-- 操作 --> &...
    99+
    2022-10-19
  • Vue中如何使用JSX
    小编给大家分享一下 Vue中如何使用JSX,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Vue.js 具有简单的 API 和几个...
    99+
    2022-10-19
  • vue cli 3.0如何使用
    小编给大家分享一下vue cli 3.0如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先在使用 vue create ...
    99+
    2022-10-19
  • Vue插件如何使用
    这篇文章主要介绍了Vue插件如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vue插件1、概述简单来说,插件就是指对Vue的功能的增强...
    99+
    2022-10-19
  • Vue中TodoList如何使用
    本篇文章给大家分享的是有关Vue中TodoList如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. methodsmethods类似...
    99+
    2022-10-19
  • vue中props如何使用
    本篇文章为大家展示了vue中props如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。props使用方法Vue.component('my-compo...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作