无限滚动表格

news2024/10/7 8:20:12

纵向无限滚动
单元格内部横向滚动
在这里插入图片描述

<!--
 * @Description: 横向、纵向滚动表格
 * @Author: liyanfeng liyanfeng@hopewind.com
 * @Date: 2024-06-15 16:06:57
 * @LastEditors: liyanfeng liyanfeng@hopewind.com
 * @LastEditTime: 2024-06-20 17:15:37
 * @FilePath: \plus-ui\src\components\ScrollTable\index.vue
 * Copyright 2024 Shenzhen Hopewind Electric Co., Ltd, All RightsReserved. 
-->
<template>
  <div class="scroll-table">
    <div class="scroll-table-header">
      <div
        v-for="item in header"
        :key="item.props"
        class="scroll-table-header-item"
        :style="{ width: item.width }"
        >{{ item.name }}</div
      >
    </div>
    <div class="scroll-table-body">
      <div class="scroll-table-body-content" :class="{ bodyScroll }">
        <div class="content-item" v-for="item in scrollData" :key="item.id">
          <div
            class="content-cell"
            v-scroll
            v-for="col in header"
            :key="col.props"
            :style="{ width: col.width }"
          >
            <div class="content-scroll">
              <template v-if="col.slot">
                <slot :name="col.slot" :scope="item"></slot>
              </template>
              <template v-else>
                {{ item[col.props] || '--' }}
              </template>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script setup lang="ts">
  import type { Header } from './types';

  interface Props {
    header: Header[];
    data: any;
    bodyScroll?: boolean; // 是否纵向滚动
    height?: number; // 高度
    listNum?: number; // 每页数据量
  }
  const prop = defineProps<Props>();

  const scrollData = computed(() => {
    return prop.data.concat(prop.data.slice(0, prop.listNum || 7));
  });

  const vScroll = {
    mounted: (el: HTMLElement) => {
      if (el.scrollWidth !== el.clientWidth) {
        el.classList.add('content-scroll-father');
      }
    },
  };

  // 纵向滚动距离
  const scrollHeight = computed(() => {
    return ((prop.height || 280) / 1080) * 100 + 'vh';
  });
</script>

<style lang="scss" scoped>
  .scroll-table {
    width: 100%;
    height: 100%;
    color: #fff;
  }
  .scroll-table-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    background: rgba(255, 255, 255, 0.1);
    font-size: vw(16);
    color: #a8bfcf;
    height: vh(40);
    &-item {
      text-align: center;
    }
  }
  .scroll-table-body {
    width: 100%;
    height: calc(100% - vh(40));
    font-size: vw(14);
    overflow: hidden;
  }
  .scroll-table-body-content {
    width: 100%;
  }

  .bodyScroll {
    animation: bodyScroll 20s linear infinite;
    &:hover {
      animation-play-state: paused;
    }
  }
  @keyframes bodyScroll {
    0% {
      transform: translateY(0);
    }
    100% {
      transform: translateY(
        calc(-100% + v-bind(scrollHeight))
      ); // 向上偏移自身高度的100% 再减去首屏高度
    }
  }
  .content-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: vh(40);
    line-height: vh(40);
    color: '#A8BFCF';
    .content-cell {
      white-space: nowrap;
      overflow: hidden;
      text-align: center;
    }
    .content-scroll-father .content-scroll {
      width: max-content;
      animation: cellScroll 5s linear infinite;
    }

    &:nth-child(even) {
      background: rgba(255, 255, 255, 0.1);
    }
  }

  @keyframes cellScroll {
    0% {
      transform: translateX(0);
    }
    100% {
      transform: translateX(-100%); // 向左偏移自身宽度
    }
  }
</style>

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

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

相关文章

为什么要选择华为 HCIE-Security 课程?

2020 年我国网络安全市场规模达到 680 亿元&#xff0c;同比增长 25%。随着对网络安全的愈加重视及布局&#xff0c;市场规模将持续扩大。 近年来&#xff0c;随着“云大物工移智”等新兴技术的快速发展和普及应用&#xff0c;数字化已经融入社会经济生活的方方面面&#xff0c…

数据结构与算法笔记:高级篇 - 拓扑排序:如何确定代码源文件的编译依赖关系?

概述 从本章开始&#xff0c;就开始进入高级篇。相对基础篇&#xff0c;高级篇涉及的知识比较零散&#xff0c;不是太系统。所以&#xff0c;我会围绕一个实际软件开发的问题&#xff0c;在阐述具体解决方法的过程中&#xff0c;将涉及的知识点给你详细讲解出来。 所以&#…

人工智能在空间转录组学领域的最新研究进展|顶刊速递·24-06-22

小罗碎碎念 本期推文的主题&#xff1a;人工智能在空间转录组学领域的最新进展 提到空间转录组学就不可避免会与单细胞测序、免疫治疗以及肿瘤微环境扯上关系&#xff0c;所以这也是当下的热点之一。 我个人认为这一部分门槛相对于影像组学和病理组学较高&#xff0c;需要具备…

二维码美化,修改二维码颜色样式,添加logo,文字描述

在如今的社会&#xff0c;二维码已成为我们日常生活中不可或缺的一部分&#xff0c;无论是支付、访问网站、社交媒体互动&#xff0c;还是分享信息&#xff0c;二维码都扮演着重要角色。然而&#xff0c;标准的黑白二维码有时可能显得过于单调&#xff0c;缺乏吸引力。为了提升…

心明眼亮 洞悉万物

如何洞悉事物的本质呢&#xff1f; 阳明先生&#xff1a;世间之事&#xff0c;纷繁复杂&#xff0c;不可能一一研究得过来。 圣人只需要把内心的明镜擦亮&#xff0c;而无需担心外部的事事物物在镜子中如何映照。 —— 外界事物是无穷无尽的&#xff0c;永远探究不完&#xf…

jsp-curd+分页倒导航案例

效果图 <!DOCTYPE html> <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <html lang"en"> <head><meta charset"UTF-8"><title>学生管理</…

前后端交互的弯弯绕绕

前后端交互&#xff1a; &#x1f197;&#xff0c;收拾一下心情让我们来聊一聊AJax吧&#xff0c;随着前端的飞速发展&#xff0c;前后的交互也发生了天翻地覆的变化&#xff1a; 前后端交互的方式有很多&#xff1a; AJAX、表单提交、WebSocket、RESTful API、... 这对新入…

基于SpringBoot+大数据城市景观画像可视化设计和实现

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

Linux中部署MySQL环境(本地安装)

进入官网&#xff1a;http://www.mysql.com 选择社区版本得到MySQL 选择对应的版本和系统进行安装 用wget进行软件包下载 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.32-1.el9.x86_64.rpm-bundle.tar解压该软件包 tar -xf mysql-8.0.32-1.el9.x86_64.rpm-bu…

【Linux基础】SSH登录

SSH简介 安全外壳协议&#xff08;Secure Shell Protocol&#xff0c;简称SSH&#xff09;是一种加密的网络传输协议&#xff0c;可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。 SSH最常见的用途是远程登…

C语言 | Leetcode C语言题解之第166题分数到小数

题目&#xff1a; 题解&#xff1a; struct HashMapNode {int key;int val;UT_hash_handle hh; };struct HashMapNode* hashMap NULL;int hashMapAdd(int key, int val) {struct HashMapNode* node;HASH_FIND_INT(hashMap, &key, node);if(node ! NULL){return node->…

MySQL存储管理(一):删数据

从表中删除数据 从表中删除数据&#xff0c;也即是delete过程。 什么是表空间 表空间可以看做是InnoDB存储引擎逻辑结构的最高层&#xff0c;所有的数据都存放在表空间中。默认情况下&#xff0c;InnoDB存储引擎有一个共享表空间idbdata1&#xff0c;即所有数据都存放在这个表…

力扣SQL50 各赛事的用户注册率 分组计数 双排序字段

Problem: 1633. 各赛事的用户注册率 &#x1f468;‍&#x1f3eb; 参考题解 Code select contest_id, ROUND(COUNT(user_id) * 100 / (select count(*) from users),2) as percentage from register group by contest_id order by percentage desc, contest_id asc

Simulink添加自己的库,并给库添加子库

直接看官网教程&#xff0c;不要看残缺的大道法则 https://ww2.mathworks.cn/help/simulink/ug/adding-libraries-to-the-library-browser.html 文中涉及一个 属性检查器 在这里。

Day13-Spark SQL的学习

Spark SQL的学习 一.Spark SQL基础 二.Spark SQL整合hive 文章目录 Spark SQL的学习一、Spark SQL基础Spark SQL介绍DataFrame和DataSetSpark SQL的基本使用Spark SQL基本使用案例 Spark SQL函数内置函数自定义函数窗口&#xff08;开窗&#xff09;函数 二、Spark SQL整合Hiv…

ArcGIS arcpy代码工具——批量要素裁剪栅格影像

系列文章目录 ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改 ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片 ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板 ArcGIS arcpy代码工具——定制属性表字段输出表格 ArcGIS arc…

容器之笔记本构件演示

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>void rotate_book(GtkButton *button, GtkNotebook *notebook) {gtk_notebook_set_tab_pos(notebook, (notebook…

MySQL进阶——SQL优化

目录 1插入数据 1.1 insert 1.2大批量插入数据 2主键优化 3 order by 优化 4 group by 优化 5 limit 优化 6 count 优化 6.1概述 6.2 count用法 7 update优化 1插入数据 1.1 insert 优化方案主要有3种 批量插入数据 Insert into tb_test values(1,Tom),(2,Cat)…

详解 ClickHouse 的副本机制

一、简介 副本功能只支持 MergeTree Family 的表引擎&#xff0c;参考文档&#xff1a;https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/ ClickHouse 副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#…