当前位置:首页 > JavaScript

js实现滑动换页

2026-03-15 16:18:30JavaScript

实现滑动换页的基本思路

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

监听触摸事件

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 的时间和缓动函数可以优化用户体验。

.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 来移动页面。同时,可以在滑动结束时才触发页面切换,减少不必要的计算。

js实现滑动换页

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

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

相关文章

js手势实现

js手势实现

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

js实现交换

js实现交换

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

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…