封装js方法实现无缝循环滚动效果

封装插件了

一步到位https://blog.csdn.net/chuenst/article/details/139095523

如下图,又遇到了无缝循环滚动这个需求

请添加图片描述
突然想到我之前有分享过一篇关于这个的文章https://blog.csdn.net/chuenst/article/details/137125377,果断打开csdn准备cv

在这里插入图片描述
经过我一顿操作,很快实现了需求,但是这风扇直接嗡嗡转,直接感到不妙
算了看看网上有没有轮子
于是我找到了 vue3-seamless-scroll 立马开工
很快我就装上了这个轮子,虽然风扇不转了
但是数据多了的话循环一轮之后就卡一下,不是无缝衔接,找了好多也没找到解决办法

在这里插入图片描述
于是决定继续修自己的轮子,于是就有了以下代码

//html
<div class="scroll">
  <div class="scrollContainer" ref="scrollContainer">
    <div class="l-item" v-for="(item, index) in leftList" :key="index">
      ...
    </div>
  </div>
</div>

//css
.scroll {
  height: 800px;
  overflow: hidden;
}

//js
//封装方法
function toScroll(e: any) {
  let sc = e.el;
  if (sc && typeof sc === "object" && sc !== null) {
    let contentHeight = sc.offsetHeight;
    if (contentHeight < sc.parentElement.offsetHeight) return
    let distance = 0
    if (e.direction == 'down') distance = -contentHeight
    sc.append(sc.cloneNode(sc))
    let timer = null
    if (timer) clearInterval(timer)
    timer = setInterval(() => {
      if (e.direction == 'up') {
        if (distance * -1 < contentHeight) distance--
        else distance = 0
        sc.style.transform = 'translate(0px, ' + distance + 'px)';;
      } else if (e.direction == 'down') {
        if (distance < 0) distance++
        else distance = -contentHeight
        sc.style.transform = 'translate(0px, ' + distance + 'px)';
      }

    }, e.step || 3);
  }
}
//调用
toScroll({
  el: scrollContainer.value,
  step: 3,
  direction: 'up'
})
  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初辰ge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值