前端提高性能——使用Intersection Observer API对图片视频进行懒加载

前言

最近做了一个项目是类似于商城的,需要放很多图片,在用户选择一页五十条时,页面加载速度会比较慢。为了提高性能,选择用Intersection Observer API 实现图片懒加载。

实现步骤

一、html代码:

<img class="imgCla" data-src="@/assets/img/bigPng1.png" alt="" />

这里用“data-src”代替了src,用来标记需要使用懒加载的图片,后面以便操作 

二、css样式:

.imgCla {width: 300px;height: 400px;object-fit: cover;//对这些元素进行保留原始比例的剪切、缩放或者直接进行拉伸等background-color: #f0f0f0;
}

三、js代码:

const images = document.querySelectorAll("img[data-src]");const options = {rootMargin: "0px",threshold: 0.5,};const observer = new IntersectionObserver((entries) => {entries.forEach((entry) => {if (entry.isIntersecting) {const img = entry.target;const src = img.getAttribute("data-src");img.setAttribute("src", src);img.removeAttribute("data-src");observer.unobserve(img);}});}, options);images.forEach((img) => {observer.observe(img);});

注:这里是使用 Intersection Observer API 监视图片元素是否进入视口,进入视口之后再将data-src改为src

bug描述:

原生写法的话按理来说此刻应该可以了,但是我写在vue2项目里发现图片加载不出来,如下图:

检查过代码逻辑没有什么问题之后,我写了一个正常的没有懒加载的图片,是正常显示的,检查了network之后发现了问题:

正常显示的图片路径是 :http://localhost:9528/static/img/bigPng1.1ca7e5c0.png

因为正常直接加载图片时,webpack将图片进行了处理,但是使用懒加载的图片没有被打包工具处理

解决步骤:

1、调整webpak配置,在 chainWebpack 方法中查找到处理 SVG 文件的规则,类似地,可以添加相应的规则来处理其他类型的图片文件

在vue.config.js的chainWebpack中加入代码:

config.module.rule("images").test(/\.(png|jpe?g|gif)(\?.*)?$/).use("url-loader").loader("url-loader").options({limit: 8192, // 如果小于 8kb,转换为 base64 格式name: "assets/img/[name].[ext]", // 图片输出路径和名称配置}).end();

 2、将刚开始的html里面的img标签路径调整一下:

<img class="imgCla" data-src="assets/img/bigPng1.png" alt="" />

效果展示:

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

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

相关文章

import postcssPxToViewport8Plugin from ‘postcss-px-to-viewport-8-plugin‘;

npm 命令行&#xff1a; npm i postcssPxToViewport8Plugin package.json插件的版本&#xff1a; 重点&#xff1a;引入插件的两种方式 postcss-px2rem-exclude配置 postcss.config.js无效 为什么引入插件不生效&#xff1f; 发现没有效果&#xff0c;然后然后百度网上资料发现…

立体声骨传导蓝牙耳机哪个好?骨传导蓝牙耳机选购避坑的几大要点

最近骨传导蓝牙耳机以其创新的设计成为众多消费者的热门话题。这类耳机可以让用户在听音乐的同时清晰地听到周围环境的声音&#xff0c;这样的设计使得骨传导蓝牙耳机在过去两年中迅速赢得了用户的青睐。随着市场的不断扩大&#xff0c;各式各样的骨传导蓝牙耳机纷纷涌现&#…

监听抖音直播间的评论并实现存储

监听抖音直播间评论&#xff0c;主要是动态监听dom元素的变化&#xff0c;如果评论是图片类型的&#xff0c;获取alt的值 主要采用的是MutationObserver&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver index.js如下所示:function getPL() {…

idea项目mapper.xml中的SQL语句黄色下划线去除

问题描述 当我们使用idea开发java项目时&#xff0c;经常会与数据库打交道&#xff0c;一般在使用mybatis的时候需要写一大堆的mapper.xml以及SQL语句&#xff0c;每当写完SQL语句的时候总是有黄色下划线&#xff0c;看着很不舒服。 解决方案&#xff1a; 修改idea的配置 Edi…

RedisTemplate实现锁超时时间延长(模仿Redisson看门狗机制)

业务场景&#xff1a; 在上一篇-Java业务功能并发问题处理的最后&#xff0c;我们用RedisTemplate实现了一个分布式锁&#xff0c;但是后面又有用户反馈同个单据出现了重复操作&#xff0c;让我们回忆下上次的加锁代码&#xff1a; 问题描述&#xff1a; 原因出现在我们锁住…

深度学习每周学习总结P1(pytorch手写数字识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. 数据导入部分2. 模型构建部分3. 训练前的准备4. 定义训练函数5. 定义测试函数6. 训练过程 0. 总结 总结: 数据导入部分&a…

PMP证书含金量如何,打算以后从事项目管理这一行业的有没有必要考这个证书?

建议考一个&#xff0c;虽然说这一纸证书只是一个资格证书&#xff0c;本身不能带来多少利益&#xff0c;项目管理行业入门证书&#xff0c;但是现在很多企业招聘要求中写了“有 PMP 证书”优先录取&#xff0c;还是考一个有备无患。 含金量问题一直备受关注&#xff0c;总结了…

抽样算法——【数据科学与工程算法基础】

一、前言 这是课程的第二章节——抽样算法&#xff0c;主要分为三类。 详情可参考&#xff1a; 数据科学的算法基础——学习记录跳转中心 二、正篇 1.系统抽样 课本只介绍了最简单的——等距抽样。 直线等距抽样&#xff08;Nn*k&#xff09;&#xff1a;即总体个数可以被抽…

【刷题训练】LeetCode125. 验证回文串

验证回文串 题目要求 示例 1&#xff1a; 输入: s “A man, a plan, a canal: Panama” 输出&#xff1a;true 解释&#xff1a;“amanaplanacanalpanama” 是回文串。 示例 2&#xff1a; 输入&#xff1a;s “race a car” 输出&#xff1a;false 解释&#xff1a;“rac…

Docker-数据卷、网络、dockerfile、挂载

目录 一、数据卷 二、MySQL数据 三、具名和匿名挂载 1、匿名挂载 2、具名挂载 3、指定挂载 四、Dockerfile 1、数据卷容器 2、dockerfile构建步骤 五、数据卷容器 1、实现多个容器之间数据共享 2、多个mysql之间共享数据库 六、Docker网络 1、Docker0 1、查看容器…

bpmn-js系列之Palette

前边写了四篇文章介绍了bpmn.js的基本使用&#xff0c;最近陆续有小伙伴加我催更&#xff0c;感谢对我这个半吊子前端的信任&#xff0c;接着更新bpmn.js的一些高级用法&#xff0c;本篇介绍对左侧工具栏Palette的隐藏和自定义修改 隐藏shape 左侧工具栏Palette有些图标我用不…

MATLAB:一些杂例

a 2; b 5; x 0:pi/40:pi/2; %增量为pi/40 y b*exp(-a*x).*sin(b*x).*(0.012*x.^4-0.15*x.^30.075*x.^22.5*x); %点乘的意义 z y.^2; %点乘的意义 w(:,1) x; %组成w&#xff0c;第一列为x w(:,2) y; %组成w&#xff0c;第二列为y w(:,3) z; %组成w&#xff0c;第三列为z…