当前位置:首页 > JavaScript

js实现滑动翻页

2026-01-30 14:45:51JavaScript

实现滑动翻页的基本思路

滑动翻页通常通过监听触摸事件或鼠标事件,结合CSS过渡或动画实现。核心逻辑包括:

  1. 监听 touchstarttouchmovetouchend(移动端)或 mousedownmousemovemouseup(桌面端)事件。
  2. 计算滑动距离和方向,判断是否触发翻页。
  3. 使用CSS变换(如 transform)或JavaScript动画切换页面内容。

移动端触摸滑动实现

以下是一个基于触摸事件的简单实现:

const slider = document.querySelector('.slider');
let startX, moveX, isDragging = false;

slider.addEventListener('touchstart', (e) => {
    startX = e.touches[0].clientX;
    isDragging = true;
});

slider.addEventListener('touchmove', (e) => {
    if (!isDragging) return;
    moveX = e.touches[0].clientX;
    const diffX = moveX - startX;
    slider.style.transform = `translateX(${diffX}px)`;
});

slider.addEventListener('touchend', () => {
    if (!isDragging) return;
    isDragging = false;
    const threshold = 50; // 滑动阈值
    if (Math.abs(moveX - startX) > threshold) {
        // 根据方向切换页面
        if (moveX > startX) {
            goToPrevPage();
        } else {
            goToNextPage();
        }
    }
    slider.style.transform = 'translateX(0)';
});

function goToPrevPage() {
    // 上一页逻辑
}

function goToNextPage() {
    // 下一页逻辑
}

桌面端鼠标拖动实现

类似触摸事件,但需监听鼠标事件:

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

slider.addEventListener('mousemove', (e) => {
    if (!isDragging) return;
    moveX = e.clientX;
    const diffX = moveX - startX;
    slider.style.transform = `translateX(${diffX}px)`;
});

slider.addEventListener('mouseup', () => {
    isDragging = false;
    // 同 touchend 逻辑
});

平滑过渡与动画

使用CSS过渡提升体验:

.slider {
    transition: transform 0.3s ease;
}

或通过JavaScript动态添加类名:

function animateSlider(direction) {
    slider.classList.add('sliding');
    slider.style.transform = `translateX(${direction * 100}%)`;
    setTimeout(() => {
        slider.classList.remove('sliding');
        // 更新页面内容
    }, 300);
}

完整示例代码

结合分页逻辑的完整实现:

<div class="slider-container">
    <div class="slider">
        <div class="page">Page 1</div>
        <div class="page">Page 2</div>
    </div>
</div>

<style>
    .slider-container {
        overflow: hidden;
        width: 100%;
    }
    .slider {
        display: flex;
        transition: transform 0.3s ease;
    }
    .page {
        min-width: 100%;
    }
</style>

<script>
    const slider = document.querySelector('.slider');
    let currentPage = 0;
    let startX, moveX, isDragging = false;

    // 事件监听(同上)
    // ...

    function goToPrevPage() {
        if (currentPage > 0) {
            currentPage--;
            slider.style.transform = `translateX(-${currentPage * 100}%)`;
        }
    }

    function goToNextPage() {
        if (currentPage < slider.children.length - 1) {
            currentPage++;
            slider.style.transform = `translateX(-${currentPage * 100}%)`;
        }
    }
</script>

注意事项

  1. 性能优化:避免频繁重排,使用 transform 代替 left/top
  2. 边界处理:限制第一页和最后一页的滑动。
  3. 兼容性:桌面端需考虑鼠标事件与触摸事件的冲突。
  4. 手势库:复杂场景建议使用 Hammer.jsSwiper

js实现滑动翻页

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

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现拖拽

js实现拖拽

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

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js jquery

js jquery

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