当前位置: 首页 > news >正文

vue实现图片懒加载

在src中创建一个directives文件夹在里面创建一个lazy.js文件

在main.js中引入

import lazy from './directives/lazy'

app.directive('lazy', lazy)

在app.vue中

<script setup lang="ts">
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
</script><template><div class="img-container"><!-- src是刚开始没有加载出的图片 data-src是加载后的图片,已经进入显示区域的图片 --><!--  v-lazy 懒加载 将它绑的在每个需要懒加载的图片上 --><imgv-lazysrc="https://copyright.bdstatic.com/vcg/creative/cc9c744cf9f7c864889c563cbdeddce6.jpg@h_1280"alt=""class="lazyload"/></div><div class="img-container"><imgv-lazysrc="https://inews.gtimg.com/om_bt/OHyQqgC_5oi4Vm0tlH49XvJzqNBHo2Zryxx5F_be5N2cIAA/1000"alt=""class="lazyload"/></div><div class="img-container"><imgv-lazysrc="https://inews.gtimg.com/om_bt/OHyQqgC_5oi4Vm0tlH49XvJzqNBHo2Zryxx5F_be5N2cIAA/1000"alt=""class="lazyload"/></div><div class="img-container"><imgv-lazysrc="https://inews.gtimg.com/news_bt/OLxGAuCdJ1SwoZRdrZoqGrpBGX-BgYjWnSFuiDDoS3xQsAA/1000"alt=""class="lazyload"/></div><div class="img-container"><imgv-lazysrc="https://img.pconline.com.cn/images/upload/upc/tx/itbbs/2101/25/c1/251135935_1611532823091_mthumb.jpg"alt=""class="lazyload"/></div><div class="img-container"><imgv-lazysrc="https://img2.baidu.com/it/u=4045137561,4227164018&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1280"alt=""class="lazyload"/></div><!-- <RouterView /> -->
</template><style scoped>* {margin: 0;padding: 0;list-style: none;}.lazyload {width: 200px;height: 200px;}@media (min-width: 1024px) {header {display: flex;place-items: center;padding-right: calc(var(--section-gap) / 2);}.logo {margin: 0 2rem 0 0;}header .wrapper {display: flex;place-items: flex-start;flex-wrap: wrap;}nav {text-align: left;margin-left: -1rem;font-size: 1rem;padding: 1rem 0;margin-top: 1rem;}
}
</style>

在lazy.js中

export default {//定义了一个 mounted 方法,在相关组件挂载到页面后执行一些操作,参数 el 通常指的是被挂载的元素。mounted(el) {//查看图片是否被绑的// console.log(el,'这个是el');//将图片保存在src属性上const imgSrc=el.src;//el.src=''; 因为直接进入不加载图片,要将图片清空el.src='';//观察者 观察当前图片是否进入可视区const observer = new IntersectionObserver(([{ isIntersecting }]) => {//元素出现在可视区域,和元素离开可视区域console.log("进入可视区域");//isIntersecting 是 IntersectionObserverEntry 对象的一个属性,它表示目标元素与根元素是否相交。//如果 isIntersecting 的值为 true,则表示目标元素与根元素相交;//如果 isIntersecting 的值为 false,则表示目标元素与根元素不相交。//图片出现在可视区,和图片离开可视区if(isIntersecting){// 加载图片el.src =imgSrc;//停止观察observer.unobserve(el);}});//在进行某种观察或监听操作observer.observe(el);},
};

http://www.lryc.cn/news/352727.html

相关文章:

  • Python | Leetcode Python题解之第101题对称二叉树
  • 周报5.20~5.26
  • RDP方式连接服务器上传文件方法
  • 网络信息安全
  • java中的对象
  • 【MySQL精通之路】MySQL-环境变量
  • Day42 最后一块石头的重量Ⅱ + 目标和 + 一和零
  • 01.爬虫---初识网络爬虫
  • 集合、Collection接口特点和常用方法
  • 12. Web开发:介绍Web开发的基本概念,Servlet和JSP的使用,MVC设计模式的应用等。
  • 文件系统--inode
  • 数据清洗(ETL)案例实操
  • Zookeeper 面试题(一)
  • 怎么安装django特定版本
  • 关于Broken pipe异常的一点学习记录
  • 第十一课,end关键字、简单while循环嵌套、初识for循环
  • spring boot 集成mongodb
  • 从零开始搭建SpringCloud Alibaba微服务架构
  • SpringBoot(八)之JdbcTemplate
  • ClickHouse 24.4 版本发布说明
  • amtlib.dll打不开怎么办?一键修复丢失amtlib.dll方法
  • 【退役之重学Java】关于 volatile 关键字
  • “大数据建模、分析、挖掘技术应用研修班”的通知!
  • Uniapp自定义默认返回按钮回退页面
  • 音视频开发5 补充 - Nginx搭建rtmp流媒体服务器,目的是让ffmpeg 可以直播推流
  • 小猫咪的奇幻冒险:一个简单的Python小游戏
  • 专注于运动控制芯片、运动控制产品研发、生产与销售为一体的技术型芯片代理商、方案商——青牛科技
  • 【C++】继承(二)深入理解继承:派生类默认成员函数与友元、静态成员的奥秘
  • 【MATLAB源码-第214期】基于matlab的遗传算法GA最短路径路由优化算法仿真。
  • 数据结构(四)顺序栈 链式栈