当前位置:首页 > JavaScript

js实现滑动翻页

2026-01-30 14:45:51JavaScript

实现滑动翻页的基本思路

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

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

移动端触摸滑动实现

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

js实现滑动翻页

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过渡提升体验:

js实现滑动翻页

.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实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现正交

js实现正交

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

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…