当前位置:首页 > JavaScript

js实现滑动相册

2026-03-01 15:22:35JavaScript

实现滑动相册的 JavaScript 方法

使用原生 JavaScript 实现滑动相册可以通过监听触摸事件或鼠标事件来实现。以下是两种常见的实现方式:

js实现滑动相册

HTML 结构

js实现滑动相册

<div class="slider-container">
  <div class="slider-track">
    <div class="slide">Slide 1</div>
    <div class="slide">Slide 2</div>
    <div class="slide">Slide 3</div>
  </div>
</div>

CSS 样式

.slider-container {
  width: 100%;
  overflow: hidden;
}
.slider-track {
  display: flex;
  transition: transform 0.3s ease;
}
.slide {
  min-width: 100%;
  height: 300px;
}

方法一:使用 transform 实现滑动

const track = document.querySelector('.slider-track');
let currentPosition = 0;
const slideWidth = document.querySelector('.slide').clientWidth;

function moveSlide(direction) {
  const slides = document.querySelectorAll('.slide');
  const maxPosition = -(slides.length - 1) * slideWidth;

  currentPosition += direction * slideWidth;
  currentPosition = Math.max(maxPosition, Math.min(0, currentPosition));

  track.style.transform = `translateX(${currentPosition}px)`;
}

// 添加按钮控制
document.querySelector('.prev-btn').addEventListener('click', () => moveSlide(1));
document.querySelector('.next-btn').addEventListener('click', () => moveSlide(-1));

方法二:触摸滑动实现

const track = document.querySelector('.slider-track');
let startX, moveX, isDragging = false;
let currentTranslate = 0, prevTranslate = 0;

track.addEventListener('mousedown', dragStart);
track.addEventListener('touchstart', dragStart);
track.addEventListener('mouseup', dragEnd);
track.addEventListener('touchend', dragEnd);
track.addEventListener('mousemove', drag);
track.addEventListener('touchmove', drag);

function dragStart(e) {
  isDragging = true;
  startX = e.type.includes('touch') ? e.touches[0].clientX : e.clientX;
  track.style.transition = 'none';
}

function drag(e) {
  if (!isDragging) return;
  const currentX = e.type.includes('touch') ? e.touches[0].clientX : e.clientX;
  moveX = currentX - startX;
  currentTranslate = prevTranslate + moveX;
  track.style.transform = `translateX(${currentTranslate}px)`;
}

function dragEnd() {
  isDragging = false;
  track.style.transition = 'transform 0.3s ease';

  const movedBy = currentTranslate - prevTranslate;
  if (movedBy < -100) {
    prevTranslate -= track.clientWidth;
  } else if (movedBy > 100) {
    prevTranslate += track.clientWidth;
  }

  prevTranslate = Math.max(
    -(track.scrollWidth - track.clientWidth),
    Math.min(0, prevTranslate)
  );

  currentTranslate = prevTranslate;
  track.style.transform = `translateX(${prevTranslate}px)`;
}

方法三:使用 IntersectionObserver 实现自动滑动

const slides = document.querySelectorAll('.slide');
const observerOptions = {
  threshold: 0.5
};

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const currentIndex = Array.from(slides).indexOf(entry.target);
      track.style.transform = `translateX(-${currentIndex * 100}%)`;
    }
  });
}, observerOptions);

slides.forEach(slide => observer.observe(slide));

注意事项

  • 确保 CSS 中设置了正确的 flex 布局和过渡效果
  • 移动端需要考虑 touch 事件和 preventDefault 防止页面滚动
  • 可以添加过渡结束事件处理边界情况
  • 性能优化可以考虑 requestAnimationFrame

这些方法可以根据需求组合使用,例如同时支持按钮控制和触摸滑动。实际项目中可能需要添加更多功能如无限循环、自动播放等。

标签: 相册js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现继承

js实现继承

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

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…