当前位置:首页 > 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实现拖拽

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

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现图片预览

js实现图片预览

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

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…