实现在v-for的Div里面列表循环滚动效果

引言

在Web开发中,列表循环滚动效果是一种常见的UI设计,尤其在展示新闻、公告或者商品列表时。Vue.js作为当前流行的前端框架,提供了灵活的方式来实现这种效果。本文将介绍两种在Vue中实现列表循环滚动的方法:一种是使用现成的插件vue-seamless-scroll,另一种则是通过纯JavaScript来实现。

方法一:使用vue-seamless-scroll插件

1. 下载和引入插件

首先,我们需要通过npm安装vue-seamless-scroll插件:

npm install vue-seamless-scroll --save

然后在Vue组件中引入并注册插件:

import vueSeamlessScroll from 'vue-seamless-scroll'

export default {
  components: {
    vueSeamlessScroll
  }
}

2. 使用插件实现滚动

在模板中,我们通过v-for指令循环渲染列表项,并使用vue-seamless-scroll组件包裹它们:

<vue-seamless-scroll :data="opsList" :class-option="defaultOption">
  <div v-for="(item, index) in opsList" :key="index" class="item justify-between">
    <span class="name">{{ item.processDefinitionName }}</span>
    <span class="time">{{ item.createTime }}</span>
  </div>
</vue-seamless-scroll>

3. 配置滚动选项

在组件的computed属性中,我们可以定义滚动的各种选项,如滚动速度、滚动方向等:

computed: {
  defaultOption() {
    return {
      step: 1,           // 数值越大速度滚动越快
      limitMoveNum: 2,   // 开始无缝滚动的数据量 this.dataList.length
      hoverStop: true,   // 是否开启鼠标悬停stop
      direction: 1,      // 0向下 1向上 2向左 3向右
      openWatch: true,   // 开启数据实时监控刷新dom
      singleHeight: 226, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
      singleWidth: 0,    // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
      waitTime: 6000,    // 单步运动停止的时间(默认值1000ms)
      scrollTime: 0,     // 单步运动的时间(默认值1000ms)
      scrollNum: 1,      // 单步运动的距离(默认值1)
      scrollType: 0,     // 0匀速 1缓动
    }
  },
}

方法二:纯JS实现滚动

1. 准备HTML结构

首先,我们需要一个包含v-for循环的div容器,用于展示列表项:

<div class="swiperlist">
  <div v-for="(item, index) in opsList" :key="index" class="item justify-between">
    <span class="name">{{ item.processDefinitionName }}</span>
    <span class="time">{{ item.createTime }}</span>
  </div>
</div>

2. 编写JavaScript逻辑

在组件的生命周期钩子中,我们编写获取数据和滚动列表的逻辑, 并且启动和停止滚动动画:

data() {
  return {
    opsList: [],
    animate: 0,
  }
},
mounted() {
  this.getOps()
},
methods: {
  // 获取表格数据
  getOps() {
    const obj = {
      currentPage: 1,
      pageSize: 20
    }
    getList(obj.currentPage, obj.pageSize,).then(res => {
      this.opsList = res.data.data.records
      this.scrollList()
    })
  },
  // 列表滚动
  scrollList() {
    const swiperList = document.getElementsByClassName("swiperlist");
    this.animate = setInterval(() => {
      for (let i = 0; i < swiperList.length; i++) {
        let maxtop = swiperList[i].scrollHeight - swiperList[i].offsetHeight;
        if (maxtop === 0) {
          continue;
        }
        swiperList[i].scrollTop += 1
        if (swiperList[i].scrollTop >= (maxtop - 1)) {
          swiperList[i].scrollTop = 0
        }
      }
    }, 80);
  },
},
deactivated() {
  clearInterval(this.animate)
},
beforeDestroy() {
  clearInterval(this.animate)
}  

3. 样式设置

最后,我们需要一些基本的CSS样式来确保滚动效果的展示:

.swiperlist {
  width: 100%;
  height: 290px;
  overflow: hidden scroll;
}
.justify-between {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.item {
  padding: 10px;
  border-top: 1px solid #f0f0f0;
}
.name {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.time {
  width: 140px;
}

结语

通过上述两种方法,我们可以在Vue中轻松实现列表的循环滚动效果。第一种方法通过使用插件简化了实现过程,而第二种方法则提供了更多的自定义选项。开发者可以根据项目需求和个人喜好选择合适的实现方式。希望本文能帮助到需要实现此效果的开发者。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值