当前位置:首页 > 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;
});

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

相关文章

react如何渲染图片

react如何渲染图片

在React中渲染图片的方法 使用<img>标签直接引入本地图片 将图片文件放入项目目录(如src/assets),通过相对路径引入。需注意Webpack可能需要配置file-loader…

jquery图片切换

jquery图片切换

jQuery图片切换的实现方法 通过jQuery实现图片切换功能有多种方式,以下是几种常见的实现方法: 基础淡入淡出效果 $(document).ready(function(){ let…

jquery图片放大

jquery图片放大

jQuery图片放大实现方法 使用jQuery实现图片放大功能可以通过多种方式完成,以下是几种常见且实用的方法: 使用jQuery Zoom插件 jQuery Zoom插件是一个轻量级的库,专门用于…

vue实现抽屉效果

vue实现抽屉效果

Vue 实现抽屉效果的方法 使用 Vue 过渡动画和 CSS 在 Vue 中可以通过 v-if 或 v-show 控制抽屉的显示隐藏,结合 <transition> 组件实现平滑动画效果。…

vue实现开关效果

vue实现开关效果

使用Vue实现开关效果 使用v-model绑定数据 通过v-model绑定一个布尔值来控制开关状态。当用户点击开关时,布尔值会自动更新。 <template> <div cla…

vue实现图片列表

vue实现图片列表

实现图片列表的基本方法 在Vue中实现图片列表可以通过v-for指令遍历图片数据数组,结合<img>标签动态绑定src属性。以下是基本实现步骤: <template> &…