懒加载指令实现

news2025/1/18 13:54:13

问题:页面过长,下面的图片不一定访问到,存在一定浪费。

解决方案:图片懒加载,仅当进入视口区,才发送请求显示图片。

全局指令

// 全局指令
app.directive('指令名称',{
    mounted(el, binding){
        // el:指令绑定的元素
        // binding:绑定的表达式。binding.value为表达式的值
    }
})

在入口文件main.js中,定义一个全局指令第一个参数是指令名称,为 img-lazy,需要图片懒加载时,调用 v-img-lazy 实现。即 全局指令使用 v-指令名称 实现;第二个参数是一个钩子,钩子内的第一个参数是元素,第一个参数是绑定的表达式

 

 判断是否进入视口

vueuse插件中提供 useIntersectionObserver 方法,用于判断元素是否进去视口区。

import { useIntersectionObserver } from '@vueuse/core'
const { stop } = useIntersectionObserver(
    el,        
    ([{ isIntersecting }]) => {
        ...
        // el:监听的目标对象/元素
        //isIntersecting: 是否进入视口区域
    }
)

如果进入视口,发送图片资源请求。优化:重复监听

import { useIntersectionObserver } from '@vueuse/core'
const { stop } = useIntersectionObserver(
    el,        // 监听的目标对象/元素
    ([{ isIntersecting }]) => {
        // 进入视口区域
        if(isIntersecting){
            el.src = binding.value
            stop()     // 停止监听
        }
    }
)

停止监听:由方法解构出 stop 方法,可用于在 第一次完成加载后,调用stop() 来停止监听。 

 

测试 - 在组件中调用懒加载指令(全局指令)

模板中,使用 v-指令名 调用,如 v-img-lazy

    <img v-img-lazy='i.picture' />
//  <元素 v-指令名称='binding'>

优化:封装成插件

问题:逻辑书写位置不合理(在main.js中写逻辑)

解决:将懒加载指令封装成插件,main.js入口文件仅负责注册插件

// src/directives/index.js中(插件中)
const directivePlugin = {
    install(app){
        ...    // 使用app实现懒加载指令
    }
}
// main.js
import directivePlugin from '@/directives/index'
app.use(directivePlugin)     // 注册插件

完整代码:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/997647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《JUC》万万万万字长文解析!

JUC 四万字长文解析 juc&#xff0c;涵盖线程、内存模型、锁、线程池、原子类、同步器、并发容器、并发编程模式、并发编程应用等。 版本: jdk: 11spring boot: 2.7.0 JUC 是 java.util.concurrent 包的缩写&#xff0c;是 java 提供的用来并发编程的工具包。juc 提供了多种用…

ClickHouse的Join算法

ClickHouse的Join算法 ClickHouse是一款开源的列式分析型数据库&#xff08;OLAP&#xff09;&#xff0c;专为需要超低延迟分析查询大量数据的场景而生。为了实现分析应用可能达到的最佳性能&#xff0c;分析型数据库&#xff08;OLAP&#xff09;通常将表组合在一起形成一个…

MOS管为什么会存在寄生电感

说到MOS管的寄生参数&#xff0c;我们一般都只想到mos管各极间的寄生电容&#xff0c;很少会想到MOS管的寄生电感。 其实分立的MOS管它是存在寄生电感的&#xff0c;并且栅极&#xff0c;源极和漏极都存在。 在一些MOS的数据手册会提到这个寄生电感。 那么MOS管寄生电感是怎么产…

9月4日上课内容 第七章 案例:MHA高可用配置及故障切换

本章结构 案例概述 案例前置知识点 1&#xff0e;什么是 MHA&#xff08;MHA概念&#xff09; MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&…

ComPtr源码分析

ComPtr源码分析 ComPtr是微软提供的用来管理COM组件的智能指针。DirectX的API是由一系列的COM组件来管理的&#xff0c;形如ID3D12Device&#xff0c;IDXGISwapChain等的接口类最终都继承自IUnknown接口类&#xff0c;这个接口类包含AddRef和Release两个方法&#xff0c;分别用…

BUUCTF easyre 1

使用die工具进行文件信息的查看 可以看到是64位程序 使用IDA64打开 f5 反汇编 得到flag

超详细Python第三方库的安装,多图,逐步骤

Python第三方库的安装 前言1. PyCharm中安装模块2. PyCharm终端中命令安装3. 命令行安装4. 命令补充 总结 前言 Python有丰富的第三方库&#xff0c;在Python编程中&#xff0c;经常需要安装第三方库&#xff0c;本文详细介绍了第三方模块/软件包的安装。 提示&#xff1a;大家…

手写Spring:第17章-通过三级缓存解决循环依赖

文章目录 一、目标&#xff1a;通过三级缓存解决循环依赖二、设计&#xff1a;通过三级缓存解决循环依赖2.1 通过三级缓存解决循环依赖2.2 尝试使用一级缓存解决循环依赖 三、实现&#xff1a;通过三级缓存解决循环依赖3.1 工程结构3.2 通过三级缓存解决循环依赖类图3.3 设置三…

Kafka3.0.0版本——消费者(手动提交offset)

目录 一、消费者&#xff08;手动提交 offset&#xff09;的概述1.1、手动提交offset的两种方式1.2、手动提交offset两种方式的区别1.3、手动提交offset的图解 二、消费者&#xff08;手动提交 offset&#xff09;的代码示例2.1、手动提交 offset&#xff08;采用同步提交的方式…

JavaScript-----jQuery

目录 前言&#xff1a; 1. jQuery介绍 2. 工厂函数 - $() jQuery通过选择器获取元素&#xff0c;$("选择器") 过滤选择器&#xff0c;需要结合其他选择器使用。 3.操作元素内容 4. 操作标签属性 5. 操作标签样式 6. 元素的创建,添加,删除 7.数据与对象遍历…

torch.cuda.is_available() 解决方

本人使用的显卡如下&#xff0c;打开任务管理器查看 Anaconda下载哪个版本都可以 使用命令conda create -n pytorch python3.6创建一个名为pytorch的环境&#xff0c;解释器使用3.6的 使用命令conda activate pytorch进入该环境 进入pytorch官网&#xff0c;选择下列选项 复…

九 动手学深度学习v2 ——卷积神经网络之AlexNet

文章目录 AlexNetVGG AlexNet AlexNet新引入dropout、ReLU、maxpooling和数据增强。 VGG VGG神经网络连接 图7.2.1的几个VGG块&#xff08;在vgg_block函数中定义&#xff09;。其中有超参数变量conv_arch。该变量指定了每个VGG块里卷积层个数和输出通道数。全连接模块则与Ale…

超详细最新PyCharm+Python环境安装,多图,逐步骤

PyCharmPython环境安装 前言一、pycharm下载安装1. 安装地址2. 安装详细步骤 二、Python下载安装1. 安装地址2. 安装详细步骤3. 环境变量忘记添加4. python安装成功测试 三. PyCharm上配置Python总结推荐文章 前言 文章会详细介绍PyCharmPython详细安装步骤&#xff0c;接下来…

【数据分享】2012-2023年全国范围的逐月NPP/VIIRS夜间灯光数据

在之前的文章中我们分享了2012-2022年全球范围逐年NPP/VIIRS夜间灯光数据&#xff01;以及2012-2022年中国范围的逐年NPP/VIIRS夜间灯光数据&#xff08;均可查看之前的文章获悉详情&#xff09;很多小伙伴询问有没有逐月的夜间灯光数据。 本次我们分享的是2012-2023年中国范围…

Flask 快速上手教程 — 了解与基本使用

Flask 快速上手教程 — 了解与基本使用 这篇博客是我刚接触 flask&#xff0c;研究文档时的一些记录与体会&#xff0c;希望对各位刚接触 flask 的朋友有所帮助。 且在此篇后&#xff0c;我还会另写一篇关于纯后端的 flask 教程&#xff0c;介绍一下如何使用 flask 创建一个较…

Oracle for Windows安装和配置——2.1.Oracle for Windows安装

​2.1.1. 准备Oracle软件 1)下载或拷贝安装软件 下载地址:otn.oracle.com或my oracle support。下载文件列表。具体如图2.1.1-1所示。图2.1.1-1 下载文件列表 --说明: 1)通过otn.oracle.com站点,可以免费下载用于安装的Oracle软件,但通常只能下载到Oracle各大版本的base…

切面(增强)的优先级

Component Aspect Order(value 10)//为增强类指定一个优先级的值,值越小,优先级越高,优先级越高的前置先执行,后置后执行,类似洋葱 为增强类指定一个优先级的值,值越小,优先级越高,优先级越高的前置先执行,后置后执行,类似洋葱 首先会执行前置通知,再执行目标方法,按照顺序和优…

并查集介绍和常用模板

并查集介绍和常用模板 前言&#xff1a; 并查集&#xff08;Union-find set 也叫Disjoint Sets&#xff09;是图论里面一种用来判断节点之间是否连通的数据结构&#xff0c;学会使用它可以处理一些跟节点连通性的问题。它有两个很重要的方法&#xff1a; Find(x)&#xff1a;…

2023软件设计师上半年真题解析(上午+下午)

上午试题 1.系统总线 计算机中&#xff0c;系统总线用于&#xff08;&#xff09;连接。 A&#xff0e;接口和外设 B&#xff0e;运算器,控制器和寄存器C&#xff0e;主存及外设部件 D&#xff0e;DMA控制器和中断控制器 总线可以划分为数据总线、地址总线和控制总线。系统总…

自然语言处理应用(一):情感分析

情感分析 随着在线社交媒体和评论平台的快速发展&#xff0c;大量评论的数据被记录下来。这些数据具有支持决策过程的巨大潜力。 情感分析&#xff08;sentiment analysis&#xff09;研究人们在文本中 &#xff08;如产品评论、博客评论和论坛讨论等&#xff09;“隐藏”的情…