当前位置:首页 > JavaScript

js实现图片滑动

2026-04-04 01:43:47JavaScript

实现图片滑动的基本思路

图片滑动通常通过CSS和JavaScript结合实现。CSS负责布局和动画效果,JavaScript处理用户交互逻辑。常见的实现方式包括水平滑动轮播、垂直滑动展示等。

水平滑动轮播实现

HTML结构需要包含一个容器和图片列表:

<div class="slider-container">
  <div class="slider-track">
    <img src="image1.jpg" class="slide">
    <img src="image2.jpg" class="slide">
    <img src="image3.jpg" class="slide">
  </div>
</div>

CSS设置布局和过渡效果:

.slider-container {
  width: 600px;
  height: 400px;
  overflow: hidden;
  position: relative;
}

.slider-track {
  display: flex;
  transition: transform 0.5s ease;
}

.slide {
  width: 600px;
  height: 400px;
  flex-shrink: 0;
}

JavaScript实现滑动逻辑:

js实现图片滑动

const track = document.querySelector('.slider-track');
const slides = Array.from(document.querySelectorAll('.slide'));
let currentSlide = 0;

function moveToSlide(index) {
  track.style.transform = `translateX(-${index * 600}px)`;
  currentSlide = index;
}

// 自动轮播示例
setInterval(() => {
  currentSlide = (currentSlide + 1) % slides.length;
  moveToSlide(currentSlide);
}, 3000);

触摸滑动支持

添加触摸事件支持可以实现更自然的滑动体验:

let startX = 0;
let currentX = 0;
let isDragging = false;

track.addEventListener('touchstart', (e) => {
  startX = e.touches[0].clientX;
  currentX = -currentSlide * 600;
  isDragging = true;
});

track.addEventListener('touchmove', (e) => {
  if (!isDragging) return;
  const x = e.touches[0].clientX;
  const diff = x - startX;
  track.style.transform = `translateX(${currentX + diff}px)`;
});

track.addEventListener('touchend', (e) => {
  isDragging = false;
  const x = e.changedTouches[0].clientX;
  const diff = x - startX;

  if (diff > 50 && currentSlide > 0) {
    moveToSlide(currentSlide - 1);
  } else if (diff < -50 && currentSlide < slides.length - 1) {
    moveToSlide(currentSlide + 1);
  } else {
    moveToSlide(currentSlide);
  }
});

无限循环优化

修改moveToSlide函数实现无缝循环:

js实现图片滑动

function moveToSlide(index) {
  if (index < 0) {
    index = slides.length - 1;
  } else if (index >= slides.length) {
    index = 0;
  }

  track.style.transition = 'transform 0.5s ease';
  track.style.transform = `translateX(-${index * 600}px)`;
  currentSlide = index;

  // 重置过渡效果
  setTimeout(() => {
    track.style.transition = 'none';
    if (currentSlide === slides.length - 1) {
      track.style.transform = 'translateX(0)';
      currentSlide = 0;
    } else if (currentSlide === 0) {
      track.style.transform = `translateX(-${(slides.length - 1) * 600}px)`;
      currentSlide = slides.length - 1;
    }
  }, 500);
}

添加导航按钮

可以通过添加按钮增强用户控制:

<button class="prev-btn">Previous</button>
<button class="next-btn">Next</button>

JavaScript添加事件监听:

document.querySelector('.prev-btn').addEventListener('click', () => {
  moveToSlide(currentSlide - 1);
});

document.querySelector('.next-btn').addEventListener('click', () => {
  moveToSlide(currentSlide + 1);
});

响应式设计调整

通过监听窗口大小变化调整滑动距离:

function updateSlideSize() {
  const containerWidth = document.querySelector('.slider-container').offsetWidth;
  document.querySelectorAll('.slide').forEach(slide => {
    slide.style.width = `${containerWidth}px`;
  });
}

window.addEventListener('resize', () => {
  updateSlideSize();
  moveToSlide(currentSlide);
});

// 初始化时调用
updateSlideSize();

标签: 图片js
分享给朋友:

相关文章

vue实现图片轮播

vue实现图片轮播

Vue 实现图片轮播的方法 使用第三方库(推荐) 安装 vue-awesome-swiper 库,这是基于 Swiper 的 Vue 封装: npm install swiper vue-a…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…