当前位置:首页 > JavaScript

js实现滑动换页

2026-03-15 16:18:30JavaScript

实现滑动换页的基本思路

滑动换页通常通过监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseup)来实现。核心逻辑包括计算滑动距离、判断滑动方向以及触发页面切换。

js实现滑动换页

监听触摸事件

let startX, moveX;
const container = document.getElementById('slider-container');

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 (Math.abs(diffX) > 50) { // 滑动阈值
        if (diffX > 0) {
            // 向右滑动,切换到上一页
            goToPrevPage();
        } else {
            // 向左滑动,切换到下一页
            goToNextPage();
        }
    }
});

监听鼠标事件

let isDragging = false;
let startX, moveX;

container.addEventListener('mousedown', (e) => {
    isDragging = true;
    startX = e.clientX;
});

container.addEventListener('mousemove', (e) => {
    if (!isDragging) return;
    moveX = e.clientX;
});

container.addEventListener('mouseup', () => {
    if (!isDragging) return;
    isDragging = false;
    const diffX = moveX - startX;
    if (Math.abs(diffX) > 50) {
        if (diffX > 0) {
            goToPrevPage();
        } else {
            goToNextPage();
        }
    }
});

页面切换逻辑

let currentPage = 0;
const pages = document.querySelectorAll('.page');
const totalPages = pages.length;

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

function goToNextPage() {
    if (currentPage < totalPages - 1) {
        currentPage++;
        updatePagePosition();
    }
}

function updatePagePosition() {
    pages.forEach((page, index) => {
        page.style.transform = `translateX(${(index - currentPage) * 100}%)`;
    });
}

CSS 样式

#slider-container {
    width: 100%;
    overflow: hidden;
    position: relative;
}

.page {
    width: 100%;
    height: 100%;
    position: absolute;
    transition: transform 0.3s ease;
}

平滑动画效果

通过 CSS 的 transition 属性实现平滑的滑动动画。调整 transition 的时间和缓动函数可以优化用户体验。

js实现滑动换页

.page {
    transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);
}

响应式设计

确保滑动换页在不同设备上都能正常工作,可以通过媒体查询调整滑动阈值或页面布局。

@media (max-width: 768px) {
    .page {
        transition: transform 0.2s ease;
    }
}

性能优化

避免频繁的重绘和回流,使用 transform 而不是 leftmargin 来移动页面。同时,可以在滑动结束时才触发页面切换,减少不必要的计算。

container.addEventListener('touchend', () => {
    if (Math.abs(diffX) > 50) {
        requestAnimationFrame(() => {
            if (diffX > 0) goToPrevPage();
            else goToNextPage();
        });
    }
});

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

相关文章

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现选题

js实现选题

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

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…