当前位置:首页 > JavaScript

js实现滑动换页

2026-02-02 16:03:13JavaScript

实现滑动换页的基本原理

滑动换页通常通过监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseup)来实现。核心逻辑是计算滑动距离和方向,当达到阈值时触发页面切换。

监听触摸事件

let startX, moveX;
const slider = document.querySelector('.slider');

slider.addEventListener('touchstart', (e) => {
  startX = e.touches[0].clientX;
});

slider.addEventListener('touchmove', (e) => {
  moveX = e.touches[0].clientX;
  const diff = moveX - startX;
  e.preventDefault(); // 阻止默认滚动行为
});

slider.addEventListener('touchend', () => {
  const threshold = 50; // 滑动阈值
  const diff = moveX - startX;

  if (diff > threshold) {
    // 向右滑动,切换到上一页
    goToPrevPage();
  } else if (diff < -threshold) {
    // 向左滑动,切换到下一页
    goToNextPage();
  }
});

添加CSS过渡效果

.slider {
  transition: transform 0.3s ease;
}

实现页面切换函数

let currentPage = 0;
const pages = document.querySelectorAll('.page');
const pageWidth = window.innerWidth;

function goToPrevPage() {
  if (currentPage > 0) {
    currentPage--;
    updateSliderPosition();
  }
}

function goToNextPage() {
  if (currentPage < pages.length - 1) {
    currentPage++;
    updateSliderPosition();
  }
}

function updateSliderPosition() {
  slider.style.transform = `translateX(-${currentPage * pageWidth}px)`;
}

处理鼠标事件(桌面端兼容)

let isMouseDown = false;
let mouseStartX;

slider.addEventListener('mousedown', (e) => {
  isMouseDown = true;
  mouseStartX = e.clientX;
});

slider.addEventListener('mousemove', (e) => {
  if (!isMouseDown) return;
  const mouseMoveX = e.clientX;
  const diff = mouseMoveX - mouseStartX;
});

slider.addEventListener('mouseup', () => {
  if (!isMouseDown) return;
  isMouseDown = false;
  const threshold = 50;
  const diff = mouseMoveX - mouseStartX;

  if (diff > threshold) {
    goToPrevPage();
  } else if (diff < -threshold) {
    goToNextPage();
  }
});

slider.addEventListener('mouseleave', () => {
  isMouseDown = false;
});

优化性能的建议

使用CSS的will-change属性提前告知浏览器可能的变化:

js实现滑动换页

.slider {
  will-change: transform;
}

考虑使用requestAnimationFrame来优化动画性能:

function animateSlider() {
  requestAnimationFrame(() => {
    slider.style.transform = `translateX(-${currentPage * pageWidth}px)`;
  });
}

完整示例代码结构

HTML结构:

js实现滑动换页

<div class="slider-container">
  <div class="slider">
    <div class="page">Page 1</div>
    <div class="page">Page 2</div>
    <div class="page">Page 3</div>
  </div>
</div>

CSS样式:

.slider-container {
  overflow: hidden;
  width: 100%;
}

.slider {
  display: flex;
  transition: transform 0.3s ease;
  will-change: transform;
}

.page {
  flex: 0 0 100%;
  width: 100%;
}

注意事项

确保在移动设备上正确处理触摸事件和滚动行为的冲突。可能需要使用e.preventDefault()来阻止默认滚动行为。

对于复杂的滑动效果,可以考虑使用现成的库如Swiper.js,它提供了更丰富的功能和更好的跨浏览器兼容性。

标签: 换页js
分享给朋友:

相关文章

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…