Web前端篇——ElementUI之el-scrollbar + el-backtop + el-timeline实现时间轴触底刷新和一键返回页面顶部

ElementUI之el-scrollbar + el-backtop + el-timeline实现时间轴触底刷新和一键返回页面顶部。

背景:ElementUI的版本(vue.global.js = 3.2.36, index.css = 2.4.4, index.full.js = 2.4.4)

废话不多说,先看动图效果↓↓↓

然后直接上代码。(注意代码中有注释的地方,是容易出错的关键地方。)

<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <!-- viewport设置, 简单页面兼容手机端显示 -->
    <script src="https://unpkg.com/vue@3.2.36/dist/vue.global.js"></script>
    <link rel="stylesheet" href="https://unpkg.com/element-plus@2.4.4/dist/index.css">
    <script src="https://unpkg.com/element-plus@2.4.4/dist/index.full.js"></script>
    <title>Test Web Page</title>
    <style>
      .el-timeline {
        padding-left: 0;
      }
    </style>
  </head>
  <body>
    <div id="app" class="allpack" style="height:100%;overflow: hidden;">
      <!-- 最外层overflow要设置为hidden, 否则会和el-scrollbar冲突, 显示2个滚动条且滚动不舒服-->
      <el-scrollbar class="scrollbar" ref="scrollbar" style="height:100%;">
        <el-backtop target=".scrollbar .el-scrollbar__wrap" :bottom="100">
          <!-- 这里设置target除了添加el-scrollbar本体,还要添加.el-scrollbar__wrap, 否则无效 -->
          <div
            style="
              height: 100%;
              width: 100%;
              background-color: var(--el-bg-color-overlay);
              box-shadow: var(--el-box-shadow-lighter);
              text-align: center;
              line-height: 40px;
              color: #1989fa;
            "
          >
            UP
          </div>
        </el-backtop>
        <h1 align="center">Test Message</h1>
        <el-row>
          <!-- 只是为了给布局添加自适应的边距, 不重要, 读者可不使用 -->
	      <el-col :span="1">
            <div class="grid-content ep-bg-purple">
            </div>
          </el-col>
	        <el-col :span="22">
	          <div class="grid-content ep-bg-purple-light">
	            <el-timeline>
                  <el-timeline-item
		            v-for="(activity, index) in activities"
                    placement="top"
                    :key="index"
                    :timestamp="activity.timestamp"
	              >
                    <el-card>
		              <h4>{{ activity.content }}</h4>
        	          <p>{{ activity.timestamp }}</p>
                    </el-card>
	              </el-timeline-item>
	            </el-timeline>
            </div>
          </el-col>
	        <el-col :span="1">
              <div class="grid-content ep-bg-purple">
              </div>
          </el-col>
        </el-row>
      </el-scrollbar>
    </div>
    <script>
      const App = {
        data() {
          return {
	        message: "Hello Element Plus",
            activities: [
              {
                content: 'Custom icon',
                timestamp: '2018-04-12 20:46',
              },
              {
                content: 'Custom color',
                timestamp: '2018-04-03 20:46',
              },
              {
                content: 'Custom size',
                timestamp: '2018-04-03 20:46',
              },
              {
                content: 'Custom hollow',
                timestamp: '2018-04-03 20:46',
              },
              {
                content: 'Default node',
                timestamp: '2018-04-03 20:46',
	          },
	          {
                content: 'Custom hollow',
                timestamp: '2018-04-03 20:46',
              },
              {
                content: 'Default node',
                timestamp: '2018-04-03 20:46',
	          },
	          {
                content: 'Custom hollow',
                timestamp: '2018-04-03 20:46',
              },
              {
                content: 'Default node',
                timestamp: '2018-04-03 20:46',
              },
            ]
          };
	    },
	    methods: {
	      updateData() {
            var obj = {
              content: 'aaaaaaaa',
              timestamp: '2023-04-03 20:46',
            };
	        this.activities.push(obj);
	        this.activities.push(obj);
	        this.activities.push(obj);
	        this.activities.push(obj);
	        this.activities.push(obj);
	        this.activities.push(obj);
	      },
	      scrollerFunc() {
            //这里要注意用document.getElementById去获取scrollbar组件读取滚动距离值是错误的,要用this.$refs.scrollbar.$el
	        let let1 = this.$refs.scrollbar.$el.firstChild.scrollTop; //滚动条滚动距离
            let let2 = this.$refs.scrollbar.$el.firstChild.scrollHeight; //浏览器总高度
            let let3 = this.$refs.scrollbar.$el.scrollHeight; //浏览器可见高度
	        console.log(let1, let2, let3);
            if(let1 + let3 == let2){
              console.log("页面触底啦")
              let loadingInstance = this.$loading({
                target: "#load",
                text: "加载中"
              });
              setTimeout(() => {
                //你用的时候这里就可以访问后端数据进行更新,我这里直接本地更新数据了
                this.updateData();
                loadingInstance.close();
              }, 1000);
	        }
          }
	    },
	    mounted() {
	      this.$refs.scrollbar.$el.addEventListener("scroll", this.scrollerFunc, true);  
          //这里要注意用document.getElementById去获取scrollbar组件绑定滚动事件无效,要使用this.$refs.scrollbar.$el
	    }
      };

      const app = Vue.createApp(App);
      app.use(ElementPlus);
      app.mount("#app");
    </script>
  </body>
</html>

为避免篇幅过长,更多细节的处理、集成分页功能等就不在此展示了,完全可自行实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

卷积神经网络|猫狗分类系列--导入kaggle猫狗数据集

解决任何真实问题的重要一步是获取数据&#xff0c;Kaggle提供了大量不同数据科学问题的竞赛。 我们将从 https://www.kaggle.com/competitions/dogs-vs-cats/data 下载猫狗数据集&#xff0c;并对其进行一定的操作&#xff0c;以正确的导入到我们的计算机&#xff0c;为接下…

python+playwright 学习-1.环境准备与快速开始

前言 说到 web 自动化&#xff0c;大家最熟悉的就是 selenium 了&#xff0c;selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe&#xff0c; 但这3个都需要掌握 JavaScript 语言&#xff0c;所以只是少部分人在用。 2020年微软开源一个 UI 自动化测试工具 P…

使用openssl 生成pfx格式证书时报错:unable to load certificates

问题现象包如下&#xff1a; 之前在centos上使用openssl部署证书服务器以及颁发证书的时候遇到的问题&#xff0c;在进行个人证书生成之后需要形成pfx格式证书&#xff0c;结果过程中报错了。网上类似资料比较少&#xff0c;做个记录。 生成pfx格式证书的命令&#xff1a; o…

Eureka的自我保护机制

一&#xff1a;Eureka的自我保护机制是什么&#xff1f; 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式&#xff0c;Eureka Server将会尝试保护其服务注册表中的信息&#xff0c;不再删除服务注册表中的数据&#xff0c;也就是不…

springCould中的Hystrix【下】-从小白开始【8】

目录 &#x1f9c2;1.熔断机制❤️❤️❤️ &#x1f32d;2.修改8001服务 ❤️❤️❤️ &#x1f95e;3.测试 ❤️❤️❤️ &#x1f953;4. 服务监控hystrixDashboard❤️❤️❤️ &#x1f32d;5.仪表盘❤️❤️❤️ &#x1f9c2;6.仪表盘的使用 ❤️❤️❤️ 1.熔断机…

LibVLC中播放、录制

video 1&#xff1a;首先官网下载vlc库 2&#xff1a;将下载的库添加到工程目录 3&#xff1a;添加功能接口 bool QtVLCWidget::playMedia(const char* url, PlayType type) {if (type PT_Url){m_media libvlc_media_new_location(url);}else if (type PT_LocalFile){m_med…

设计模式④ :分开考虑

一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》&#xff08;【日】结城浩 著&#xff09;。该系列文章可随意转载。 …

实验二 Linux文件编程

一、实验目的与任务 目的&#xff1a;了解掌握文件系统特点与功能&#xff0c;学会借助文件系统的功能函数进行编程。 任务&#xff1a;利用C语言指令编写程序调用文件系统函数&#xff0c;完成相应功能。 二、实验设备 装有Linux操作系统的计算机一台。 三、实验要求 1&…

电源芯片浪涌电流如何产生?该怎么测试?

对于电源芯片的设计和制造商来说&#xff0c;防止芯片受到电源干扰是非常重要的。为了保障芯片能正常稳定运行&#xff0c;浪涌测试无疑是必要的。本篇文章将全方位为你介绍浪涌电流如何产生以及如何测试的过程。 电源芯片浪涌电流的产生原因 1.开关电源切换和电压突变 在电源开…

Golang : Bson\Json互转

代码 package bson_jsonimport ("encoding/json""errors""fmt""gopkg.in/mgo.v2/bson""os""testing" )type User struct {Name string json:"name,omitempty" bson:"name,omitempty"CSD…

软件测试|MySQL主键约束详解:保障数据完整性与性能优化

简介 主键&#xff08;PRIMARY KEY&#xff09;的完整称呼是“主键约束”&#xff0c;是 MySQL 中使用最为频繁的约束。一般情况下&#xff0c;为了便于 DBMS 更快的查找到表中的记录&#xff0c;都会在表中设置一个主键。 MySQL是一种广泛使用的开源关系型数据库管理系统&am…

轻松实现Word转PPT!别说你还不知道这个办公神器!

在日常的学习和工作中&#xff0c;Microsoft Word和PowerPoint是我们最常使用的2款办公软件。Word&#xff0c;拥有出色的文字处理功能&#xff0c;让我们能够轻松编辑各种文档&#xff0c;而PowerPoint&#xff0c;可以让我们轻松地进行各种演示文稿的创建和播放。 在实际使用…

Unity 3D GridLayoutGroup3D 让子物体对齐,调整子物体间距

Unity 3D GridLayoutGroup3D 让子物体对齐&#xff0c;调整子物体间距 效果 介绍 GridLayoutGroup3D 脚本是一个用于在 Unity 3D 编辑器中创建 3D 网格布局的实用工具。主要用于在 Unity 编辑器中提供一种可视化的方式来设置和调整子物体的位置&#xff0c;同时支持删除脚本时…

BabylonJS 6.0文档 Deep Dive 摄像机(二):摄像机碰撞

摄像机、网格碰撞和重力 你玩过第一人称射击游戏(FPS)吗&#xff1f;在本教程中&#xff0c;我们将模拟FPS的摄影机移动&#xff1a;摄影机位于地板上&#xff0c;与地面碰撞&#xff0c;并可能与场景中的任何对象碰撞。 如何实现? 为了实现这一功能&#xff0c;我们必须执…

CodeWave智能开发平台--03--目标:应用创建--07供应商数据表格02

摘要 本文是网易数帆CodeWave智能开发平台系列的第10篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成07供应商数据表格下 CodeWave智能开发平台的10次接触 CodeWave参考资源 网易数帆CodeWave开发…

Hello 2024(A~D,F1)

新年坐大牢 A - Wallet Exchange 题意&#xff1a;共有俩钱包&#xff0c;每回合从其中一个钱包中拿走一块钱&#xff0c;谁拿走最后一块钱谁赢。 思路&#xff1a;奇偶讨论即可。 // Problem: A. Wallet Exchange // Contest: Codeforces - Hello 2024 // URL: https://cod…

josef 约瑟 数字式时间继电器 JS14P 0~20S AC220V 通电延时

JS14P系列时间继电器 JS14P系列数字式时间继电器是JS14、JS20等的更新换代产品采用集成电路&#xff0c;数字按键开关预置&#xff0c;它具有体积小、重量轻、精度高、寿命长、通用性强等优点&#xff0c;适用于交流50Hz&#xff0c;电压380V及以下和直流220w以下的自动控制电…

Pycharm安装numpy库失败解决办法

一、出现错误&#xff08;以matplotlib为例&#xff09;&#xff1a; 二、解决办法&#xff1a; 方法一&#xff08;失败&#xff09;&#xff1a;PyCharm中有一个安装库的方法是&#xff1a;Settings>>Python Interpreter>>点击右侧的加号 第二个图 失败原因&am…

C++每日一练(14):对称矩阵的判定

题目描述 输入矩阵的行数&#xff0c;再依次输入矩阵的每行元素&#xff0c;判断该矩阵是否为对称矩阵&#xff0c;若矩阵对称输出“yes"&#xff0c;不对称输出”no“。 输入 第一行输入一个正整数N&#xff08;N<20&#xff09;&#xff0c;表示矩阵的行数&#xff0…

深入了解pnpm:一种高效的包管理工具

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…