Scrollspy
Opdater automatisk Bootstrap-navigation eller listegruppekomponenter baseret på rulleposition for at angive, hvilket link der i øjeblikket er aktivt i visningsporten.
Hvordan det virker
Scrollspy har et par krav for at fungere korrekt:
- Det skal bruges på en Bootstrap nav-komponent eller listegruppe .
- Scrollspy kræver
position: relative;det element, du spionerer på, normalt<body>. - Ankre (
<a>) er påkrævet og skal pege på et element med detid.
Når den er implementeret, opdateres din nav- eller listegruppe i overensstemmelse hermed og flytter .activeklassen fra det ene element til det næste baseret på deres tilknyttede mål.
Rulbare containere og tastaturadgang
Hvis du laver en rulbar beholder (andre end <body>), skal du sørge for at have et heightsæt og overflow-y: scroll;anvendt på det – ved siden af en tabindex="0"for at sikre tastaturadgang.
Eksempel i navbar
Rul gennem området under navigeringslinjen, og se den aktive klasse ændre sig. Rullemenupunkterne vil også blive fremhævet.
Første overskrift
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Anden overskrift
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremh��vning.
Tredje overskrift
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Fjerde overskrift
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Femte overskrift
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
<nav id="navbar-example2" class="navbar navbar-light bg-light px-3">
<a class="navbar-brand" href="#">Navbar</a>
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link" href="#scrollspyHeading1">First</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#scrollspyHeading2">Second</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#scrollspyHeading3">Third</a></li>
<li><a class="dropdown-item" href="#scrollspyHeading4">Fourth</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#scrollspyHeading5">Fifth</a></li>
</ul>
</li>
</ul>
</nav>
<div data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-offset="0" class="scrollspy-example" tabindex="0">
<h4 id="scrollspyHeading1">First heading</h4>
<p>...</p>
<h4 id="scrollspyHeading2">Second heading</h4>
<p>...</p>
<h4 id="scrollspyHeading3">Third heading</h4>
<p>...</p>
<h4 id="scrollspyHeading4">Fourth heading</h4>
<p>...</p>
<h4 id="scrollspyHeading5">Fifth heading</h4>
<p>...</p>
</div>
Eksempel med indlejret nav
Scrollspy fungerer også med indlejrede .navs. Hvis en indlejret .naver .active, vil dens forældre også være .active. Rul gennem området ved siden af navigeringslinjen, og se den aktive klasse ændre sig.
Punkt 1
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Punkt 1-1
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Punkt 1-2
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Punkt 2
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Punkt 3
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Punkt 3-1
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Punkt 3-2
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
<nav id="navbar-example3" class="navbar navbar-light bg-light flex-column align-items-stretch p-3">
<a class="navbar-brand" href="#">Navbar</a>
<nav class="nav nav-pills flex-column">
<a class="nav-link" href="#item-1">Item 1</a>
<nav class="nav nav-pills flex-column">
<a class="nav-link ms-3 my-1" href="#item-1-1">Item 1-1</a>
<a class="nav-link ms-3 my-1" href="#item-1-2">Item 1-2</a>
</nav>
<a class="nav-link" href="#item-2">Item 2</a>
<a class="nav-link" href="#item-3">Item 3</a>
<nav class="nav nav-pills flex-column">
<a class="nav-link ms-3 my-1" href="#item-3-1">Item 3-1</a>
<a class="nav-link ms-3 my-1" href="#item-3-2">Item 3-2</a>
</nav>
</nav>
</nav>
<div data-bs-spy="scroll" data-bs-target="#navbar-example3" data-bs-offset="0" tabindex="0">
<h4 id="item-1">Item 1</h4>
<p>...</p>
<h5 id="item-1-1">Item 1-1</h5>
<p>...</p>
<h5 id="item-1-2">Item 1-2</h5>
<p>...</p>
<h4 id="item-2">Item 2</h4>
<p>...</p>
<h4 id="item-3">Item 3</h4>
<p>...</p>
<h5 id="item-3-1">Item 3-1</h5>
<p>...</p>
<h5 id="item-3-2">Item 3-2</h5>
<p>...</p>
</div>
Eksempel med liste-gruppe
Scrollspy fungerer også med .list-groups. Rul i området ved siden af listegruppen, og se den aktive klasse ændre sig.
Punkt 1
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Punkt 2
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Punkt 3
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
Punkt 4
Dette er noget pladsholderindhold til scrollspy-siden. Bemærk, at når du ruller ned på siden, fremhæves det relevante navigationslink. Det gentages i hele komponenteksemplet. Vi bliver ved med at tilføje nogle flere eksempler her for at understrege rulning og fremhævning.
<div id="list-example" class="list-group">
<a class="list-group-item list-group-item-action" href="#list-item-1">Item 1</a>
<a class="list-group-item list-group-item-action" href="#list-item-2">Item 2</a>
<a class="list-group-item list-group-item-action" href="#list-item-3">Item 3</a>
<a class="list-group-item list-group-item-action" href="#list-item-4">Item 4</a>
</div>
<div data-bs-spy="scroll" data-bs-target="#list-example" data-bs-offset="0" class="scrollspy-example" tabindex="0">
<h4 id="list-item-1">Item 1</h4>
<p>...</p>
<h4 id="list-item-2">Item 2</h4>
<p>...</p>
<h4 id="list-item-3">Item 3</h4>
<p>...</p>
<h4 id="list-item-4">Item 4</h4>
<p>...</p>
</div>
Brug
Via dataattributter
For nemt at tilføje scrollspy-adfærd til din topbjælke-navigation, skal du tilføje data-bs-spy="scroll"til det element, du vil spionere på (det vil oftest være <body>). Tilføj derefter data-bs-targetattributten med ID'et eller klassen for det overordnede element for enhver Bootstrap- .navkomponent.
body {
position: relative;
}
<body data-bs-spy="scroll" data-bs-target="#navbar-example">
...
<div id="navbar-example">
<ul class="nav nav-tabs" role="tablist">
...
</ul>
</div>
...
</body>
Via JavaScript
Efter at have tilføjet position: relative;din CSS, ring til scrollspy via JavaScript:
var scrollSpy = new bootstrap.ScrollSpy(document.body, {
target: '#navbar-example'
})
Opløselige ID-mål påkrævet
Navbar-links skal have opløselige id-mål. For eksempel skal et <a href="#home">home</a>svar svare til noget i DOM som <div id="home"></div>.
Ikke-synlige målelementer ignoreret
Målelementer, der ikke er synlige, vil blive ignoreret, og deres tilsvarende nav-elementer vil aldrig blive fremhævet.
Metoder
Opdater
Når du bruger scrollspy i forbindelse med tilføjelse eller fjernelse af elementer fra DOM, skal du kalde opdateringsmetoden sådan:
var dataSpyList = [].slice.call(document.querySelectorAll('[data-bs-spy="scroll"]'))
dataSpyList.forEach(function (dataSpyEl) {
bootstrap.ScrollSpy.getInstance(dataSpyEl)
.refresh()
})
bortskaffe
Ødelægger et elements scrollspy. (Fjerner lagrede data på DOM-elementet)
getInstance
Statisk metode, som giver dig mulighed for at få scrollspy-forekomsten forbundet med et DOM-element
var scrollSpyContentEl = document.getElementById('content')
var scrollSpy = bootstrap.ScrollSpy.getInstance(scrollSpyContentEl) // Returns a Bootstrap scrollspy instance
getOrCreateInstance
Statisk metode, som giver dig mulighed for at få scrollspy-forekomsten tilknyttet et DOM-element eller oprette en ny, hvis den ikke blev initialiseret
var scrollSpyContentEl = document.getElementById('content')
var scrollSpy = bootstrap.ScrollSpy.getOrCreateInstance(scrollSpyContentEl) // Returns a Bootstrap scrollspy instance
Muligheder
Indstillinger kan videregives via dataattributter eller JavaScript. For dataattributter skal du tilføje indstillingsnavnet til data-bs-, som i data-bs-offset="".
| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
offset |
nummer | 10 |
Pixels til forskydning fra toppen ved beregning af rulleposition. |
method |
snor | auto |
Finder hvilken sektion det spionerede element er i. autovil vælge den bedste metode til at få scroll-koordinater. offsetvil bruge Element.getBoundingClientRect()metoden til at få rullekoordinater. positionvil bruge egenskaberne HTMLElement.offsetTopog HTMLElement.offsetLefttil at få rullekoordinater. |
target |
streng | jQuery objekt | DOM element | Angiver element, der skal anvende Scrollspy-plugin. |
Begivenheder
| Begivenhedstype | Beskrivelse |
|---|---|
activate.bs.scrollspy |
Denne hændelse udløses på rulleelementet, når et nyt element bliver aktiveret af scrollspyen. |
var firstScrollSpyEl = document.querySelector('[data-bs-spy="scroll"]')
firstScrollSpyEl.addEventListener('activate.bs.scrollspy', function () {
// do something...
})