Bootstrap 5学习教程,从入门到精通,Bootstrap 5 滚动监听(Scrollspy)语法知识点及案例代码(25)

Bootstrap 5 滚动监听(Scrollspy)语法知识点及案例代码

Bootstrap 5Scrollspy 组件允许根据用户的滚动位置自动更新导航链接的激活状态。这对于创建具有固定导航栏的单页网站特别有用,能够提升用户体验和导航的便捷性。

一、Scrollspy 语法知识点

1. 基本结构

要使用 Scrollspy,需要以下几个关键部分:

  • 导航栏(Navbar):包含指向页面不同部分的链接。
  • 目标容器(Target Container):包含各个部分的内容,通常使用 id 属性进行标识。
  • 数据属性或 JavaScript 初始化:用于初始化 Scrollspy。

2. 关键属性

  • data-bs-spy="scroll":应用于目标容器,启用 Scrollspy 功能。
  • data-bs-target="#navbar-example":指定导航栏的 id,用于关联导航链接。
  • data-bs-offset="0":可选属性,定义滚动偏移量(以像素为单位),用于调整激活状态触发的位置。
  • class="nav-link":导航栏中的链接应使用此类,以便 Scrollspy 能够正确识别。

3. 引入必要的资源

确保在项目中引入了 Bootstrap 5 的 CSS 和 JS 文件,以及其依赖的 Popper.js(Bootstrap 5 已内置 Popper.js)。


<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">


<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js">script>

4. 初始化 Scrollspy(可选)

如果使用数据属性,Scrollspy 会自动初始化。如果需要更高级的配置,可以通过 JavaScript 手动初始化:

var scrollSpy = new bootstrap.ScrollSpy(document.body, {
  target: '#navbar-example'
})

5. 注意事项

  • 固定导航栏:如果导航栏是固定的(使用 fixed-top 类),需要为 body 添加 padding-top 以防止内容被导航栏遮挡。
  • 响应式设计:确保导航栏在不同设备上都能正确显示和操作。

二、Scrollspy 案例代码

以下是一个完整的 Scrollspy 示例,包含导航栏和多个内容部分。代码中包含详细注释,帮助理解每个部分的功能。

DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Bootstrap 5 Scrollspy 示例title>
  
  <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
  <style>
    /* 为了演示效果,增加每个部分的高度 */
    .section {
      padding: 60px 0;
    }
    /* 固定导航栏的高度补偿 */
    body {
      padding-top: 56px;
    }
  style>
head>
<body data-bs-spy="scroll" data-bs-target="#navbar-example" data-bs-offset="0">

  
  <nav id="navbar-example" class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
    <div class="container-fluid">
      
      <a class="navbar-brand" href="#">Scrollspy 示例a>
      
      <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" 
              aria-controls="navbarNav" aria-expanded="false" aria-label="切换导航">
        <span class="navbar-toggler-icon">span>
      button>
      
      <div class="collapse navbar-collapse" id="navbarNav">
        <ul class="navbar-nav">
          <li class="nav-item">
            <a class="nav-link active" href="#section1">部分 1a>
          li>
          <li class="nav-item">
            <a class="nav-link" href="#section2">部分 2a>
          li>
          <li class="nav-item">
            <a class="nav-link" href="#section3">部分 3a>
          li>
          <li class="nav-item">
            <a class="nav-link" href="#section4">部分 4a>
          li>
        ul>
      div>
    div>
  nav>

  

  
  <div id="section1" class="section">
    <div class="container">
      <h2>部分 1h2>
      <p>
        这是部分 1 的内容。Scrollspy 会根据用户的滚动位置自动更新导航栏中链接的激活状态。
      p>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sit amet accumsan tortor. 
        Itaque hic ipse iam pridem est reiectus; Non est ista recta inductio. 
        Quamquam tu hanc copiosiorem etiam soles dicere. 
        Bonum valitudo: miserum in morbo. 
        Duo Reges: constructio interrete.
      p>
    div>
  div>

  
  <div id="section2" class="section">
    <div class="container">
      <h2>部分 2h2>
      <p>
        这是部分 2 的内容。Scrollspy 会根据用户的滚动位置自动更新导航栏中链接的激活状态。
      p>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sit amet accumsan tortor. 
        Itaque hic ipse iam pridem est reiectus; Non est ista recta inductio. 
        Quamquam tu hanc copiosiorem etiam soles dicere. 
        Bonum valitudo: miserum in morbo. 
        Duo Reges: constructio interrete.
      p>
    div>
  div>

  
  <div id="section3" class="section">
    <div class="container">
      <h2>部分 3h2>
      <p>
        这是部分 3 的内容。Scrollspy 会根据用户的滚动位置自动更新导航栏中链接的激活状态。
      p>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sit amet accumsan tortor. 
        Itaque hic ipse iam pridem est reiectus; Non est ista recta inductio. 
        Quamquam tu hanc copiosiorem etiam soles dicere. 
        Bonum valitudo: miserum in morbo. 
        Duo Reges: constructio interrete.
      p>
    div>
  div>

  
  <div id="section4" class="section">
    <div class="container">
      <h2>部分 4h2>
      <p>
        这是部分 4 的内容。Scrollspy 会根据用户的滚动位置自动更新导航栏中链接的激活状态。
      p>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sit amet accumsan tortor. 
        Itaque hic ipse iam pridem est reiectus; Non est ista recta inductio. 
        Quamquam tu hascopiosiorem etiam soles dicere. 
        Bonum valitudo: miserum in morbo. 
        Duo Reges: constructio interrete.
      p>
    div>
  div>

  
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js">script>
  
  
  <script>
    var scrollSpy = new bootstrap.ScrollSpy(document.body, {
      target: '#navbar-example'
    })
  script>
body>
html>

代码说明

  1. 引入 Bootstrap 5 CSS 和 JS

    • 通过 CDN 引入 Bootstrap 5 的 CSS 和 JS 文件,确保 Scrollspy 功能正常工作。
  2. 导航栏

    • 使用 navbar, navbar-expand-lg, navbar-dark, bg-dark 等类来构建导航栏。
    • fixed-top 类使导航栏固定在页面顶部。
    • data-bs-target="#navbar-example" 指定导航栏的 id,用于关联 Scrollspy。
    • data-bs-spy="scroll" 启用 Scrollspy 功能。
    • data-bs-offset="0" 设置滚动偏移量为 0。
  3. 导航链接

    • 每个导航链接的 href 属性对应内容部分的 id,例如 #section1 对应 id="section1"
    • active 类用于指示当前激活的链接,Scrollspy 会自动更新此状态。
  4. 内容部分

    • 每个内容部分使用 id 属性进行标识,如 id="section1", id="section2" 等。
    • 使用 .section 类来增加每个部分的高度,便于滚动观察效果。
    • 内容部分包含一些示例文本,帮助演示 Scrollspy 的功能。
  5. 自定义样式

    • 增加 bodypadding-top 以补偿固定导航栏的高度,避免内容被遮挡。
    • .section 类添加内边距,使每个部分内容更易读。
  6. 可选的 JavaScript 初始化

    • 虽然使用数据属性已经启用了 Scrollspy,但如果需要更复杂的配置,可以手动初始化 Scrollspy。

运行效果

打开上述代码后,导航栏会固定在页面顶部。当用户滚动页面时,导航栏中对应的链接会根据当前可见的内容部分自动激活。例如,当用户滚动到“部分 2”时,导航栏中的“部分 2”链接会高亮显示,表示当前所在的位置。

三、总结

通过上述内容,我们了解了 Bootstrap 5 Scrollspy 的基本语法和关键属性,并通过一个详细的案例代码展示了如何实现一个功能完善的滚动监听导航栏。

你可能感兴趣的:(网页开发,Bootstrap5,前端开发,bootstrap,学习,前端,javascript,typescript,html,css)