Vue3列表竖向滚动(包含使用swiper的翻页效果)

news2024/11/18 12:22:53

一、使用element-plus表格进行滚动:

可以满足的需求:表格一行一行竖向滚动,类似走马灯。
不能满足的需求:表格分页竖向滚动,有翻页的效果。

代码:
<template>
	<el-table
      :data="tableData"
      :show-overflow-tooltip="true"
      class="alarmTable"
    >
    <el-table-column
        type="index"
        width="134"
        align="center"
        label="序号">
        <template #default="scope">
          <span class="text">{{(scope.$index+1)+(currentPage-1)*(pageSize)}}</span>
        </template>
      </el-table-column>
      <el-table-column prop="name" label="名称" align="left">
        <template #default="scope">
          <span class="name-text">{{scope.row.name}}</span>
        </template>
      </el-table-column>
      <el-table-column prop="money" label="金钱" align="center" />
  </el-table>
</template>
<script lang="ts">
import { defineComponent, onMounted, reactive, ref, toRefs, nextTick, onUnmounted } from 'vue'

export default defineComponent({
  name: 'rank',
  setup () {
    // 表格的数据类型
    interface tableType {
      name: string;
      money: number;
    }
    const data = reactive({
      tableData: [] as Array<tableType>, // 表格的数据
      currentPage: 1, // 当前展示的页码
      pageSize: 6, // 当前表格一页展示多少条数据
      tableDom: {} as HTMLElement, // 表格内容的dom
    })
    let timeInterval: NodeJS.Timer // 定时器的对象
    let tableScroll = ref(true) // 是否需要滚动

    onMounted(() => {
      // 初始化表格的数据
      list()
      scrollTable()
    })

    onUnmounted(()=> {
      clearInterval(timeInterval)
    })

    // 初始化表格的数据
    const list = () => {
      let arr:Array<tableType> = []
      for(let i = 0; i < 28; i++) {
        let randomData = Math.floor(Math.random() * 100)
        let obj = {
          name: '名称'+randomData,
          money: randomData
        }
        arr.push(obj)
      }
      data.tableData = arr
    }
	
	  // 表格的数据滚动
    const scrollTable = () => {
      nextTick(() => {
        // 获取当前表格内容的dom
        let table = document.getElementsByClassName('alarmTable')[0]
        data.tableDom = (table.getElementsByClassName('el-scrollbar__wrap')[0])! as HTMLElement
        // 鼠标放在表格内容,暂停滚动
        data.tableDom.addEventListener('mouseover', () => {
            tableScroll.value = false
        })
        // 鼠标移出表格内容,继续滚动
        data.tableDom.addEventListener('mouseout', () => {
          tableScroll.value = true
        })
        // 
        timeInterval = setInterval(() => {
            if (tableScroll.value) {
              // 每次内容滚动的距离
              data.tableDom.scrollTop += 1
              if (data.tableDom.clientHeight + data.tableDom.scrollTop == data.tableDom.scrollHeight) {
                data.tableDom.scrollTop = 0
              }
            }
        }, 10)
      })
    }
    
    return {
      ...toRefs(data)
    }
  }
})
</script>
<style lang="scss" scoped>
.alarmTable {
    margin-top: 40px;
    height: 623px;
    overflow: hidden;
    scroll-behavior: smooth;
}
</style>
<style lang="scss">
  .el-table, .el-table::before,
  .el-table--border .el-table__inner-wrapper::after, .el-table--border::after, .el-table--border::before, .el-table__inner-wrapper::before {
    background: transparent!important;
  }
  .el-table th, .el-table__cell>.cell {
    height: 88px;
    padding: 0;
    font-size: 28px;
    font-weight: 400;
    color: #FFFFFF;
    line-height: 88px!important;
  }
  .el-table thead {
    font-size: 28px;
    font-weight: 600;
    color: #fff!important;
  }
  .el-table tr{
    background: transparent!important;
    &:nth-child(2n) {
      background:  rgba(49, 250, 233, 0.1)!important;
    }
  }
  .el-table th.el-table__cell {
    height: 88px;
    padding: 0;
    background:  rgba(237, 250, 49, 0.1)!important;
  }
  .el-table tr:hover>td {
    cursor: pointer;
    background-color: rgba(0,148,255,0.3) !important;
  }
  .el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf {
    border-bottom: none!important;
  }
</style>
效果:

在这里插入图片描述

二、使用Swiper进行滚动:

1、文档说明https://swiperjs.com/vue

2、下载swiper说明:

高版本(10.0.2)引入 Autoplay 会报错,所以我下载了7.4.1版本(npm install swiper@7.4.1

如果7.4.1版本不好用,可以参考这个文章:https://blog.csdn.net/qq_36131788/article/details/121083045

3、安装swiper成功后在 main.ts 文件中引入css:

import ‘swiper/css’
代码:
<template>
    <div class="swiper-components">
        <div class="thead">
            <div v-for="(item,index) in theadData" :key="index" class="thead-tr">{{ item }}</div>
        </div>
        <swiper
            :slides-per-view="1"
            :autoplay="{ delay: 2000, disableOnInteraction: false }"
            :direction="'vertical'"
            :scrollbar="{ draggable: false }"
            :loop="true"
            :modules="modules"
            class="swiper-content"
            >
            <swiper-slide v-for="(item, index) in tableData" :key="index">
                <div class="swiper-item" v-for="(subItem, subIndex) in item" :key="subIndex">
                    <div class="swiper-td">{{ subItem.index }}</div>
                    <div class="swiper-td">{{ subItem.name }}</div>
                    <div class="swiper-td">{{ subItem.money }}</div>
                </div>
            </swiper-slide>
            </swiper>
    </div>
  </template>

<script lang="ts">
import { defineComponent, onMounted, reactive, toRefs } from 'vue'
// 引入swiper核心和所需模块
import  {Autoplay} from 'swiper'
// 引入swiper所需要的组件
import { Swiper, SwiperSlide } from 'swiper/vue'

export default defineComponent({
  name: 'SwiperComponents',
  components: {
    Swiper,
    SwiperSlide
  },
  setup () {
    // 表格的数据类型
    interface tableType {
      index: number | string;
      name: string;
      money: number;
    }
    const data = reactive({
      tableData: [] as Array<tableType>[], // 列表需要的数据
      modules: [Autoplay], // 这个是自动播放的重点,没有这个不能自动播放!
      slidesCount: 6, // 每次滑动的数据数量
      theadData: ['序号', '名称', '金钱'] // 表格表头
    })

    onMounted(() => {
      init()
    })

    // 数据初始化
    const init = () => {
      // 首先拿到请求的数据
      let arr = []
      for (let i = 0; i < 30; i++) {
        const obj = {
          index: i + 1,
          name: '987654',
          money: Math.floor(Math.random() * 100)
        }
        arr.push(obj)
      }

      // 根据一页要展示的数量进行数据的处理
      for (let i = 0; i < arr.length; i += data.slidesCount) {
        let obj = arr.slice(i, i + data.slidesCount)
        data.tableData.push(obj)
      }
    }

    return {
      ...toRefs(data)
    }
  }
})
</script>

  <style lang="scss" scoped>
  .swiper-components {
    margin-top: 40px;
    .thead {
        display: flex;
        justify-content: space-between;
        background: rgba(49,150,250,0.1);
        padding: 24px 40px 24px 34px;
        &-tr {
            font-size: 28px;
            font-weight: 600;
            color: #FFFFFF;
            line-height: 40px;
        }
    }
    .swiper-content {
        height: 528px;
        .swiper-item {
            display: flex;
            justify-content: space-between;
            &:nth-child(2n) {
                background: rgba(49,150,250,0.1);
            }
        }
        .swiper-td {
            padding: 24px 0;
            font-size: 28px;
            font-weight: 400;
            color: #FFFFFF;
            line-height: 40px;
            &:first-child {
                width: 134px;
                text-align: center;
            }
            &:last-child {
                width: 140px;
                margin-right: 40px;
                text-align: center;
            }
        }
    }
  }
  </style>

效果:

在这里插入图片描述

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

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

相关文章

【LeetCode-中等题】236. 二叉树的最近公共祖先

文章目录 题目方法一&#xff1a;后序遍历 回溯 题目 方法一&#xff1a;后序遍历 回溯 解题的核心就是&#xff1a;采用后序遍历 讨论p&#xff0c;q是否在当前的root的两边&#xff0c;如在两边则返回当前节点root 如何不在两边&#xff0c;只要出现一个节点等于p或者q就…

怎么让模糊的图片变清晰?试试这几招吧

有时候我们自己拍摄的照片或者是从网上下载的壁纸、头像背景等&#xff0c;应用的时候觉得这个画质怎么这么模糊&#xff0c;这种图片模糊的情况应该怎么办呐&#xff1f;其实借助专业有效的修复工具&#xff0c;我们就可以快速将模糊的图片变清晰了&#xff0c;今天就给大家介…

YOLO目标检测——人脸属性识别数据集下载分享

人脸多种属性、关键点标注数据集&#xff0c;包含了10000张脸&#xff0c;其中7500用于训练&#xff0c;2500张用于测试&#xff0c;共98个关键点。除了关键点之外&#xff0c;还有遮挡&#xff0c;姿态&#xff0c;妆容&#xff0c;光照&#xff0c; 模糊和表情等多种属性信息…

【LeetCode算法系列题解】第16~20题

CONTENTS LeetCode 16. 最接近的三数之和&#xff08;中等&#xff09;LeetCode 17. 电话号码的字母组合&#xff08;中等&#xff09;LeetCode 18. 四数之和&#xff08;中等&#xff09;LeetCode 19. 删除链表的倒数第N个节点&#xff08;中等&#xff09;LeetCode 20. 有效的…

java八股文面试[多线程]——Happens-Before规则

TODO 知识来源&#xff1a; 【23版面试突击】你知道什么是 happens-before 原则吗&#xff1f;_哔哩哔哩_bilibili 【2023年面试】Happens-Before规则是什么_哔哩哔哩_bilibili

优维×国信共研:双态交付助力国信证券持续交付更上层楼!

传统持续交付模式束缚&#xff0c;国信证券开启自主研发之路 在日益复杂的业务环境下&#xff0c;传统持续交付模式已经无法满足快速变化的需求。国信证券积极应对这一挑战&#xff0c;勇敢创新&#xff0c;突破交付瓶颈&#xff0c;实现了双态应用的持续交付新高度。 共研优…

任意文件读取

文章目录 渗透测试漏洞原理任意文件读取1. 任意文件读取概述1.1 漏洞成因1.2 漏洞危害1.3 漏洞分类1.4 任意文件读取1.4.1 文件读取1.4.2 任意文件读取1.4.3 权限问题 1.5 任意文件下载1.5.1 一般情况1.5.2 PHP实现1.5.3 任意文件下载 2. 任意文件读取攻防2.1 路径过滤2.1.1 过…

44、基于 AOP 的错误处理,相当于异常拦截处理

基于 springboot 自动配置的 spring mvc 错误处理&#xff0c;就是演示项目报错后&#xff0c;跳转到自定义的错误页面 ★ 两种错误处理方式 方式一&#xff1a; 基于Spring Boot自动配置的错误处理方式&#xff0c;只要通过属性文件即可配置错误处理行为。 提供自定义的错误…

C++ : implicit instantiation of undefined template ‘std::vector<_******>‘

编译报错 implicit instantiation of undefined template ‘std::vector<_struFontMap>’ 需要 #include add vector class

Windows安装单节点Zookeeper

刚学习Dubbo&#xff0c;在Centos7中docker安装的zookeeper3.7.1。然后在启动provider时一直报错&#xff0c;用尽办法也没有解决。然后zookeeper相关的知识虽然以前学习过&#xff0c;但是已经忘记的差不多了。现在学习dubbo只能先降低版本使用了&#xff0c;之后再复习zookee…

第二篇: libyuv的编译

一、前言 DirectShow采集出来的视频, 采集格式(例如: mjepg)和我们需要的视频格式(i420)并不一致&#xff0c;因此需要解码 二、libyuv下载 git clone https://chromium.googlesource.com/external/libyuv 三、libjpeg-turbo下载 git clone https://github.com/libjpeg-tu…

北斗三代PPP-B2b解算非组合PPP分析

下面进行了北斗三代PPP-B2b非组合PPP-B2b定位的初步结果&#xff08;具体结果参考图片红色字体&#xff0c;不要看坐标轴标注或者标题&#xff09;&#xff1a; 参考文献&#xff1a; 1、https://blog.csdn.net/qq_40056060/article/details/119107531目录系列文章目录前言一、…

基于Spring Boot的高校二手物品售卖网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的高校二手物品售卖网站设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java sp…

你需要了解的有关计算机电源的所有信息

电源单元是将插座提供的电源转换为计算机机箱内许多部件的可用电源的硬件。 它将墙上插座的交流电转换为计算机组件所需的直流电。它还通过控制电压来调节过热&#xff0c;电压可能会根据电源自动或手动变化。 电源是一个关键部件&#xff0c;因为没有它&#xff0c;其他内部…

Deepin 图形化部署 Hadoop Single Node Cluster

Deepin 图形化部署 Hadoop Single Node Cluster 升级操作系统和软件 快捷键 ctrlaltt 打开控制台窗口 更新 apt 源 sudo apt update更新 系统和软件 sudo apt -y dist-upgrade升级后建议重启 开启ssh服务 打开资源管理器 进入系统盘 找到 etc 目录 在系统盘的 etc 目录上 右键…

OceanBase安全审计之传输加密

上一期我们讲了关于 OceanBase 安全审计的《身份鉴别》和《用户管理与访问控制》 两个部分&#xff0c;OceanBase 的安全机制介绍其支持传输加密&#xff0c;今天我们主要来实践一下如何配置传输加密以及验证是否真的加密。 作者&#xff1a;金长龙 爱可生测试工程师&#xff0…

Docker安装OpenWAF

Docker安装OpenWAF 官方GitHub地址 介绍 OpenWAF&#xff08;Web Application Firewall&#xff09;是一个开源的Web应用防火墙&#xff0c;用于保护Web应用程序免受各种网络攻击。它通过与Web服务器集成&#xff0c;监控和过滤对Web应用程序的流量&#xff0c;识别和阻止潜…

Vue中使用qrcode实现渲染二维码中间添加自定义logo-demo

效果 使用 import QRCode from qrcode; 具体生成过程 <template><div class"banner-login"><img :src"qrDataUrl" /></div> </template><script setup> import { ref, reactive } from vue; import QRCode from q…

Caffine和Guava的refreshAfterWrite的异同

背景: guava和caffine的refreshAfterWrite方法在用于本地缓存的场景是非常常用的&#xff0c;本文通过例子列举下caffine的refreshAfterWrite方法和guava的refreshAfterWrite的相同点和不同点 相同点/不同点&#xff1a; 以下都是使用keyXYZ作为例子 场景1&#xff1a;一开…

Linux网络编程:select函数的用法和原理

Linux网络编程&#xff1a;select函数的用法和原理 Linux上的select函数 select函数用于检测一组socket中是否有事件就绪.这里的事件为以下三类: 读事件就绪 在socket内核中,接收缓冲区中的字节数大于或者等于低水位标记SO_RCVLOWAT,此时调用rec或read函数可以无阻塞的读取该…