创建Vue项目

首先确保你已安装Vue CLI,然后创建一个新的Vue 3项目:

npm init vue@latest

安装依赖

安装@vueuse/core库,它提供了useIntersectionObserver组合式API:

cnpm install
cnpm install @vueuse/core

创建指令文件夹和文件

src目录下创建directives文件夹,并添加index.js文件:

// src/directives/index.js
import { useIntersectionObserver } from '@vueuse/core'export const lazyPlugin = {install(app) {// 定义懒加载指令app.directive('img-lazy', {mounted(el, binding) {// el: 当前DOM元素(img标签)// binding.value: 指令绑定的值(图片URL)const { stop } = useIntersectionObserver(el,([{ isIntersecting }]) => {if (isIntersecting) {// 当图片进入视口时el.src = binding.valueel.classList.add('fade-in') // 添加淡入效果stop() // 停止监听}})}})}
}

在main.js中注册插件

// src/main.js
import { createApp } from 'vue'
import App from './App.vue'
import { lazyPlugin } from './directives' // 自动加载index.jscreateApp(App).use(lazyPlugin) // 注册懒加载插件.mount('#app')

创建图片懒加载组件

<!-- src/components/ImageList.vue -->
<template><div class="image-list"><h2>图片懒加载示例</h2><div class="images-container"><!-- 使用v-img-lazy指令 --><img v-for="item in imageList" :key="item.id" v-img-lazy="item.url" alt="懒加载图片"class="lazy-image"/></div></div>
</template><script>
export default {name: 'ImageList',data() {return {imageList: [{ id: 1, url: 'https://picsum.photos/800/600?random=1' },{ id: 2, url: 'https://picsum.photos/800/600?random=2' },{ id: 3, url: 'https://picsum.photos/800/600?random=3' },{ id: 4, url: 'https://picsum.photos/800/600?random=4' },{ id: 5, url: 'https://picsum.photos/800/600?random=5' },{ id: 6, url: 'https://picsum.photos/800/600?random=6' },{ id: 7, url: 'https://picsum.photos/800/600?random=7' },{ id: 8, url: 'https://picsum.photos/800/600?random=8' },{ id: 9, url: 'https://picsum.photos/800/600?random=9' },{ id: 10, url: 'https://picsum.photos/800/600?random=10' }]}}
}
</script><style scoped>
.images-container {display: grid;grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));gap: 20px;padding: 20px;
}.lazy-image {width: 100%;height: 200px;background-color: #f0f0f0;border-radius: 8px;object-fit: cover;opacity: 0;transition: opacity 0.5s ease;
}.fade-in {opacity: 1;
}
</style>

在App.vue中使用组件

<!-- src/App.vue -->
<template><div id="app"><!-- 添加一些内容,使页面可以滚动 --><div style="height: 1500px;"></div><ImageList /></div>
</template><script>
import ImageList from './components/ImageList.vue'export default {name: 'App',components: {ImageList}
}
</script>

运行项目

npm run dev

访问页面并滚动页面查看懒加载效果,可以在F12的网络面板观察img的请求状况。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 synchronized

深入理解 synchronized 引言&#xff1a;synchronized的核心地位 在Java并发编程中&#xff0c;synchronized关键字是实现线程安全的基石。自JDK 1.0引入以来&#xff0c;它经历了从"重量级锁"到"自适应锁"的进化&#xff0c;如今已成为兼顾安全性与性能的…

C语言字符串相关函数

C语言笔记内容提要数组字符串基本操作字符串相关函数综合案例&#xff1a;学生成绩管理系统数组字符串基本操作在用格式化说明符%s进行输入输出时&#xff0c;其输入输出项均为数组名。但在输入时&#xff0c;相邻两个字符串之间要用空格分隔&#xff0c;系统将自动在字符串后加…

从零开始:用Python库轻松搭建智能AI代理

为什么要关注AI代理&#xff1f; “Agentic AI”&#xff08;智能代理&#xff09;正在悄然改变我们的工作方式。想象一下&#xff0c;一个AI助手不仅能帮你查航班、订机票&#xff0c;还能自动安排行程、发邮件、生成日报——就像一个效率极高的“虚拟助理”团队。 对于测试工…

如何防止GitHub上的敏感信息被泄漏?

如大家所了解的&#xff0c;随着GitHub的用户越来越多&#xff0c;GitHub上的敏感信息被泄漏的问题也越来越严重。那么如何做&#xff0c;才能防止此类事情发生呢&#xff1f;这值得我们探讨。移除并删除敏感信息当我们发现了历史 commit 中包含敏感信息后&#xff0c;第一步便…

船舶机械零件的深孔工艺及检测方法 —— 激光频率梳 3D 轮廓检测

引言船舶机械零件中的深孔结构&#xff08;深径比&#xff1e;15:1&#xff09;直接影响动力系统可靠性&#xff0c;如柴油机缸体深孔、推进轴系润滑油孔等。此类深孔具有孔径大&#xff08;φ10 - 50mm&#xff09;、深度深&#xff08;500 - 2000mm&#xff09;、表面质量要求…

论文Review Lidar 3DGS Splat-LOAM: Gaussian Splatting LiDAR Odometry and Mapping

基本信息 题目&#xff1a;Splat-LOAM: Gaussian Splatting LiDAR Odometry and Mapping 来源&#xff1a;ICCV 2025 学校&#xff1a;Sapienza University of Rome 是否开源&#xff1a;https://github.com/rvp-group/Splat-LOAM 摘要&#xff1a;纯激光3DGS&#xff01;…

MYSQL:数据库约束

文章目录MYSQL&#xff1a;数据库约束&#xff1a;为你的数据上把“安全锁”1. 约束的类型概览2. NOT NULL 非空约束3. DEFAULT 默认值约束4. UNIQUE 唯一约束5. PRIMARY KEY 主键约束5.1 自增主键 AUTO_INCREMENT5.3 复合主键6. FOREIGN KEY 外键约束7. CHECK 约束总结MYSQL&a…

网络数据编码技术及其应用场景的全面解析

网络数据编码技术全景图​编码类型​​编码原理​​适用层​​典型应用场景​​优势​​缺陷​​曼彻斯特编码​电平跳变代表数据位&#xff08;高→低1&#xff0c;低→高0&#xff09;物理层10/100M以太网、RFID标签自同步时钟带宽利用率仅50%​4B/5B编码​4比特映射为5比特物…

RustDesk自建服务器完整部署指南:从零开始到成功连接。成功解决rustdesk报错:未就绪,请检查网络连接

最近需要用到远程工具解决用户问题&#xff0c;todesk总是提示付费&#xff0c;干脆自己使用开源的。当然凡事都有代价。 话费了一个工作日的时间终于搞定了。 本文将详细介绍如何从零开始部署RustDesk自建服务器&#xff0c;实现完全自主可控的远程桌面解决方案。 踩坑 参考…

datasophon安装doris问题排除记录

datasophon安装doris搞了好久才成功&#xff0c;特别记录一下。 多灾多难的安装过程&#xff1a;FE安装 首先&#xff0c;配置界面&#xff0c;要注意两个参数一定要改成正确的网段&#xff0c;否则会被识别成127.0.0.1注意&#xff1a;两个priority_networks 参数必须要改成你…

suricata新增Mysql告警规则处理

suricata新增Mysql告警规则处理协议解析后续处理内容新增规则规则解析关键字新增Setup用于初始化检测项Free用于资源释放AppLayerTxMatch用于协议解析完成后的规则检测针对pcap文件进行检测总结协议解析后续处理内容 经过Mysql协议解析处理流程 介绍&#xff0c;我们在suricat…

使用位运算优化 Vue.js 应用:高效状态管理技巧

在 Vue.js 开发中&#xff0c;位运算&#xff08;Bitwise Operations&#xff09;是一种高效的工具&#xff0c;尤其适用于需要管理大量布尔状态或优化性能的场景。位运算通过操作二进制位来实现状态的存储和检查&#xff0c;相比传统的数组或对象操作&#xff0c;内存占用更低…

【Java SE】Clonable接口和深拷贝

目录 一.Clonable接口 实现步骤&#xff1a; 完整代码&#xff1a; 二.深拷贝 实现步骤&#xff1a; 完整代码&#xff1a; 浅拷贝与深拷贝的对比 使用场景建议 完 浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09;是对象复制的两…

accelerate 在Pycham中执行的设置方法

背景 使用 accelerate 进行分布式代码训练时&#xff0c;需要在pycharm中进行调试&#xff0c;此时需要在pycharm中运行。 终端执行命令 # *[Specify the config file path and the GPU devices to use] export CUDA_VISIBLE_DEVICES0# *[Specify the config file path] expo…

探索量子计算与法律理论的交叉领域

文章目录 前言 一、引言 二、内容 (一)知识产权 (二)隐私与安全 (三)责任认定 (四)证据与证明 (五)法律推理与决策 三、结论 总结 前言 随着量子计算技术的突破性发展,其引发的法律范式重构问题日益凸显。乌兹别克斯坦学者伊索姆别克・阿卜迪哈基莫夫于2024年在《量…

js迭代器

文章目录前言实现原理&#xff1a;调用迭代器自制迭代器前言 迭代器是 JSt 中一种特殊的对象&#xff0c;它提供了一种统一的、通用的方式遍历个各种不同类型的数据结构。 可以遍历的数据结构包括&#xff1a;数组、字符串、Set、Map 等可迭代对象。我们也可以自定义实现迭代器…

chainlink VRF中文教程(含mock),解决error: Arithmetic Underflow in createSubscription

⸻我使用的版本&#xff1a;chainlink-brownie-contracts version:1.3.0⸻1. Import 相关包 ,,, import {VRFConsumerBaseV2Plus} from "chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2PLUS.sol"; import {VRFV2PlusClient} from "chainlink/contract…

非线性优化框架CasADi工具箱求解最优控制问题OCP

CasADi是一个开源的Python/MATLAB库&#xff0c;主要用于数值优化&#xff0c;特别是最优控制问题。它提供了一个易于使用的符号框架&#xff0c;用于处理和生成表达式&#xff0c;以及高效地生成导数信息。 https://web.casadi.org/get/https://web.casadi.org/get/ 所有OCP…

Type-C接口台式显示器:LDR6021引领新潮流

Type-C单口便携显示器LDR6021是市场上一种新兴的显示设备&#xff0c;以下是对其的详细介绍一、主要特点 便携性:LDR6021采用了Type-C接口作为数据传输和供电接口&#xff0c;这种设计使得它能够与各种支持Type-C接口的设备无缝连接&#xff0c;如笔记本电脑、智能手机、平板电…

在翻译语义相似度和会议摘要相似度评估任务中 ,分类任务 回归任务 生成任务区别

在翻译语义相似度&#xff08;Translation Semantic Similarity&#xff09;和会议摘要相似度&#xff08;Meeting Summary Similarity&#xff09;等任务中&#xff0c;通常会根据任务的目标和输出形式&#xff0c;将其划分为三类常见的任务类型&#xff1a;1. 分类任务定义&a…