核心思想

使用 jQuery 操作导航栏,主要依赖于以下几个核心功能:

jquery网页导航代码怎么写
(图片来源网络,侵删)
  1. 事件监听:监听用户的操作,如点击 (click)、滚动 (scroll)、鼠标悬停 (mouseenter) 等。
  2. 选择器:精准地找到需要操作的 HTML 元素,如导航链接 (nav a)、菜单项 (.menu-item) 等。
  3. DOM 操作:根据事件来修改元素的样式 (css())、添加/删除 CSS 类 (addClass(), removeClass(), toggleClass()) 或显示/隐藏元素 (show(), hide(), toggle())。

基础点击导航(单页应用锚点跳转)

这是最简单的导航,点击导航链接,页面平滑滚动到对应的部分。

HTML 结构

假设我们有一个单页网站,导航链接指向页面内的不同部分。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">jQuery 导航示例</title>
    <style>
        /* 基础样式 */
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
        }
        nav {
            background-color: #333;
            position: fixed; /* 固定在顶部 */
            top: 0;
            width: 100%;
            z-index: 1000; /* 确保导航栏在最上层 */
        }
        nav ul {
            list-style: none;
            margin: 0;
            padding: 0;
            display: flex; /* 水平排列 */
            justify-content: center;
        }
        nav li {
            margin: 0;
        }
        nav a {
            display: block;
            color: white;
            text-decoration: none;
            padding: 15px 20px;
            transition: background-color 0.3s;
        }
        nav a:hover {
            background-color: #555;
        }
        .content-section {
            height: 100vh; /* 每个部分占满一屏 */
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 2em;
            color: #333;
        }
        #section1 { background-color: #f1f1f1; }
        #section2 { background-color: #e1e1e1; }
        #section3 { background-color: #d1d1d1; }
    </style>
</head>
<body>
    <nav>
        <ul>
            <li><a href="#section1">首页</a></li>
            <li><a href="#section2">关于我们</a></li>
            <li><a href="#section3">联系方式</a></li>
        </ul>
    </nav>
    <section id="section1" class="content-section">第一部分</section>
    <section id="section2" class="content-section">第二部分</section>
    <section id="section3" class="content-section">第三部分</section>
    <!-- 引入 jQuery 库 -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <!-- 引入我们的 jQuery 代码 -->
    <script src="script.js"></script>
</body>
</html>

jQuery 代码 (script.js)

// 确保文档完全加载后再执行 jQuery 代码
$(document).ready(function(){
    // 1. 监听导航链接的点击事件
    $('nav a').on('click', function(event){
        // 2. 阻止默认的跳转行为(URL 后面会加上 #section1 等)
        // 这样我们就可以用 JavaScript 控制滚动
        event.preventDefault();
        // 3. 获取被点击链接的 href 属性值("#section1")
        var targetId = $(this).attr('href');
        // 4. 使用 jQuery 的 scrollTop 方法平滑滚动到目标元素的位置
        // 'html, body' 是为了兼容不同浏览器
        // offset().top 获取目标元素距离顶部的距离
        // 800 是滚动动画的持续时间(毫秒)
        $('html, body').animate({
            scrollTop: $(targetId).offset().top
        }, 800);
    });
});

滚动时高亮当前所在区域的导航项

这是一个非常实用的功能,当用户滚动页面时,导航栏中对应的链接会高亮显示。

HTML 结构 (与场景一相同)

CSS 增强 (增加一个高亮样式)

<style> 标签内添加:

jquery网页导航代码怎么写
(图片来源网络,侵删)
/* 当前活动链接的样式 */
nav a.active {
    background-color: #007bff; /* 蓝色高亮 */
    font-weight: bold;
}

jQuery 代码 (script.js)

我们将结合滚动事件和点击事件来实现。

$(document).ready(function(){
    // --- 场景一:点击平滑滚动 ---
    $('nav a').on('click', function(event){
        event.preventDefault();
        var targetId = $(this).attr('href');
        $('html, body').animate({
            scrollTop: $(targetId).offset().top
        }, 800);
        // 点击后,给当前点击的链接添加 active 类
        // 其他链接移除 active 类
        $(this).addClass('active').parent().siblings().find('a').removeClass('active');
    });
    // --- 场景二:滚动时高亮 ---
    // 使用节流函数来优化性能,避免滚动时触发太多次
    function throttle(func, limit) {
        let inThrottle;
        return function() {
            const args = arguments;
            const context = this;
            if (!inThrottle) {
                func.apply(context, args);
                inThrottle = true;
                setTimeout(() => inThrottle = false, limit);
            }
        }
    }
    function updateActiveNavLink() {
        // 获取当前窗口的滚动位置
        var scrollPosition = $(window).scrollTop();
        // 遍历所有的内容区域
        $('.content-section').each(function() {
            // 获取每个区域的顶部和底部位置
            var sectionTop = $(this).offset().top - 100; // 减去一个偏移量,提前高亮
            var sectionBottom = sectionTop + $(this).outerHeight();
            // 如果滚动位置在当前区域内
            if (scrollPosition >= sectionTop && scrollPosition < sectionBottom) {
                // 找到对应的导航链接
                var correspondingLink = $('nav a[href="#' + $(this).attr('id') + '"]');
                // 给对应的链接添加 active 类,并移除其他链接的 active 类
                correspondingLink.addClass('active').parent().siblings().find('a').removeClass('active');
            }
        });
    }
    // 监听窗口滚动事件,并使用节流函数
    $(window).on('scroll', throttle(updateActiveNavLink, 150));
    // 页面加载时也执行一次,以初始化状态
    updateActiveNavLink();
});

移动端汉堡菜单(点击展开/收起)

对于小屏幕设备,通常需要一个汉堡菜单图标来收起展开导航项。

HTML 结构 (增加汉堡图标)

<nav>
    <div class="hamburger">
        <span></span>
        <span></span>
        <span></span>
    </div>
    <ul>
        <li><a href="#section1">首页</a></li>
        <li><a href="#section2">关于我们</a></li>
        <li><a href="#section3">联系方式</a></li>
    </ul>
</nav>

CSS 增强 (为汉堡菜单和移动端布局添加样式)

/* 汉堡图标样式 */
.hamburger {
    display: none; /* 默认隐藏 */
    cursor: pointer;
    padding: 15px;
}
.hamburger span {
    display: block;
    width: 25px;
    height: 3px;
    background-color: white;
    margin: 5px 0;
    transition: all 0.3s ease-in-out;
}
/* 移动端响应式 */
@media (max-width: 768px) {
    .hamburger {
        display: block; /* 在小屏幕上显示 */
    }
    nav ul {
        /* 默认收起 */
        flex-direction: column;
        position: absolute;
        top: 60px; /* 位于汉堡菜单下方 */
        left: 0;
        width: 100%;
        background-color: #333;
        display: none; /* 初始状态为隐藏 */
    }
    nav ul.show {
        display: flex; /* 点击后显示 */
    }
}

jQuery 代码 (script.js)

在之前的代码基础上,增加汉堡菜单的点击逻辑。

$(document).ready(function(){
    // --- 场景一和场景二的代码 ---
    $('nav a').on('click', function(event){
        // ... (代码与场景二相同)
        // 点击后,如果是移动端,还要关闭菜单
        if (window.innerWidth <= 768) {
            $('nav ul').removeClass('show');
        }
    });
    function throttle(func, limit) { /* ... */ }
    function updateActiveNavLink() { /* ... */ }
    $(window).on('scroll', throttle(updateActiveNavLink, 150));
    updateActiveNavLink();
    // --- 场景三:汉堡菜单 ---
    $('.hamburger').on('click', function(){
        // 切换 .show 类来控制菜单的显示和隐藏
        $('nav ul').toggleClass('show');
        // 可选:点击时让汉堡图标变成 X 形状
        $(this).toggleClass('is-active');
    });
});

总结与最佳实践

  1. 引入 jQuery:务必在自定义脚本之前引入 jQuery 库。
  2. 使用 $(document).ready():确保所有 DOM 元素都加载完毕后再执行你的代码。
  3. 性能优化:对于 scrollresize 等高频触发的事件,一定要使用节流防抖技术来优化性能,避免页面卡顿。
  4. 语义化 HTML:使用 <nav>, <ul>, <li> 等语义化标签,这有利于 SEO 和可访问性。
  5. 响应式设计:导航栏在桌面和移动端应有不同的表现,CSS 的 @media 查询和 jQuery 的交互逻辑需要配合使用。
  6. 可访问性 (Accessibility):为交互元素添加 rolearia-* 属性,确保键盘用户也能顺利操作。

从上面的三个场景,你可以组合出功能强大且用户体验良好的网页导航,希望这些代码和解释对你有帮助!