当前位置:首页 > JavaScript

js实现滑动翻页

2026-03-01 05:49:28JavaScript

实现滑动翻页的基本思路

滑动翻页通常通过监听用户手势(如触摸事件或鼠标滚轮事件)来触发页面切换。核心逻辑包括:

  1. 检测滑动方向(左/右或上/下)
  2. 根据滑动方向切换页面内容
  3. 添加过渡动画效果

基础实现代码示例

// 获取容器元素
const container = document.querySelector('.slider-container');
let startX, moveX;
let currentPage = 0;
const totalPages = 3; // 总页数

// 触摸事件处理
container.addEventListener('touchstart', (e) => {
  startX = e.touches[0].clientX;
});

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

container.addEventListener('touchend', () => {
  const diffX = moveX - startX;

  // 向右滑动且不是第一页
  if (diffX > 50 && currentPage > 0) {
    currentPage--;
    updatePage();
  } 
  // 向左滑动且不是最后一页
  else if (diffX < -50 && currentPage < totalPages - 1) {
    currentPage++;
    updatePage();
  }
});

// 更新页面位置
function updatePage() {
  container.style.transform = `translateX(-${currentPage * 100}%)`;
  container.style.transition = 'transform 0.3s ease';
}

鼠标滚轮实现方案

// 滚轮事件处理
container.addEventListener('wheel', (e) => {
  e.preventDefault();

  if (e.deltaY > 0 && currentPage < totalPages - 1) {
    currentPage++;
  } else if (e.deltaY < 0 && currentPage > 0) {
    currentPage--;
  }

  updatePage();
});

CSS样式建议

.slider-container {
  display: flex;
  width: 300%; /* 根据页数调整 */
  height: 100vh;
  overflow: hidden;
}

.slide-page {
  width: 33.33%; /* 100% / 页数 */
  height: 100%;
  flex-shrink: 0;
}

进阶功能实现

添加页面指示器:

// 创建指示器
const indicator = document.createElement('div');
indicator.className = 'page-indicator';
document.body.appendChild(indicator);

// 更新指示器
function updateIndicator() {
  indicator.innerHTML = '';
  for (let i = 0; i < totalPages; i++) {
    const dot = document.createElement('span');
    dot.className = i === currentPage ? 'dot active' : 'dot';
    indicator.appendChild(dot);
  }
}

添加惯性滑动效果:

js实现滑动翻页

let velocity = 0;
let lastTime = 0;

container.addEventListener('touchmove', (e) => {
  const now = Date.now();
  const deltaTime = now - lastTime;
  const deltaX = e.touches[0].clientX - startX;

  if (deltaTime > 0) {
    velocity = deltaX / deltaTime;
  }

  lastTime = now;
  startX = e.touches[0].clientX;
});

注意事项

  1. 移动端需添加touch-action: noneCSS属性防止浏览器默认行为
  2. 考虑添加边界检测,防止滑动超出页面范围
  3. 性能优化:使用requestAnimationFrame处理动画
  4. 可访问性:添加键盘导航支持

以上代码可根据实际需求进行调整和扩展,核心原理是通过检测用户输入来改变页面位置。

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

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…