0

0

使用jQuery和CSS实现平滑的鼠标滚轮水平滚动

聖光之護

聖光之護

发布时间:2025-10-24 10:09:29

|

798人浏览过

|

来源于php中文网

原创

使用jquery和css实现平滑的鼠标滚轮水平滚动

本文详细介绍了如何利用jQuery和CSS创建平滑的网页水平滚动效果,并通过鼠标滚轮进行控制。我们将探讨关键的CSS布局技巧,如`display: inline-block`和`white-space: nowrap`,以及jQuery中`wheel`事件监听、`transform: translateX`动画和精确的滚动边界控制,以解决传统方法中滚动不流畅和越界的问题,最终实现类似单页应用的用户体验。

网页水平滚动实现:jQuery与CSS实践

在现代网页设计中,为了提供独特的视觉体验或更好地组织内容,水平滚动布局越来越受欢迎。结合鼠标滚轮事件,我们可以实现一种直观且引人入胜的导航方式。本教程将指导您如何使用jQuery和CSS构建一个平滑、受控的水平滚动页面。

1. HTML结构搭建

首先,我们需要一个包含多个内容区域(例如section元素)的容器。这些内容区域将作为水平滚动的单元。为了方便管理,我们将它们包裹在一个父级div中。同时,为了引入jQuery库,我们会在HTML文件的适当位置添加CDN链接。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>平滑水平滚动示例</title>
    <!-- 引入jQuery库 -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <link rel="stylesheet" href="style.css">
</head>
<body>

    <div class="scroll-sections">
        <section id="section-1">
            <div class="container">
                <div class="row">
                    <div class="col-md-12">
                        <h1>第一部分</h1>
                    </div>
                </div>
            </div>
        </section>
        <section id="section-2">
            <div class="container">
                <div class="row">
                    <div class="col-md-12">
                        <h1>第二部分</h1>
                    </div>
                </div>
            </div>
        </section>
        <section id="section-3">
            <div class="container">
                <div class="row">
                    <div class="col-md-12">
                        <h1>第三部分</h1>
                    </div>
                </div>
            </div>
        </section>
        <section id="section-4">
            <div class="container">
                <div class="row">
                    <div class="col-md-12">
                        <h1>第四部分</h1>
                    </div>
                </div>
            </div>
        </section>
        <section id="section-5">
            <div class="container">
                <div class="row">
                    <div class="col-md-12">
                        <h1>第五部分</h1>
                    </div>
                </div>
            </div>
        </section>
    </div>

    <script src="script.js"></script>
</body>
</html>

2. CSS样式定义

CSS是实现水平布局和滚动平滑度的关键。我们将通过以下规则来构建我们的界面:

小微助手
小微助手

微信推出的一款专注于提升桌面效率的助手型AI工具

下载

立即学习前端免费学习笔记(深入)”;

  • 全局样式:移除html和body的默认外边距,并隐藏默认的垂直滚动条,确保我们的自定义滚动机制能够完全控制。
  • 内容区域 (section)
    • height: 99vh;:让每个部分占据视口的高度,提供全屏体验。
    • display: inline-block;:使各部分水平排列。
    • width: 33.3%;:示例中每个部分占据视口宽度的三分之一,您可以根据需求调整。
    • overflow: visible;:确保内容不会被裁剪。
  • 滚动容器 (.scroll-sections)
    • white-space: nowrap;:防止inline-block元素换行,强制它们在同一行显示。
    • height: 100%;:使其高度与父元素(body)一致。
    • overflow: visible;:允许内容超出其边界,由JavaScript控制可见区域。
    • transition-duration: 0.5s;:这是实现平滑滚动的核心。当transform属性改变时,它会在0.5秒内平滑过渡,而不是瞬间跳跃。
html, body {
    margin: 0px;
    overflow: hidden; /* 隐藏默认滚动条 */
}

section {
    height: 99vh; /* 每个部分占据视口高度 */
    display: inline-block; /* 使各部分水平排列 */
    width: 33.3%; /* 示例宽度,可根据需求调整 */
    border: 1px solid red; /* 仅为可视化方便 */
    overflow: visible;
}

.scroll-sections {
    white-space: nowrap; /* 防止内联块元素换行 */
    height: 100%;
    overflow: visible;
    transition-duration: 0.5s; /* 关键:平滑过渡效果 */
}

3. jQuery滚动逻辑

现在,我们来实现鼠标滚轮控制的滚动逻辑。我们将监听wheel事件,并根据滚轮方向调整容器的translateX属性。

$(document).ready(function(){
    var pos = 0; // 当前滚动位置的translateX值
    var scrollContainer = $(".scroll-sections");

    // 计算最大允许的负向滚动值(即最右端)
    // totalContentWidth 是所有section的总宽度
    var totalContentWidth = 0;
    scrollContainer.children().each(function() {
        totalContentWidth += $(this).outerWidth(true); // outerWidth(true) 包含外边距
    });
    var viewportWidth = $(window).width(); // 视口宽度
    var maxScroll = viewportWidth - totalContentWidth; // 最大负向translateX值

    // 监听鼠标滚轮事件
    scrollContainer.on('wheel', function(event) {
        // event.originalEvent.wheelDelta: 向上滚动为正值 (通常是120), 向下滚动为负值 (-120)
        // 这里除以3是为了让滚动更平滑,您可以根据需要调整速度
        pos = pos + (event.originalEvent.wheelDelta / 3);

        // 边界检查:防止滚动超出内容区域
        if (pos > 0) {
            pos = 0; // 限制在起始位置(最左端)
        }
        if (pos < maxScroll) {
            pos = maxScroll; // 限制在结束位置(最右端)
        }

        // 应用CSS transform属性进行水平位移
        // 使用translateX比直接修改left属性性能更好,因为它利用了GPU加速
        scrollContainer.css({'transform': 'translateX(' + pos + 'px)'});

        // 阻止默认的垂直滚动行为
        return false;
    });
});

4. 注意事项与优化

  • transform: translateX vs left: 教程中使用了transform: translateX进行位移,而不是直接修改left属性。这是因为transform属性通常由GPU加速,能够提供更流畅的动画效果,尤其是在复杂的页面或低性能设备上。
  • transition-duration: 在CSS中设置transition-duration是实现平滑滚动的关键。没有它,transform的变化将是瞬间完成的,导致生硬的跳跃。
  • 边界控制: 精确计算maxScroll并实施pos的边界检查(if (pos > 0)和if (pos < maxScroll))是防止内容无限滚动或卡顿的重要步骤。maxScroll的计算需要确保它准确反映了内容完全滚动到最右端时translateX应达到的值。
  • 滚动速度: event.originalEvent.wheelDelta / 3中的除数可以调整滚动的灵敏度。数值越大,滚动速度越慢。
  • 浏览器兼容性: wheel事件是现代浏览器推荐的滚轮事件。对于旧版浏览器,可能需要考虑mousewheel和DOMMouseScroll事件,但jQuery的on('wheel')通常能很好地处理。
  • 响应式设计: 示例中的section宽度设置为33.3%,这意味着在任何视口宽度下,始终有3个部分可见。您可以根据需要调整此百分比或使用媒体查询来实现更复杂的响应式布局。
  • 内容宽度计算: totalContentWidth的计算使用了outerWidth(true)以确保包含外边距。如果您的section元素有内边距或边框,outerWidth()(不带参数)或width()可能需要根据实际情况调整。

总结

通过上述HTML、CSS和jQuery代码,我们成功实现了一个平滑且受鼠标滚轮控制的水平滚动页面。这种方法不仅解决了传统滚动机制中可能出现的卡顿和

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

156

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

406

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

516

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

312

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

129

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

51

2026.01.13

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 43.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号