当前位置:首页 > 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实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现驼峰

js实现驼峰

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

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…