当前位置:首页 > JavaScript

js实现滑动相册

2026-01-31 00:18:09JavaScript

js实现滑动相册

实现滑动相册的基本思路

滑动相册的核心是通过监听用户触摸或鼠标事件,动态调整图片的位置。通常结合CSS过渡或动画效果实现平滑滑动。

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: 100%;
  overflow: hidden;
  position: relative;
}

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

.slide {
  min-width: 100%;
  height: 300px;
  object-fit: cover;
}

JavaScript实现

const track = document.querySelector('.slider-track');
const slides = Array.from(document.querySelectorAll('.slide'));
const slideWidth = slides[0].getBoundingClientRect().width;

let currentIndex = 0;
let isDragging = false;
let startPos = 0;
let currentTranslate = 0;
let prevTranslate = 0;

// 设置初始位置
setSliderPosition();

// 触摸事件处理
track.addEventListener('touchstart', touchStart);
track.addEventListener('touchmove', touchMove);
track.addEventListener('touchend', touchEnd);

// 鼠标事件处理
track.addEventListener('mousedown', touchStart);
track.addEventListener('mousemove', touchMove);
track.addEventListener('mouseup', touchEnd);
track.addEventListener('mouseleave', touchEnd);

function touchStart(e) {
  isDragging = true;
  startPos = getPositionX(e);
  prevTranslate = currentTranslate;
  track.style.transition = 'none';
}

function touchMove(e) {
  if (!isDragging) return;
  const currentPosition = getPositionX(e);
  currentTranslate = prevTranslate + currentPosition - startPos;
  track.style.transform = `translateX(${currentTranslate}px)`;
}

function touchEnd() {
  isDragging = false;
  const movedBy = currentTranslate - prevTranslate;

  if (movedBy < -100 && currentIndex < slides.length - 1) {
    currentIndex += 1;
  }

  if (movedBy > 100 && currentIndex > 0) {
    currentIndex -= 1;
  }

  setSliderPosition();
}

function getPositionX(e) {
  return e.type.includes('mouse') ? e.pageX : e.touches[0].clientX;
}

function setSliderPosition() {
  currentTranslate = currentIndex * -slideWidth;
  track.style.transition = 'transform 0.5s ease';
  track.style.transform = `translateX(${currentTranslate}px)`;
}

自动轮播功能

let autoSlideInterval;

function startAutoSlide() {
  autoSlideInterval = setInterval(() => {
    currentIndex = (currentIndex + 1) % slides.length;
    setSliderPosition();
  }, 3000);
}

function stopAutoSlide() {
  clearInterval(autoSlideInterval);
}

// 开始自动轮播
startAutoSlide();

// 鼠标悬停时停止
track.addEventListener('mouseenter', stopAutoSlide);
track.addEventListener('mouseleave', startAutoSlide);

响应式处理

window.addEventListener('resize', () => {
  slideWidth = slides[0].getBoundingClientRect().width;
  setSliderPosition();
});

添加导航按钮

<button class="prev-btn">Previous</button>
<button class="next-btn">Next</button>
document.querySelector('.prev-btn').addEventListener('click', () => {
  currentIndex = Math.max(currentIndex - 1, 0);
  setSliderPosition();
});

document.querySelector('.next-btn').addEventListener('click', () => {
  currentIndex = Math.min(currentIndex + 1, slides.length - 1);
  setSliderPosition();
});

指示器实现

<div class="indicators"></div>
const indicators = document.querySelector('.indicators');

// 创建指示器
slides.forEach((_, i) => {
  const indicator = document.createElement('div');
  indicator.classList.add('indicator');
  if (i === 0) indicator.classList.add('active');
  indicator.addEventListener('click', () => {
    currentIndex = i;
    setSliderPosition();
    updateIndicators();
  });
  indicators.appendChild(indicator);
});

function updateIndicators() {
  document.querySelectorAll('.indicator').forEach((indicator, i) => {
    indicator.classList.toggle('active', i === currentIndex);
  });
}

这个实现包含了基本的滑动功能、自动轮播、导航按钮和指示器。可以根据实际需求调整过渡效果、滑动阈值和响应式行为。

js实现滑动相册

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

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…