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

无限加载和懒加载及路由滚动及路由滚动不生效

这里写目录标题

    • 列表无限加载
    • 懒加载
    • 定制路由滚动
      • 使用scrollBehavior不起效不管用的原因
      • 使用scrollTo来实现路由滚动
        • elMain && elMain.scrollTo(...) 的作用是:
    • 无限加载和懒加载的区别

列表无限加载

无限加载功能在现代网页和移动应用中广泛应用,主要用于提升用户体验和优化性能。

核心实现逻辑:使用elementPlus提供的v-infinite-scroll指令监听是否满足触底条件,满足加载条件时让页面参数加一获取下一页数据,做新老数据拼接渲染
在这里插入图片描述

页面加一,获取下一页数据
在这里插入图片描述
新老数据拼接
在这里插入图片描述
利用es的特性,进行新老数据拼接
[…goodList.value,…res.result.items]

加载完毕停止监听

在这里插入图片描述
elementPlus有个:infinite-scroll-disabled=“disabled”决定我们当前是否禁用加载
const disabled = ref(false)
在这里插入图片描述

懒加载

场景:电商网站的首页通常很长,用户不一定能访问到页面靠下面的图片,这类图片通过懒加载优化手段可以做到只有进入视口区域才发送图片请求

指令用法:

<img v-img-lazy="item.picture"/>

v-img-lazy
在图片img身上绑定指令,该图片只有在正式进入到视口区域时才会发送图片网络请求。

核心原理:图片进入视口才会发送资源请求
在这里插入图片描述
自定义指令全局注册:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
console.log(el,binding.value)打印的就是上述图片。

判断图片是否进入视口
要使用useIntersectionObserver方法,先在@vueuse/core中引入。
然后useIntersectionObserver(el,([{isIntersecting}])=>{
console.log(isIntersecting); //会打印出true/false

	 if (isIntersecting) {// 进入视口区域el.src = binding.value;}

})
这样就可以让图片进入视口才加载能看得到的图片资源。
在这里插入图片描述
重复监听问题:
uselntersectionObserver对于元素的监听是一直存在的,除非手动停止监听,存在内存浪费。调一下stop()就可以停止监听了。

逻辑书写位置
懒加载指令的逻辑不应该直接写到入口文件中,我们要通过插件的方法把懒加载指令封装为插件,main.js入口文件只需要负责注册插件即可
1、在src/directives/index.js中在这里插入图片描述
install(app){
// 使用app实现懒加载指令逻辑
}
2、在main.js中在这里插入图片描述
用app.use进行一个注册就可以了。

定制路由滚动

在不同路由切换的时候,可以自动滚动到页面的顶部,而不是停留在原先的位置。
如何配置:
vue-router支持scrollBehavior配置项,可以指定路由切换时的滚动位置。
在这里插入图片描述
scrollBehavior(){
return {top:0} //在页面顶部
}

使用scrollBehavior不起效不管用的原因

scrollBehavior 是让滚动条保持在最顶部,所以首先你需要让整个页面有一个滚动条,如果没有滚动条那就不能生效。所以就可能是你所在的那个页面的滚动条不是全局的整个大页面的滚动条,而是一个局部组件的滚动条。你可以在整个页面设置一个overflow:hidden让页面拥有滚动条试一试。

使用scrollTo来实现路由滚动

在这里插入图片描述
1、先获取那个局部组件

const elMain = document.querySelector(".el-main");

使用document.querySelector方法选择页面上第一个类名为el-main的元素,并将其存储在变量elMain中。
2、滚动到顶部

elMain && elMain.scrollTo({top: 0,behavior: "smooth",
});

首先检查elMain是否存在,如果存在,就调用elMain元素的scrollTo方法,将内容区域平滑地滚动到顶部。
3、允许导航继续
调用next()函数,允许当前的路由导航继续。这是必须的,因为如果不调用next(),导航将被阻止,页面不会跳转到目标路由。

总结:
在每次路由变化前,自动将.el-main元素(通常是页面的主要内容区域)平滑滚动到顶部,以确保用户每次进入新页面时都从内容的顶部开始阅读。这在提高用户体验方面很有用,特别是在长页面或单页应用(SPA)中。

elMain && elMain.scrollTo(…) 的作用是:

如果 elMain 存在(即不为 null 或 undefined),则执行 elMain.scrollTo({ top: 0, behavior: “smooth” }),使页面平滑滚动到顶部。

如果 elMain 不存在,则整个表达式的结果为 false,scrollTo 方法不会被调用。

这种方式是一种常见的短路求值技巧,用于安全地调用可能未定义的对象的方法或属性。

无限加载和懒加载的区别

无限加载和懒加载是两种不同的内容加载技术,它们虽然有相似之处,但在使用场景和实现方式上有明显的区别。以下是它们的详细对比:

  1. 定义
    无限加载(Infinite Scroll)用户在浏览内容时,随着滚动页面,新的内容会自动加载到页面中,而不需要用户点击“加载更多”按钮。常用于社交媒体、商品列表等场景,用户可以不断向下滚动以查看新内容。

    懒加载(Lazy Loading)只在需要时加载资源(如图片、视频、组件等),通常是当这些资源进入视口时才进行加载。主要用于优化性能,减少初始加载时间和带宽消耗。

  2. 使用场景
    无限加载适合在用户需要不断获取新内容的场景,如社交媒体、新闻网站、产品列表等。用户的主要交互是滚动,内容会自动加载,提供流畅的体验。

    懒加载适合在需要处理大量资源的页面,如长文章中的图片、视频,或大型应用中的组件。通过延迟加载非关键资源,提高页面初始加载速度。

  3. 用户交互
    无限加载通过滚动事件触发内容加载,用户无需任何额外操作。可能导致用户不清楚何时会停止加载内容,可能影响用户的时间管理。

    懒加载通常是通过元素进入视口时触发加载,用户看到内容时才会加载。用户可以在不影响其他内容加载的情况下浏览页面。

  4. 实现方式
    无限加载监听滚动事件,当用户接近页面底部时,自动请求并加载更多数据。可能需要处理加载状态(如加载指示器)和滚动到特定位置的行为。

    懒加载通过 Intersection Observer API 或其他方法检测元素是否进入视口,才进行加载。通常用于图片、视频、长列表中的组件等。

  5. 性能优化
    无限加载通过按需加载新的内容,减少一次性加载的内容量,从而优化性能。

    懒加载减少初始加载时的资源数量,提升页面加载速度和响应时间。

相关文章:

无限加载和懒加载及路由滚动及路由滚动不生效

这里写目录标题 列表无限加载懒加载定制路由滚动使用scrollBehavior不起效不管用的原因使用scrollTo来实现路由滚动elMain && elMain.scrollTo(...) 的作用是&#xff1a; 无限加载和懒加载的区别 列表无限加载 无限加载功能在现代网页和移动应用中广泛应用&#xff0…...

CSS底层基础:小白速来

1. CSS简介 CSS (Cascading Style Sheets) 是一种用来描述HTML或XML文档样式的语言。它使得开发者能够控制网页的布局和外观&#xff0c;包括字体、颜色、间距等。CSS通过选择器来指定要应用样式的元素&#xff0c;并定义这些元素的具体样式属性。 基本结构示例&#xff1a; …...

【MySQL 进阶之路】索引概述

第06章_索引 1.什么是索引 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;就好比一本教科书的目录部分&#xff0c;通过目录中找到对应文章的页码&#xff0c;便可快速定位到需要的文章。MySQL中也是一样的道理&#xff0c;进行数据查找时&#xff0c;首先查…...

【C++boost::asio网络编程】有关异步读写api的笔记

异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类&#xff0c;主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…...

Elasticsearch 的存储与查询

Elasticsearch 的存储与查询 在搜索系统领域&#xff0c;数据的存储与查询是两个最基础且至关重要的环节。Elasticsearch(ES) 在这两方面进行了深度优化&#xff0c;使其在关系型数据库或非关系型数据库中脱颖而出&#xff0c;成为搜索系统的首选。 映射 (Mapping) 映射 (Ma…...

008静态路由-特定主机路由

按照如上配置&#xff0c;用192.168.0.1 电脑ping 192.168.1.1 发现能够ping通 用192.168.0.1 电脑ping 192.168.2.1 发现不能ping通 这是因为192.168.0.1 和 192.168.1.1 使用的是同一个路由器R1。 192.168.0.1 和 192.168.2.1 通信需要先经过R1&#xff0c;再经过R2 &#xf…...

SystemUI 下拉框 Build 版本信息去掉

需求及场景 去掉SystemUI 下拉框 Build 版本信息 如下图所示&#xff1a;去掉 12 &#xff08;SP1A.201812.016) 了解 去掉之前我们先了解它是个什么东西:其实就是一个Build RTM 信息显示 Android_12_build_SP1A.210812.016 修改文件 /frameworks/base/packages/Syste…...

【JS】栈内存、堆内存、事件机制区别、深拷贝、浅拷贝

js中&#xff0c;内存主要分为两种类型&#xff1a;栈内存&#xff08;stack&#xff09;、堆内存&#xff08;heap&#xff09;&#xff0c;两种内存区域在存储和管理数据时有各自的特点和用途。 栈内存 访问顺序 栈是先进后出、后进先出的数据结构&#xff0c;栈内存是内存用…...

如何确保Java爬虫获得1688商品详情数据的准确性

在数字化商业时代&#xff0c;数据的价值日益凸显&#xff0c;尤其是对于电商平台而言。1688作为中国领先的B2B电子商务平台&#xff0c;提供了海量的商品数据接口&#xff0c;这些数据对于市场分析、库存管理、价格策略制定等商业活动至关重要。本文将详细介绍如何使用Java编写…...

【蓝牙通讯】iOS蓝牙开发基础介绍

1. iOS 蓝牙开发基础 在 iOS 中&#xff0c;蓝牙的操作主要是通过 Core Bluetooth 框架来实现。理解 Core Bluetooth 的基本组件和工作原理是学习 iOS 蓝牙开发的第一步。 核心知识点&#xff1a; Core Bluetooth 框架&#xff1a;这是 iOS 系统提供的专门用于蓝牙低功耗&am…...

Vue 90 ,Element 13 ,Vue + Element UI 中 el-switch 使用小细节解析,避免入坑(获取后端的数据类型自动转变)

目录 前言 在开发过程中&#xff0c;我们经常遇到一些看似简单的问题&#xff0c;但有时正是这些细节问题让我们头疼不已。今天&#xff0c;我就来和大家分享一个我在开发过程中遇到的 el-switch 使用的小坑&#xff0c;希望大家在使用时能够避免。 一. 问题背景 二. 问题分…...

echarts的双X轴,父级居中的相关配置

前言&#xff1a;折腾了一个星期&#xff0c;在最后一天中午&#xff0c;都快要放弃了&#xff0c;后来坚持下来&#xff0c;才有下面结果。 这个效果就相当是复合表头&#xff0c;第一行是子级&#xff0c;第二行是父级。 子级是奇数个时&#xff0c;父级label居中很简单&…...

RuoYi-Vue部署到Linux服务器(Jar+Nginx)

一、本地环境准备 源码下载、本地Jdk及Node.js环境安装,参考以下文章。 附:RuoYi-Vue下载与运行 二、服务器环境准备 1.安装Jdk 附:JDK8下载安装与配置环境变量(linux) 2.安装MySQL 附:MySQL8免安装版下载安装与配置(linux) 3.安装Redis 附:Redis下载安装与配置(…...

Linux firewalld常用命令

启动防火墙 systemctl start firewalld 停止防火墙 systemctl stop firewalld 防火墙开机自启动 systemctl enable firewalld 禁止防火墙开机自启动 systemctl disable firewalld 检查防火墙的状态 systemctl status firewalld 重新加载防火墙的配置 firewall-cmd -…...

Vue 组件之间的通信方式

Vue.js 中组件之间的通信是构建复杂应用的关键部分。以下是一些常见的Vue组件通信方式&#xff1a; 1. Props 和 Emit&#xff08;父子组件通信&#xff09; Props&#xff1a;父组件通过props向子组件传递数据。Emit&#xff1a;子组件通过emit触发事件&#xff0c;向父组件…...

el-select 修改样式

这样漂亮的页面&#xff0c;搭配的却是一个白色风格的下拉框 &#xff0c;这也过于刺眼。。。 调整后样式为&#xff1a; 灯红酒绿总有人看着眼杂&#xff0c;但将风格统一终究是上上选择。下面来处理这个问题。 分为两部分。 第一部分&#xff1a;是修改触发框的样式 第二部…...

Java项目实战II基于微信小程序的亿家旺生鲜云订单零售系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着移动互联网技术的不断…...

算法训练营day27(回溯算法03:组合总和,组合总和2,分割回文串)

第七章 回溯算法part03● 39. 组合总和 ● 40.组合总和II ● 131.分割回文串详细布置 39. 组合总和 本题是 集合里元素可以用无数次&#xff0c;那么和组合问题的差别 其实仅在于 startIndex上的控制题目链接/文章讲解&#xff1a;https://programmercarl.com/0039.%E7%BB%84%E…...

【青牛科技】D8331 流量计电路芯片,兼容 CTs,电阻分流器和罗氏线圈传感器

概述&#xff1a; D8331 系列超低功耗混合信号处理器由多种设备组成&#xff0c;具有针对电能表应用的不 同外围设备。它们集成了模拟前端和固定功能 DSP 解决方案与一个增强型 8052 单片 机核心&#xff0c;RTC 和 LCD 驱动程序集成在一个单一部件中。测量内核包括有功、无功…...

R语言森林生态系统结构、功能与稳定性分析与可视化实践高级应用

在生态学研究中&#xff0c;森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性&#xff0c;还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...