当前位置:首页 > JavaScript

js实现滑动相册

2026-03-01 15:22:35JavaScript

实现滑动相册的 JavaScript 方法

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

HTML 结构

<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
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的H…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现图片预览

js实现图片预览

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

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置…