【Element-plus】如何让滚动条永远在最底部(支持在线演示)

news2024/11/19 10:30:03

如何让滚动条永远在最底部

  • 一、适用场景
  • 二、实现思路
  • 三、效果图
    • 四、在线演示
    • 五、完整代码

一、适用场景

在某些场景下,你可能希望滚动条保持在最底部,以确保用户始终看到最新的内容或信息。如:在实时聊天应用程序中,当新消息到达时,滚动条自动滚动到最底部,方便用户立即看到最新的对话。

二、实现思路

  1. 使用 nextTick 等待 DOM 更新完成,然后计算出内部容器的总高度 max(如:当前可视区只有第4、5、6项,前面的3项已经由于滚动的关系不可见了。我们需要获取的总高度是包含 1~6 项的总高,而不仅是可视的高度);
  2. 当出现滚动条时,因为滚动条到容器顶部的距离一定恒小于在第一步计算出来的内部容器的总高度 max
  3. 所以,每当新增一项或者删除一项时,我设置滚动条到顶部的距离为第一步计算出来的内部容器的总高度 max,就可以让滚动条滚动到底部了。

三、效果图

在这里插入图片描述

四、在线演示

点击此处即可跳转到 Element Plus Playground

五、完整代码

下面使用的是vue3语法:

<template>
  <div class="header">
    <el-button @click="add">新增一项</el-button>
    <el-button @click="onDelete">删除一项</el-button>
    <el-button @click="setScrollToTop">回到顶部</el-button>
  </div>
  <el-scrollbar ref="scrollbarRef" max-height="200px" always @scroll="handleScroll">
    <div ref="innerRef">
      <p v-for="item in count" :key="item" class="scrollbar-demo-item">{{ item }}</p>
    </div>
  </el-scrollbar>
</template>
import { nextTick, ref } from 'vue'

const count = ref(5) // 计数器
const scrollbarRef = ref() // 滚动条实例
const innerRef = ref() // 计数器内部实例

/**
 * 控制滚动条滚动到容器的底部
 */
async function setScrollToBottom() {
  // 注意:需要通过 nextTick 以等待 DOM 更新完成
  await nextTick()
  const max = innerRef.value!.clientHeight
  console.log('max', max) // 如:当 count = 5 时,max = 总项数 * 每一项的高度 + 外边距 * (总项数 - 1),即 max = 5 * 50px + 20px * (5 - 1) = 330px
  scrollbarRef.value!.setScrollTop(max) 
}

/**
 * 控制滚动条滚动到容器的顶部
 */
function setScrollToTop() {
  scrollbarRef.value!.setScrollTop(0)
}

/**
 * 当触发滚动事件时,返回滚动的距离
 */
function handleScroll({ scrollTop }) {
  console.log('scrollTop', scrollTop)
}

/**
 * 新增一项
 */
async function add() {
  count.value++
  await setScrollToBottom()
}

/**
 * 删除一项
 */
async function onDelete() {
  if (count.value > 0) {
    count.value--
  }
  await setScrollToBottom()
}
.header {
  margin: 10px;
}
.scrollbar-demo-item {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 50px;
  margin: 20px;
  text-align: center;
  border-radius: 4px;
  background: var(--el-color-primary-light-9);
  color: var(--el-color-primary);
}

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

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

相关文章

跳动的爱心源码

话不多说直接上源码 关闭程序请按 AIt + F4 import random from math import sin, cos, pi, log from tkinter import * import ctypesuser32 = ctypes.windll.user32 CANVAS_WIDTH = user32.GetSystemMetrics(0

【java学习—七】面向对象特征之二:继承的基础知识(29)

文章目录 1. 为什么要有继承&#xff1f;2. 案例理解3. 继承的作用4. 总结 1. 为什么要有继承&#xff1f; 问题&#xff1a;为什么要有继承&#xff1f; 答&#xff1a;多个类中存在相同属性和行为时&#xff0c;将这些内容抽取到单独一个类中&#xff0c;那么多个类无需再定…

鹅厂练习 13 年 Coding 后,我悟了

点击链接了解详情 导读 本文主要受《程序员修炼之道: 通向务实的最高境界》、《架构整洁之道》、《Unix 编程艺术》启发。我不是第一个发明这些原则的人&#xff0c;甚至不是第一个总结出来的人&#xff0c;别人都已经写成书了&#xff01;务实的程序员对于方法的总结&#xf…

动态盘转换为基本盘

问题描述 不小心将磁盘0&#xff08;C和D是基本盘&#xff0c;蓝颜色&#xff09;改成了动态盘&#xff08;C和D是动态盘&#xff0c;橘黄色&#xff09;&#xff1f;如何修改回来呢&#xff1f; 解决方案&#xff1a; 使用DiskGenius将动态磁盘转换为基本磁盘 操作之前一定…

【Java题】将char类型的值转化为int类型的值

字符变量charVar的值是“我”字。程序中输出了该字符的Unicode值以及Unicode值对应的十进制数值&#xff0c;并打印输出了charVar与一个int型变量做加法运算后的值 public class Test {public static void main(String[] args) {int intResult,intVar10;char charVar我;intRe…

记录--纯CSS实现骚气红丝带

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 在本文中&#xff0c;我们将探讨如何使用 CSS 以最少的代码创造出精美的 CSS 丝带形状,并最终实现下面这个效果&#xff1a; 下面我们使用html和css来实现这个效果。我们使用内容自适应方式布局&#…

基于java的图书馆预约座位系统的设计与实现(部署+源码+LW)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于java的图书馆预约座…

【TA 工具积累】参考图展示 PureRef | 截图 Snipaste

贴两个平常看图和截图比较方便的工具&#xff1a; PureRef 官网指路&#xff1a;PureRef 油管简单的使用教程视频&#xff1a;Free Download | PureRef 知乎上大佬总结的快捷键&#xff1a; PureRef 快捷键 提炼总结 - 知乎 (zhihu.com) b站大佬总结的快捷键&#xff1a;…

C语言重点突破(3)字符串函数与内存函数的介绍

本章重点 重点介绍处理字符和字符串的库函数的使用和注意事项 前言 C语言里对字符串函数使用的特别频繁&#xff0c;但却没有规定字符串类型&#xff0c;那它在字符串里是如何存储的呢&#xff1f; 字符串通常放在常量字符串 中或者 字符数组 中&#xff0c;字符串常量适用…

03在命令行环境中创建Maven版的Java工程,了解pom.xml文件的结构,了解Java工程的目录结构并编写代码,执行Maven相关的构建命令

创建Maven版的Java工程 Maven工程的坐标 数学中使用x、y、z三个向量可以在空间中唯一的定位一个点, Maven中也可以使用groupId,artifactId,version三个向量在Maven的仓库中唯一的定位到一个jar包 groupId: 公司或组织域名的倒序, 通常也会加上项目名称代表公司或组织开发的一…

android 固定进度环形刷新效果

android 固定进度无限旋转的环形效果 效果图 Activity 中使用 val rotation: ObjectAnimator ObjectAnimator.ofFloat(progressBar, "rotation", 0f, 360f) rotation.duration 000 // 旋转持续时间为2秒 rotation.repeatCount ObjectAnimator.INFINITE // 设置为…

Mybatis 实现简单增删改查

目录 前言 一、Mybatis是什么 二、配置Mybatis环境 三、创建数据库和表 四、添加业务代码 4.1、添加实体类 4.2、添加mapper接口 4.3、添加实现接口方法的xml文件 五、简单的增删改查操作及单元测试 5.1、单元测试 单元测试具体步骤&#xff1a; 单元测试如何才能不污…

Everest Group发布《2023年RPA供应商评估报告》:2家中国厂商持续上榜

近日&#xff0c;全球知名信息咨询机构Everest Group发布了《2023年RPA供应商评估报告》&#xff0c;分析了全球 RPA 格局和 25 家技术提供商在几个关键维度上的动态变化&#xff0c;包括客户数量、同比增长、客户对价值和满意度的反馈以及公司的行业和企业规模细分覆盖范围等。…

SAP MM学习笔记35 - 请求书照合中的差额处理(发票扣减,受入)

SAP中&#xff0c;请求书照合之后&#xff0c;发现不一致&#xff0c;就会支付保留。 支付保留&#xff0c;可以参考如下文章。 SAP MM学习笔记34 - 请求书照合中的支付保留&#xff08;发票冻结&#xff09;_东京老树根的博客-CSDN博客 即使支付保留之后暂时不付钱&#xff…

消防建筑防火3d实景漫游展示方案及特点

随着科技的不断发展&#xff0c;3D线上展厅已经成为了展示产品和宣传品牌的重要方式之一。在火灾隐患排查领域&#xff0c;3D线上展厅也有着广泛的应用。相比于传统的火灾隐患排查方式&#xff0c;3D线上展厅突破了许多局限&#xff0c;具有以下优势&#xff1a; 众所周知&…

微调Yolov8动物姿势估计模型

本文主要以狗的姿势估计为例,展示如何对当下流行的YOLOv8姿势模型进行Fine-tuning,并附录完整代码。 动物姿势估计是计算机视觉领域的一个研究方向,它是人工智能的一个子领域,专注于自动检测和分析图像或视频中动物的姿势和位置。其目标是确定一个或多个动物身体部位的空间…

EMNLP 2023 录用论文公布,速看NLP各领域最新SOTA方案

EMNLP 2023 近日公布了录用论文。 开始前以防有同学不了解这个会议&#xff0c;先简单介绍介绍&#xff1a;EMNLP 是NLP 四大顶会之一&#xff0c;ACL大家应该都很熟吧&#xff0c;EMNLP就是由 ACL 下属的SIGDAT小组主办的NLP领域顶级国际会议&#xff0c;一年举办一次。相较于…

高德地图选择点位改变图标

一.循环渲染点位 如图所示&#xff0c;紫色点位为动态循环点位 首先&#xff0c;我们请求完接口&#xff0c;返回点位 这里是全部代码 下方有拆分讲解 this.map.remove(this.marks) this.marks [] this.map.plugin([AMap.PlaceSearch], () > {var PlaceSearchOptions …

echarts一些配置项的使用

前言:我是自己最近写项目用到的,我做个整理; 一. 基本使用 1.具有大小(宽高)的div ,id唯一; 例如: <div id"crewEchart"></div> 2.在项目中引入: import * as echarts from "echarts"; 3.写一个关于他的方法,在mounted的时候调用: moun…

好用的爬取静态页面谷歌浏览器工具:Save All Resources

说明 该插件可以下载网页中的所有资源 使用方法