当前位置:首页 > 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如何实现继承

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

vue实现换页

vue实现换页

Vue 实现分页功能 在 Vue 中实现分页功能可以通过多种方式完成,以下是几种常见的实现方法。 使用第三方库 使用现成的分页组件库可以快速实现分页功能,例如 element-ui 或 vant。…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现瀑布流

js实现瀑布流

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