原生js实现无缝循环滚动效果

封装插件了

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

原生js实现如下图循环滚动效果

请添加图片描述

核心代码

<div class="scroll">
  <div class="blist" id="scrollContainer">
    <div class="bitem">
    </div>
    ......
    <div class="bitem">
    </div>
  </div>
</div>
<script>
setTimeout(() => {
  let speed = 10; // 调整滚动速度,单位是毫秒  
  let scrollContainer = document.getElementById('scrollContainer');
  let contentHeight = scrollContainer.offsetHeight;
  let top = 0
  scrollContainer.style.position = 'relative';
  scrollContainer.style.top = top + 'px';
  scrollContainer.append(scrollContainer.cloneNode(scrollContainer))
  setInterval(() => {
    if (top * -1 < contentHeight) top--
    else top = 0
    scrollContainer.style.top = top + 'px';;
  }, speed);
}, 200)
</script>

20240507优化

//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'
})

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现列表内容自动向上滚动效果,可以使用原生JavaScript来操作DOM元素和定时器。 首先,可以通过getElementById或querySelector等方法获取到包含列表内容的元素。 然后,通过获取元素的高度、内容等信息来判断是否需要滚动。 接着,可以利用定时器setInterval来不断改变元素的scrollTop属性值,实现滚动效果。 具体步骤如下: 1. 首先,获取到包含列表内容的元素: ```javascript var listContainer = document.getElementById("listContainer"); //或者使用querySelector根据CSS选择器选择元素: var listContainer = document.querySelector("#listContainer"); ``` 2. 判断是否需要滚动,比如当元素内容的高度大于元素本身的高度时才需要滚动: ```javascript if(listContainer.scrollHeight > listContainer.clientHeight){ // 需要滚动,执行后续操作 } ``` 3. 设置定时器,不断改变元素的scrollTop属性值,实现滚动效果: ```javascript var isScrolling = true; // 表示是否正在滚动 setInterval(function(){ if(isScrolling){ listContainer.scrollTop += 1; // 每次滚动1个像素,可根据需要调整滚动速度 if(listContainer.scrollTop === (listContainer.scrollHeight - listContainer.clientHeight)){ listContainer.scrollTop = 0; // 滚动到底部后,回到顶部 } } }, 50); // 每50毫秒滚动一次,可根据需要调整滚动速度 ``` 4. 可以添加一些事件来控制滚动的开始和停止,比如鼠标进入和离开时暂停和恢复滚动效果: ```javascript listContainer.onmouseover = function(){ isScrolling = false; // 鼠标进入时停止滚动 } listContainer.onmouseout = function(){ isScrolling = true; // 鼠标离开时恢复滚动 } ``` 以上就是用原生JavaScript实现列表内容自动向上滚动效果的基本步骤。根据具体需求,还可以进行一些定制和调整,比如添加缓动效果、点击按钮控制滚动等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

初辰ge

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

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

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

打赏作者

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

抵扣说明:

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

余额充值