vue自定义指令 - v-load

2023-11-04


前言

懒加载是一种网页性能优化的方式,它能极大的提升用户体验。图片一直是影响网页性能的主要元凶,现在一张图片超过几兆已经是很经常的事了。如果每次进入页面就请求所有的图片资源,那么可能等图片加载出来用户也早就走了。所以进入页面的时候,只请求可视区域的图片资源。

减少资源的加载,页面启动只加载首屏的图片,这样能明显减少了服务器的压力和流量,也能够减小浏览器的负担。

原理

图片懒加载的原理就是初始化时不设置图片的 src 属性,不进行加载,等当前图片到了可视区域再将图片真实的 url 放进 src 属性里面,从而实现图片的延迟加载。

实现方法

一、注册指令

  1. 创建 lazy.js:
export default {
  inserted (el) {
    console.log(el);
  }
}

打印结果:

在这里插入图片描述

  1. 在 main.js 引入并创建自定义指令:
import lazy from './directives/lazy.js'

Vue.directive('lazy', lazy)
  1. 对需要懒加载的图片使用该指令:
<template>
  <div class="hello">
	...
    <div>
      <img src="../assets/img/1.png" alt="" v-lazy>
    </div>
    <div>
      <img src="../assets/img/2.png" alt="" v-lazy>
    </div>
    <div>
      <img src="../assets/img/3.png" alt="" v-lazy>
    </div>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld'
}
</script>

二、实现指令逻辑

lazy.js:使用 IntersectionObserver 实现元素观察。

export default {
  inserted (el) {
    // 将img的src属性设置为空,初始化不进行加载
    const imgSrc = el.src
    el.src = ''

    // 观察者
    const observer = new IntersectionObserver(([{isIntersecting}]) => {
      /*
      * 元素进入可视区域 和 离开可视区域被 触发
      * 元素进入可视区域:isIntersecting === true
      * 元素离开可视区域:isIntersecting === false
      * */
      if (isIntersecting) {
        // 加载图片
        el.src = imgSrc
        // 停止观察
        observer.unobserve(el)
      }
    })

    observer.observe(el)
  }
}

三、页面效果

初始化:
在这里插入图片描述

图片进入可视范围内:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue自定义指令 - v-load 的相关文章

随机推荐

  • 【JDBC】使用DBUtils包来管理JDBC

    什么是DBUtils 是JDBC的简化开发工具包 使用它就不用再写很多冗余的代码了 总而言之 就是使得JDBC的操作更加的简单化了 文章目录 为啥要用DBUtils QueryRunner类 使用的数据库 注册驱动并建立起连接 update
  • ping 不通百度问题的解决

    ping 不通百度问题的解决 问题 网络能够ping通百度的ip地址 115 239 210 27这个ip地址 但是ping www baidu com长时间等待无反应 解决方式 碰到这个问题两次了 每次都挺无奈的 第一次解决是通过回退快照
  • 记录:ubuntu18下使用karlibr标定zed双目相机

    一 karlibr的安装 1 安装依赖 sudo apt get install python setuptools python rosinstall ipython libeigen3 dev libboost all dev doxy
  • Python3 面向对象(22)

    Python3 面向对象 Python从设计之初就已经是一门面向对象的语言 正因为如此 在Python中创建一个类和对象是很容易的 本章节我们将详细介绍Python的面向对象编程 如果你以前没有接触过面向对象的编程语言 那你可能需要先了解一
  • JAVA 相关书籍推荐(全)

    一 软件质量 1 代码整洁之道 the clean coder 2 重构 3 clean coder 代码整洁之道 4 编写可读代码的艺术 5 Effective Java 6 架构整洁之道 7 阿里巴巴 Java 开发手册 8 effec
  • 【扩散模型】3、Stable Diffusion 原型

    文章目录 一 背景 二 方法 2 1 感知图像压缩 2 2 潜在扩散模型 2 3 条件机制 三 实验 论文 High Resolution Image Synthesis with Latent Diffusion Models 代码 ht
  • i5 11300h和R5 5600H 参数对比哪个好

    酷睿i5 11300H配置为4个内核及8个线程 具备8MB的L3缓存和5MB的L2缓存 基础频率3 10GHz最高睿频4 40GHz Intel的显卡将集成Xe GPU内核 至于TDP i5 11300H TDP为35W 最高可配置为45W
  • jupyter的简单配置和使用

    更改jupyter文件目录 在应用当中需要输入anaconda prompt找到该命令窗口 会默认打开C盘 此时需要我们输入D 这里需要注意的是后面的冒号也要输入 还有就是d 和D 都是可以的 输入jupyter notebook就可以打开
  • yml配置,简化代码优化不必要的麻烦

    安全平台url security private url 1 getCustomerUrl 2 addCustomerUrl 3 editCustomerUrl 4 appId 5 appKey 6 appSecret 7 代码引用
  • MYSQL——分组

    1 group by 1 group by的含义 将查询结果按照1个或多个字段进 分组 字段值相同的为 组 2 group by可 于单个字段分组 也可 于多个字段分组 根据gender字段来分组 gender字段的全部值有4个 男 中性
  • 前端制作科技感网页登录界面

    注 如需背景图请联系作者 QQ 3416252112 效果图 源码
  • flutter图片点击跳转_Flutter 你需要知道的那些事 01

    公众号 AndroidTraveler 首发 1 width 属性 对于设置控件宽度填充父控件这件事情 在 Android 里面 只需要设置 MATCH PARENT 即可 但是在 Flutter 里面却不是这样 因为 Flutter 要具
  • Nginx学习研究-Docker安装Nginx 实现反向代理

    Docker安装Nginx 实现反向代理 为了安全考虑 我们一般会设置反向代理 用来屏蔽应用程序真实的IP和端口号 在Linux系统上最常用的反向代理就是Nginx 一 Nginx 安装部署 1 下载 nginx 镜像 docker pul
  • Windows统计分析进程流量工具AppNetworkCounter

    下载地址 link AppNetworkCounter是一个用于Windows的简单工具 它统计并显示系统上每个应用程序发送和接收的TCP UDP字节数和数据包数 对于每个应用程序 将显示以下信息 发送和接收字节数 发送和接收数据包数 发送
  • 用汇编语言实现从键盘输入一个字符,输出其对应的ASCII码

    Hello 大家好呀 这是本人的第一篇博客 这学期正好在学汇编语言 上周老师布置了一个作业 用汇编语言实现从键盘输入一个字符 输出其对应的ASCII码 说实话 这个问题最开始的时候令我不知从何下手 明明用c语言只需要几行代码 用汇编来实现却
  • GB 9706.1-2020和GB9706.1-2007对照表

    GB 9706 1 2020和GB9706 1 2007对照表 目录 GB 9706 1 2020和GB9706 1 2007对照表 新版GB 9706 1 2020标准基本情况及主要变化 pptx 原创力文档 关于发布GB 9706 1新
  • 自用工具 猴子都会用的UNITY文件浏览器(浏览文件夹)

    获取插件 效果图 支持按名称排序 按类别排序 关键词搜索 提供的接口 Vector3 最后UI位置 方便定做滑动菜单定位首尾 Bool 是否开启类别排序 可以重写该布尔值来达成切换排序方式的功能 Bool 刷新 调用这个布尔值可以刷新本插件
  • SOC基本知识

    1 什么是soc SOC称为系统级芯片 也称片上芯片 是一个专有目标的集成电路的产品 其中包括完整系统并有嵌入软件的全部内容 目前SOC更多的集成处理器 包括CPU GPU DSP 存储器 基带 各种接口控制模块 各种互联总线等 其典型代表
  • 解决问题记录7:kettle9.1在mysql中生成资源库问题

    使用kettle9 1在mysql生成资源库时 遇到了个问题 问题产生及解决步骤如下 1 kettle主页右上角没有 connect 下拉选项 解决方式一 删除下图路径下的repositories文件 然后重启kettle就可以了 解决方式
  • vue自定义指令 - v-load

    vue自定义指令 v load 前言 原理 实现方法 一 注册指令 二 实现指令逻辑 三 页面效果 前言 懒加载是一种网页性能优化的方式 它能极大的提升用户体验 图片一直是影响网页性能的主要元凶 现在一张图片超过几兆已经是很经常的事了 如果