当前位置:首页 > JavaScript

js实现图片滚动效果

2026-04-03 19:34:40JavaScript

使用CSS动画实现图片滚动

通过CSS的@keyframestransform属性实现水平或垂直滚动效果。将多张图片拼接为长图,通过动画移动位置。

<style>
  .scroll-container {
    width: 300px;
    height: 200px;
    overflow: hidden;
  }
  .scroll-content {
    display: flex;
    animation: scroll 10s linear infinite;
  }
  @keyframes scroll {
    0% { transform: translateX(0); }
    100% { transform: translateX(-50%); }
  }
</style>

<div class="scroll-container">
  <div class="scroll-content">
    <img src="image1.jpg" alt="">
    <img src="image2.jpg" alt="">
    <img src="image3.jpg" alt="">
  </div>
</div>

使用JavaScript定时器实现

通过setInterval定期修改元素的scrollLeftscrollTop属性实现平滑滚动。适合需要精确控制滚动行为的场景。

const container = document.querySelector('.scroll-container');
let scrollAmount = 0;
const scrollSpeed = 1;

function autoScroll() {
  scrollAmount += scrollSpeed;
  container.scrollLeft = scrollAmount;

  if(scrollAmount >= container.scrollWidth - container.clientWidth) {
    scrollAmount = 0;
  }
}

setInterval(autoScroll, 20);

使用requestAnimationFrame优化性能

相比setIntervalrequestAnimationFrame能提供更流畅的动画效果,自动匹配浏览器刷新率。

function smoothScroll() {
  const container = document.getElementById('scroller');
  container.scrollLeft += 1;

  if(container.scrollLeft >= container.scrollWidth - container.clientWidth) {
    container.scrollLeft = 0;
  }

  requestAnimationFrame(smoothScroll);
}

smoothScroll();

实现无缝循环滚动

通过克隆首尾图片实现视觉上的无缝衔接。当滚动到克隆元素时立即跳转回原始元素。

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

// 克隆元素实现无缝衔接
content.innerHTML += content.innerHTML;

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

scrollLoop();

响应式滚动速度控制

根据容器宽度动态计算滚动速度,适配不同屏幕尺寸。

function adaptiveScroll() {
  const container = document.querySelector('.scroll-container');
  const speed = container.clientWidth * 0.02;

  container.scrollLeft += speed;

  if(container.scrollLeft >= container.scrollWidth - container.clientWidth) {
    container.scrollLeft = 0;
  }

  requestAnimationFrame(adaptiveScroll);
}

window.addEventListener('resize', adaptiveScroll);
adaptiveScroll();

触摸设备支持

添加触摸事件处理,使滚动效果在移动设备上也能正常工作。

js实现图片滚动效果

const container = document.querySelector('.scroll-container');
let isDragging = false;
let startX, scrollLeft;

container.addEventListener('mousedown', (e) => {
  isDragging = true;
  startX = e.pageX - container.offsetLeft;
  scrollLeft = container.scrollLeft;
});

container.addEventListener('mouseleave', () => {
  isDragging = false;
});

container.addEventListener('mouseup', () => {
  isDragging = false;
});

container.addEventListener('mousemove', (e) => {
  if(!isDragging) return;
  e.preventDefault();
  const x = e.pageX - container.offsetLeft;
  const walk = (x - startX) * 2;
  container.scrollLeft = scrollLeft - walk;
});

// 触摸事件处理
container.addEventListener('touchstart', (e) => {
  isDragging = true;
  startX = e.touches[0].pageX - container.offsetLeft;
  scrollLeft = container.scrollLeft;
});

container.addEventListener('touchend', () => {
  isDragging = false;
});

container.addEventListener('touchmove', (e) => {
  if(!isDragging) return;
  const x = e.touches[0].pageX - container.offsetLeft;
  const walk = (x - startX) * 2;
  container.scrollLeft = scrollLeft - walk;
});

标签: 效果图片
分享给朋友:

相关文章

vue实现拖拉效果

vue实现拖拉效果

实现拖拽效果的基本方法 在Vue中实现拖拽效果可以通过原生HTML5的拖拽API或第三方库如vuedraggable来完成。以下是两种常见方法的详细说明。 使用HTML5拖拽API HTML5提供了…

h5实现全景图片

h5实现全景图片

H5 实现全景图片的方法 使用 Three.js 库 Three.js 是一个强大的 3D 库,可以用于创建全景图片效果。以下是一个简单的实现步骤: 引入 Three.js 库 <scri…

jquery 效果

jquery 效果

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。jQuery 提供了丰富的效果(Effects)功能,可以轻松实现元素的动态显…

h5实现图片压缩

h5实现图片压缩

使用Canvas API压缩图片 HTML5的Canvas API可以通过调整画布尺寸和图像质量来实现图片压缩。创建一个Canvas元素,将图片绘制到Canvas上,再通过toDataURL或toBl…

vue实现图片查看

vue实现图片查看

实现图片查看功能 在Vue中实现图片查看功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方组件库(如Element UI、Vant等)或专用插件(如view…

vue实现tag效果

vue实现tag效果

实现基本标签结构 使用 Vue 的模板语法创建标签容器和单个标签元素。通过 v-for 动态渲染标签列表,结合 v-bind:key 确保渲染性能。 <template> <…