vue3实现无缝滚动列表-vue3-seamless-scroll

 

vue3-seamless-scroll-无缝滚动

        vue3-seamless-scroll,顾名思义是应用在vue3项目中,在Vue3项目中难免会遇到让列表无缝滚动的需求,本篇文章介绍了关于vue3项目中如何实现表格内容无缝滚动及其属性的使用,需要的朋友可以参考一下。
        官网介绍:支持Vite2.0,支持服务端打包,目前组件支持上下左右无缝滚动,单步滚动,并且支持复杂图标的无缝滚动,目前组件支持平台与Vue3.0支持平台一致。

vue3-seamless-scroll 官网

vue2项目中使用-vue-seamless-scroll,参考文档请见:vue实现循环滚动列表-vue-seamless-scroll

一、安装

  •  npm
        npm install vue3-seamless-scroll --save
  • Yarn
        yarn add vue3-seamless-scroll
  • browser
<script src="https://unpkg.com/browse/vue3-seamless-scroll@1.0.2/dist/vue3-seamless-scroll.min.js"></script>

 

二、组件配置

### list

无缝滚动列表数据,组件内部使用列表长度。

type: Array

required: true

### v-model

通过v-model控制动画滚动与停止,默认开始滚动

type: Boolean,

default: true,

required: false

### direction

控制滚动方向,可选值up,down,left,right

type: String,

default: “up”,

required: false

### isWatch

开启数据更新监听

type: Boolean,

default: true,

required: false

### hover

是否开启鼠标悬停

type: Boolean,

default: false,

required: false

### count

动画循环次数,默认无限循环

type: Number,

default: “infinite”,

required: false

### limitScrollNum

开启滚动的数据量,只有列表长度大于等于该值才会滚动

type: Number,

default: 5,

required: false

### step

步进速度

type: Number,

required: false

### singleHeight

单步运动停止的高度

type: Number,

default: 0,

required: false

### singleWidth

单步运动停止的宽度

type: Number,

default: 0,

required: false

### singleWaitTime

单步停止等待时间(默认值 1000ms)

type: Number,

default: 1000,

required: false

### isRemUnit

singleHeight and singleWidth 是否开启 rem 度量

type: Boolean,

default: true,

required: false

### delay

动画延时时间

type: Number,

default: 0,

required: false

### ease

动画效果,可以传入贝塞尔曲线数值

type: String | cubic-bezier,

default: “ease-in”,

required: false

### copyNum

拷贝列表次数,默认拷贝一次,当父级高度大于列表渲染高度的两倍时可以通过该参数控制拷贝列表次数达到无缝滚动效果

type: Number,

default: 1,

required: false

### wheel

在开启鼠标悬停的情况下是否开启滚轮滚动,默认不开启

type: boolean,

default: false,

required: false

### singleLine

启用单行横向滚动

type: boolean,

default: false,

required: false

注意项

        需要滚动的列表所在容器必须设置样式 overflow: hidden;

三、使用 

    1. 注册组件

  • 全局注册
// **main.js**
  import { createApp } from 'vue';
  import App from './App.vue';
  import vue3SeamlessScroll from "vue3-seamless-scroll";
  const app = createApp(App);
  app.use(vue3SeamlessScroll);
  app.mount('#app');
  • 单个.vue文件局部注册
<script>
  import { defineComponent } from "vue";
  import { Vue3SeamlessScroll } from "vue3-seamless-scroll";
   export default defineComponent({
      components: {
        Vue3SeamlessScroll
      }
   })
</script>

    2. 使用组件 

        (这里直接是封装了一个独立的组件(假数据),有需要的可以直接拿走使用)

<!-- 动态上下翻滚的表格 -->
<template>
  <div class="table-wrap">
    <div class="titleContent">
      <div class="tit">日期</div>
      <div class="tit">开始时间</div>
      <div class="tit">结束时间</div>
      <div class="tit">应到人数</div>
      <div class="tit">实到人数</div>
      <div class="tit">实到占比</div>
    </div>

    <!-- 配置详情请见 README.md -->
    <vue3-seamless-scroll
      :list="periodDataList"
      class="scroll"
      direction="up"
      :step="0.9"
      :hover="true"
      :limit-scroll-num="7"
      :is-watch="true"
      :single-height="0"
      :single-width="0"
      :single-wait-time="1000"
      :wheel="false"
    >
      <div class="countContent" v-for="(item, i) in periodDataList" :key="i">
        <div class="descr">{{ item.dateTime }}</div>
        <div class="descr">{{ item.startTime }}</div>
        <div class="descr">{{ item.endTime }}</div>
        <div class="descr">{{ item.shouldArriveNumber }}</div>
        <div class="descr">{{ item.actualAttendance }}</div>
        <div class="descr">{{ item.bl }}</div>
      </div>
    </vue3-seamless-scroll>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";

const periodDataList = ref<any>([
  {
    dateTime: "2022-05-03",
    startTime: "2022-05-03",
    endTime: "2022-05-03",
    shouldArriveNumber: "1",
    actualAttendance: "100",
    bl: "10%"
  },
  {
    dateTime: "2022-05-03",
    startTime: "2022-05-03",
    endTime: "2022-05-03",
    shouldArriveNumber: "2",
    actualAttendance: "200",
    bl: "10%"
  },
  {
    dateTime: "2022-05-03",
    startTime: "2022-05-03",
    endTime: "2022-05-03",
    shouldArriveNumber: "3",
    actualAttendance: "300",
    bl: "10%"
  },
  {
    dateTime: "2022-05-03",
    startTime: "2022-05-03",
    endTime: "2022-05-03",
    shouldArriveNumber: "4",
    actualAttendance: "400",
    bl: "10%"
  },
  {
    dateTime: "2022-05-03",
    startTime: "2022-05-03",
    endTime: "2022-05-03",
    shouldArriveNumber: "5",
    actualAttendance: "500",
    bl: "10%"
  },
  {
    dateTime: "2022-05-03",
    startTime: "2022-05-03",
    endTime: "2022-05-03",
    shouldArriveNumber: "6",
    actualAttendance: "600",
    bl: "10%"
  },
  {
    dateTime: "2022-05-03",
    startTime: "2022-05-03",
    endTime: "2022-05-03",
    shouldArriveNumber: "7",
    actualAttendance: "700",
    bl: "10%"
  },
  {
    dateTime: "2022-05-03",
    startTime: "2022-05-03",
    endTime: "2022-05-03",
    shouldArriveNumber: "8",
    actualAttendance: "800",
    bl: "10%"
  }
]);
</script>

<style lang="scss" scoped>
.table-wrap {
  width: 100%;

  // padding: 0 20px;
  color: #ffffff;
  .scroll {
    max-height: 278px;
    overflow: hidden;
  }
}
.titleContent {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 40px;
  .tit {
    flex: 0 0 16.6%;
    text-align: center;
  }
}
.countContent {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  width: 100%;
  font-size: 14px;
  .descr {
    flex: 0 0 16%;
    padding: 10px 0;
    text-align: center;
  }
}
.countContent:nth-of-type(odd) {
  background: #318699 !important;
  .descr {
    border-right: 1px solid #247587;
  }
}
</style>

 效果:

vue3-seamless-scroll-无缝滚动

 

 

### Vue3实现列表自动滚动并带有绚丽动画效果 在 Vue3 应用程序中创建具有自动滚动功能且视觉上吸引人的列表,可以利用 `transition-group` 和 CSS 动画来完成。下面是一个详细的指南以及如何使这种体验更加生动。 #### 使用 transition-group 创建基础的列表动画 对于列表项的变化,Vue 提供了 `<transition-group>` 标签用于处理元素进入和离开时的状态转换。这允许开发者定义自定义样式或类名以便更好地控制这些时刻发生的任何视觉反馈[^1]。 ```html <template> <ul class="list"> <transition-group name="slide-fade" tag="div"> <li v-for="(item, index) in items" :key="index">{{ item }}</li> </transition-group> </ul> </template> <script setup> import { ref } from &#39;vue&#39;; const items = ref([&#39;Item A&#39;, &#39;Item B&#39;, &#39;Item C&#39;]); setInterval(() => { const first = items.value.shift(); if (first !== undefined) items.value.push(first); }, 2000); // 自动滚动间隔时间设置为两秒 </script> <style scoped> .list li { display: block; } .slide-fade-enter-active, .slide-fade-leave-active { transition: all .5s ease-out; } .slide-fade-enter-from, .slide-fade-leave-to { transform: translateX(20px); opacity: 0; } </style> ``` 这段代码展示了基本的滑入/滑出效果;然而,要达到更复杂、更具吸引力的结果,则需进一步探索CSS3 的潜力[^2]。 #### 增强动画效果至更高层次 为了增加更多维度上的互动性和美感,可以通过引入三维变换和其他高级特性如透视(perspective),旋转(transform: rotateY())等方法让页面元素呈现出空间感十足的动作序列。这里给出一个例子: ```css /* 添加到之前的 style 部分 */ @keyframes spinAround { from { transform: perspective(800px) rotateY(0deg); } to { transform: perspective(800px) rotateY(-360deg); } } .spin-item { animation-name: spinAround; animation-duration: 4s; animation-timing-function: linear; animation-iteration-count: infinite; } ``` 将 `.spin-item` 类应用到特定项目上即可看到连续不断的翻转动作。当然这只是冰山一角——实际上可以根据需求调整参数甚至组合多种不同类型的动画以创造出独一无二的效果。 #### 结合 hover 进行动态交互设计 为了让用户体验更为流畅自然,在某些情况下可能还需要考虑用户的即时操作行为所带来的影响。例如当用户悬停于某个按钮之上时触发额外的过渡效果能够有效提升界面友好度[^3]。 ```scss button:hover::after { content: &#39;&#39;; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba($color: #fff, $alpha: 0.7); z-index: -1; /* 平滑渐变 */ transition-property: transform; transition-duration: 0.3s; transition-timing-function: cubic-bezier(.4, 0, .2, 1); transform-origin: center; transform: scale(1); &:active { transform: scale(0.95); } } ``` 上述 SCSS 片段描述了一个简单的放大缩小反应机制,它会在按下期间轻微收缩再恢复原状,给人一种触觉响应的感觉。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值