Vue3中使用无缝滚动插件vue3-seamless-scroll

news2024/11/24 18:37:16

官网:https://www.npmjs.com/package/vue-seamless-scroll

1、实现效果文字描述:

表格中的列数据进行横向无缝滚动,某一列进行筛选的时候,重新请求后端的数据,进行刷新

2、安装:npm i vue3-seamless-scroll --save

3、在组件内使用:

在这里插入图片描述
在这里插入图片描述

4、完整代码:

<template>
  <a-spin :spinning="spinning">
    <a-table :dataSource="tableData" :columns="columns" :pagination="false" :showSorterTooltip="false" @change="handleTableChange">
      <template #bodyCell="{ column, record, index }">
          <!-- 索引列 -->
          <template v-if="column.key === 'index'">
            <div class="key">{{ index + 1 }}</div>
          </template>
          <template v-if="column.key === 'name'">
            <div class="td-style">
              <Vue3SeamlessScroll :list="(record.name || '').split('')" :step="1" :hover="true" direction="left">
                <span>{{ record.name }}</span>
              </Vue3SeamlessScroll>
            </div>
          </template>
          <!-- <template v-if="column.key === 'age'">
            <div class="td-style">
              <div :class="record.age.toString().length > 10 ? 'scrollLeft' : ''">{{ record.age }}</div>
            </div>
          </template> -->
          <template v-if="column.key === 'age'">
            <div class="td-style">
              <Vue3SeamlessScroll :list="tableData" :step="1" direction="left">
                <span v-for="(item,index) in tableData" :key="index">{{ item.age }}</span>
              </Vue3SeamlessScroll>
            </div>
          </template>
      </template>
    </a-table>
  </a-spin>
</template>

<script lang="ts">
import { defineComponent, onMounted, reactive, toRefs } from 'vue'
// 引入无缝滚动组件
import { Vue3SeamlessScroll }  from 'vue3-seamless-scroll'

export default defineComponent({
  name: 'defineComponent',
  components: {
    Vue3SeamlessScroll
  },
  setup () {
    interface DataItem {
      key: number|string;  // 这个是必须的,不然会引起错误,比如数据不更新
      name: string;
      age: number;
    }

    const data = reactive({
      tableData: [] as DataItem[],
      columns: [{
        title: '序号',
        key: 'index',
        width: 150,
        align: 'center',
      },
      {
        title: '姓名',
        dataIndex: 'name',
        key: 'name'
      },
      {
        title: '年龄',
        dataIndex: 'age',
        key: 'age',
        sorter: {
          compare: (a: DataItem, b: DataItem) => a.age - b.age,
          multiple: 3, // 多列优先级
        },
      }],
      spinning: true
    })
    
    onMounted(() => {
      init()
    })

    // 数据初始化
    const init = () => {
      data.tableData = [{
        key: '1',
        name: '这是第一个这是第一个',
        age: 11111111166
      },{
        key: '2',
        name: '这是第2个这是第2个这是第2个',
        age: 22222222233
      },{
        key: '3',
        name: '三三三三三三',
        age: 33333335555
      },{
        key: '4',
        name: 'sisisisissisisisissi',
        age: 444444446666
      }]
      data.spinning = false
    }

    const handleTableChange = (
      pag: { pageSize: number; current: number },
      filters: any,
      sorter: any,
    ) => {
      data.spinning = true
      data.tableData = [{
        key: '5', // 这个是必须的
        name: '213456789123456789',
        age: 0
      },{
        key: '6',
        name: '213456789123456789',
        age: 8469955
      },{
        key: '7',
        name: '213456789123456789',
        age: 898456
      },{
        key: '8',
        name: '213456789123456789',
        age: 256667777777
      }]
      data.spinning = false
    }

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

<style>
  .ant-table-thead > tr > th {
    font-size: 48px;
  }
  .ant-table-tbody > tr > td {
    font-size: 32px;
  }
  .td-style {
    width: 200px;
    overflow: hidden;
    white-space: nowrap;
    font-size: 26px;
  }
  .ant-table-column-sorter-up, .ant-table-column-sorter-down {
    font-size: 32px!important;
  }
  .scrollLeft {
    animation: scrollLeft 5s linear infinite;
  }
   /* 定义动画 */
  @keyframes scrollLeft {
    0% {
      transform: translateX(50);
    }
    100% {
      transform: translateX(calc(-100%)); /* 加上一些额外的空白,以便滚动到最后一个元素时不会立即切换 */
    }
  }
</style>

5、效果:

在这里插入图片描述

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

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

相关文章

从Kafka的可靠性设计体验软件设计之美

目录 1. Kafka可靠性概述 2. 副本剖析 2.1 什么是副本 2.2 副本失效场景 2.3 数据丢失场景 2.4 解决数据丢失方案 3. 日志同步机制 4. 可靠性分析 1. Kafka可靠性概述 Kafka 中采用了多副本的机制&#xff0c;这是大多数分布式系统中惯用的手法&#xff0c;以此来实现水平扩…

异步日志方案spdlog

异步日志方案spdlog spdlog 是一款高效的 C 日志库&#xff0c;它以其极高的性能和零成本的抽象而著称。spdlog 支持异步和同步日志记录&#xff0c;提供多种日志级别&#xff0c;并允许用户将日志输出到控制台、文件或自定义的接收器。 多线程使用和同步、异步日志没有关系是…

10.接口自动化测试学习-Pytest框架(2)

1.mark标签 如果在每一个模块&#xff0c;每一个类&#xff0c;每一个方法和用例之前都加上mark标签&#xff0c;那么在pytest运行时就可以只运行带有该mark标签的模块、类、接口。 这样可以方便我们执行自动化时&#xff0c;自主选择执行全部用例、某个模块用例、某个流程用…

indexDB 大图缓存

背景 最近在项目中遇到了一个问题&#xff1a;由于大屏背景图加载速度过慢&#xff0c;导致页面黑屏时间过长&#xff0c;影响了用户的体验。从下图可以看出加载耗时将近一分钟 IndexDB 主要的想法就是利用indexDB去做缓存&#xff0c;优化加载速度&#xff1b;在这之前&am…

自动驾驶传感器篇: GNSSIMU组合导航

自动驾驶传感器篇&#xff1a; GNSS&IMU组合导航 1.GNSS1.1 GNSS 系统概述1.2 GNSS系统基本组成1. 空间部分&#xff08;Space Segment&#xff09;&#xff1a;2. 地面控制部分&#xff08;Ground Control Segment&#xff09;&#xff1a;3. 用户设备部分&#xff08;Use…

python爬虫-----深入了解 requests 库下篇(第二十六天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

电影交流|基于SprinBoot+vue的电影交流平台小程序系统(源码+数据库+文档)

电影交流平台目录 目录 基于SprinBootvue的电影交流平台小程序系统 一、前言 二、系统设计 三、系统功能设计 1用户信息管理 2 电影信息管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取…

Oracle delete删除数据是否为逻辑删除、新插入数据占用的数据块位置实验

假设一&#xff1a;数据库delete删除为直接删除 假设二&#xff1a;数据库delete删除为逻辑删除&#xff0c;在数据块标记出来&#xff0c;但是实际并没有删除。 方式一&#xff1a;通过dump数据块的方式来实现 我们先用小数据量&#xff0c;通过dump数据块的方式来实现 -- 数…

Activity界面什么都不显示怎么解决

如图&#xff0c;有可能是你重写错了方法&#xff0c;两个onCreate方法非常像&#xff0c;参数不同&#xff0c;正确方法如下&#xff1a;

003基于SSM的学生选课系统(学生信息管理系统)ssm+mysql

003基于SSM的学生选课系统/学生信息管理系统 开发环境&#xff1a; Eclipse/MyEclipse、Tomcat8、Jdk1.8 数据库&#xff1a; MySQL 前端&#xff1a;JavaScript、jQuery、bootstrap4、particles.js 后端&#xff1a;maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybat…

共享购:融合社交分享与消费返利的创新电商模式

共享购电商模式是一种独特的商业模式&#xff0c;巧妙地将社交分享与消费返利结合&#xff0c;让消费者在购物的同时&#xff0c;也能通过平台资产奖励实现价值的双重增长。该平台资产体系主要由共享值和共享积分两大要素构成&#xff0c;共同构建了一个充满活力的电商生态系统…

C++中布隆过滤器

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

【网络原理】TCP协议的连接管理机制(三次握手和四次挥手)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

Linux的FTP服务

目录 1.什么是FTP服务&#xff1f; 2.FTP的工作原理和流程 1 主动模式 2 被动模式 3.搭建和配置FTP服务 1 下载服务包、备份配置文件 2 修改配置文件​编辑 3 匿名访问测试 4 设置黑白命令 1.什么是FTP服务&#xff1f; FTP&#xff08;file Transfer Protocol&#…

Baidu comate智能编程助手评测

Baidu comate智能编程助手评测 作者&#xff1a;知孤云出岫 目录 一&#xff0e; 关于comate产品 二&#xff0e; 关于comate产品体验 三&#xff0e; 关于实际案例. 四&#xff0e; 关于baidu comate编程助手的实测体验感悟 五&#xff0e; …

(三)登录和注册(handle_auto.go)

登录和注册(handle_auto.go) 文章目录 登录和注册(handle_auto.go)一、所需要的结构体信息二、注册三、登录四、退出 一、所需要的结构体信息 type UserAuth struct{}type LoginReq struct {Username string json:"username" binding:"required"Password …

面试经典150题——求根节点到叶节点数字之和

​ 1. 题目描述 2. 题目分析与解析 2.1 思路一——DFS 理解问题&#xff1a; 首先要理解题目的要求&#xff0c;即对于给定的二叉树&#xff0c;我们需要找出从根节点到所有叶子节点的所有路径&#xff0c;然后将每一条路径上的数字组成一个整数&#xff0c;最后求出这些整数…

【静态分析】静态分析笔记08 - 指针分析 - 上下文敏感

参考&#xff1a; 【课程笔记】南大软件分析课程8——指针分析-上下文敏感&#xff08;课时11/12&#xff09; - 简书 ------------------------------------------------------------------------------------------------------------- 1. 上下文不敏感的问题 说明&#…

最详细步骤解决:Apps targeting Android12 and higher are required to specify...

问题原因&#xff1a; 当targetSdkVersion>31时&#xff0c;需要在AndroidManifest.xml中配置android:exported的值&#xff0c;该值为boolean类型。 android:exported解释&#xff1a; activity 是否可由其他应用的组件启动&#xff1a; 如果设为 "true"&#…

python中开发页面的两种方法:Qt Designer(PyQt图形化界面拖拽开发App界面)以及Django(开发Web应用框架)

一、开发独立的窗口&#xff0c;App的那种&#xff0c;可使用tkinter或者PyQt 使用PyQt时&#xff0c;里面有个工具Qt Designer&#xff0c;是一个可视化的界面设计工具&#xff0c;可以通过拖拽等方式来设计界面。下面就是Qt Designer的操作界面&#xff1a; 参考链接如下&am…