当前位置:首页 > JavaScript

js实现无缝滚动代码

2026-01-30 19:29:28JavaScript

实现无缝滚动的JavaScript代码

无缝滚动通常用于轮播图或新闻列表等场景,通过循环滚动内容实现无限播放效果。以下是两种常见的实现方式:

使用CSS动画结合JavaScript控制

// HTML结构示例
// <div class="scroll-container">
//   <div class="scroll-content">需要滚动的内容</div>
// </div>

const container = document.querySelector('.scroll-container');
const content = document.querySelector('.scroll-content');

// 克隆内容实现无缝衔接
content.innerHTML += content.innerHTML;

let scrollPos = 0;
function autoScroll() {
  scrollPos += 1;
  if(scrollPos >= content.scrollWidth / 2) {
    scrollPos = 0;
  }
  container.scrollLeft = scrollPos;
  requestAnimationFrame(autoScroll);
}
autoScroll();

使用transform实现性能更优的无缝滚动

const slider = document.querySelector('.slider');
const slides = document.querySelector('.slides');
const slideItems = document.querySelectorAll('.slide-item');

// 克隆第一组元素
slides.innerHTML += slides.innerHTML;

let currentPosition = 0;
const slideWidth = slideItems[0].offsetWidth;
const totalSlides = slideItems.length;

function animate() {
  currentPosition -= 1;
  if(Math.abs(currentPosition) >= slideWidth * totalSlides / 2) {
    currentPosition = 0;
  }
  slides.style.transform = `translateX(${currentPosition}px)`;
  requestAnimationFrame(animate);
}
animate();

关键实现要点

  1. 内容需要克隆一份追加到原有内容后面,当滚动到克隆部分时立即重置位置
  2. 使用requestAnimationFrame实现平滑动画,比setInterval性能更好
  3. 计算元素宽度时要考虑边框和padding的影响
  4. 对于水平滚动使用scrollLeft或transform: translateX
  5. 对于垂直滚动使用scrollTop或transform: translateY

响应式注意事项

窗口大小改变时需要重新计算元素尺寸:

window.addEventListener('resize', () => {
  slideWidth = slideItems[0].offsetWidth;
});

暂停和继续控制

可以通过标志位控制动画暂停:

let isPaused = false;
function toggleScroll() {
  isPaused = !isPaused;
  if(!isPaused) {
    animate();
  }
}

js实现无缝滚动代码

标签: 代码js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableElem…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

h5实现响应式代码

h5实现响应式代码

响应式设计基础 HTML5实现响应式设计主要通过媒体查询(Media Queries)、弹性布局(Flexbox)、网格布局(Grid)和视口设置(Viewport Meta Tag)等技术。核心目标…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化…