Scrollspy
Automaticky aktualizujte navigáciu Bootstrap alebo zoznam komponentov skupiny na základe pozície posúvania, aby ste označili, ktoré prepojenie je momentálne aktívne vo výreze.
Ako to funguje
Scrollspy prepína .active
triedu na <a>
prvkoch kotvy ( ), keď sa prvok, na id
ktorý odkazuje kotva, href
posunie do zobrazenia. Scrollspy sa najlepšie používa v spojení s komponentom Bootstrap nav alebo skupinou zoznamu , ale bude fungovať aj s akýmikoľvek prvkami kotvy na aktuálnej stránke. Tu je návod, ako to funguje.
-
Na začiatok vyžaduje scrollspy dve veci: navigáciu, skupinu zoznamov alebo jednoduchú sadu odkazov a rolovateľný kontajner. Posúvateľný kontajner môže byť
<body>
alebo vlastný prvok so sadouheight
aoverflow-y: scroll
. -
Na posúvateľnom kontajneri pridajte
data-bs-spy="scroll"
adata-bs-target="#navId"
kdenavId
je jedinečnáid
priradená navigácia. Nezabudnite uviesť aj symbol,tabindex="0"
ktorý zabezpečí prístup ku klávesnici. -
Pri posúvaní „špionážneho“ kontajnera sa
.active
trieda pridáva a odstraňuje z kotviacich odkazov v rámci súvisiacej navigácie. Odkazy musia mať rozlíšiteľnéid
ciele, inak sú ignorované. Napríklad,<a href="#home">home</a>
musí zodpovedať niečomu v DOM, ako je<div id="home"></div>
-
Cieľové prvky, ktoré nie sú viditeľné, budú ignorované. Pozrite si časť Neviditeľné prvky nižšie.
Príklady
Navbar
Prejdite oblasťou pod navigačnou lištou a sledujte, ako sa aktívna trieda mení. Otvorte rozbaľovaciu ponuku a sledujte, ako sú zvýraznené aj položky rozbaľovacej ponuky.
Prvý nadpis
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Druhý nadpis
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Tretí nadpis
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Štvrtý nadpis
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Piaty nadpis
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
<nav id="navbar-example2" class="navbar bg-light px-3 mb-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-root-margin="0px 0px -40%" data-bs-smooth-scroll="true" class="scrollspy-example bg-light p-3 rounded-2" 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>
Vnorená navig
Scrollspy funguje aj s vnorenými .nav
s. .nav
Ak je vnorený .active
, jeho rodičia budú tiež .active
. Prejdite oblasťou vedľa navigačného panela a sledujte, ako sa aktívna trieda mení.
Položka 1
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Majte na pamäti, že doplnok JavaScript sa snaží vybrať správny prvok spomedzi všetkých, ktoré môžu byť viditeľné. Viacero viditeľných scrollspy cieľov súčasne môže spôsobiť určité problémy.
Položka 1-1
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Majte na pamäti, že doplnok JavaScript sa snaží vybrať správny prvok spomedzi všetkých, ktoré môžu byť viditeľné. Viacero viditeľných scrollspy cieľov súčasne môže spôsobiť určité problémy.
Položka 1-2
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Majte na pamäti, že doplnok JavaScript sa snaží vybrať správny prvok spomedzi všetkých, ktoré môžu byť viditeľné. Viacero viditeľných scrollspy cieľov súčasne môže spôsobiť určité problémy.
Položka 2
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Majte na pamäti, že doplnok JavaScript sa snaží vybrať správny prvok spomedzi všetkých, ktoré môžu byť viditeľné. Viacero viditeľných scrollspy cieľov súčasne môže spôsobiť určité problémy.
Bod 3
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Majte na pamäti, že doplnok JavaScript sa snaží vybrať správny prvok spomedzi všetkých, ktoré môžu byť viditeľné. Viacero viditeľných scrollspy cieľov súčasne môže spôsobiť určité problémy.
Položka 3-1
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Majte na pamäti, že doplnok JavaScript sa snaží vybrať správny prvok spomedzi všetkých, ktoré môžu byť viditeľné. Viacero viditeľných scrollspy cieľov súčasne môže spôsobiť určité problémy.
Položka 3-2
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Majte na pamäti, že doplnok JavaScript sa snaží vybrať správny prvok spomedzi všetkých, ktoré môžu byť viditeľné. Viacero viditeľných scrollspy cieľov súčasne môže spôsobiť určité problémy.
<div class="row">
<div class="col-4">
<nav id="navbar-example3" class="h-100 flex-column align-items-stretch pe-4 border-end">
<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>
<div class="col-8">
<div data-bs-spy="scroll" data-bs-target="#navbar-example3" data-bs-smooth-scroll="true" class="scrollspy-example-2" tabindex="0">
<div id="item-1">
<h4>Item 1</h4>
<p>...</p>
</div>
<div id="item-1-1">
<h5>Item 1-1</h5>
<p>...</p>
</div>
<div id="item-1-2">
<h5>Item 1-2</h5>
<p>...</p>
</div>
<div id="item-2">
<h4>Item 2</h4>
<p>...</p>
</div>
<div id="item-3">
<h4>Item 3</h4>
<p>...</p>
</div>
<div id="item-3-1">
<h5>Item 3-1</h5>
<p>...</p>
</div>
<div id="item-3-2">
<h5>Item 3-2</h5>
<p>...</p>
</div>
</div>
</div>
</div>
Zoznam skupiny
Scrollspy funguje aj so .list-group
s. Prejdite oblasťou vedľa skupiny zoznamov a sledujte, ako sa aktívna trieda mení.
Položka 1
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Položka 2
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Bod 3
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Bod 4
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
<div class="row">
<div class="col-4">
<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>
<div class="col-8">
<div data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" 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>
</div>
</div>
Jednoduché kotvy
Scrollspy sa neobmedzuje len na komponenty navigácie a skupiny zoznamov, takže bude fungovať na akýchkoľvek <a>
kotviacich prvkoch v aktuálnom dokumente. Posúvajte oblasť a sledujte, ako sa .active
trieda mení.
Položka 1
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Položka 2
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Bod 3
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Bod 4
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
Bod 5
Toto je nejaký zástupný obsah pre stránku scrollspy. Upozorňujeme, že pri posúvaní stránky nadol sa zvýrazní príslušný navigačný odkaz. Opakuje sa v celom príklade komponentu. Stále pridávame niekoľko ďalších vzorových kópií, aby sme zdôraznili posúvanie a zvýrazňovanie.
<div class="row">
<div class="col-4">
<div id="simple-list-example" class="d-flex flex-column gap-2 simple-list-example-scrollspy text-center">
<a class="p-1 rounded" href="#simple-list-item-1">Item 1</a>
<a class="p-1 rounded" href="#simple-list-item-2">Item 2</a>
<a class="p-1 rounded" href="#simple-list-item-3">Item 3</a>
<a class="p-1 rounded" href="#simple-list-item-4">Item 4</a>
<a class="p-1 rounded" href="#simple-list-item-5">Item 5</a>
</div>
</div>
<div class="col-8">
<div data-bs-spy="scroll" data-bs-target="#simple-list-example" data-bs-offset="0" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
<h4 id="simple-list-item-1">Item 1</h4>
<p>...</p>
<h4 id="simple-list-item-2">Item 2</h4>
<p>...</p>
<h4 id="simple-list-item-3">Item 3</h4>
<p>...</p>
<h4 id="simple-list-item-4">Item 4</h4>
<p>...</p>
<h4 id="simple-list-item-5">Item 5</h4>
<p>...</p>
</div>
</div>
</div>
Neviditeľné prvky
Cieľové prvky, ktoré nie sú viditeľné, budú ignorované a ich zodpovedajúce navigačné položky nedostanú .active
triedu. Scrollspy inštancie inicializované v neviditeľnom obale budú ignorovať všetky cieľové prvky. Túto metódu použite refresh
na kontrolu pozorovateľných prvkov, keď sa obal stane viditeľným.
document.querySelectorAll('#nav-tab>[data-bs-toggle="tab"]').forEach(el => {
el.addEventListener('shown.bs.tab', () => {
const target = el.getAttribute('data-bs-target')
const scrollElem = document.querySelector(`${target} [data-bs-spy="scroll"]`)
bootstrap.ScrollSpy.getOrCreateInstance(scrollElem).refresh()
})
})
Použitie
Cez dátové atribúty
Ak chcete jednoducho pridať rolovacie správanie do navigácie v hornej lište, pridajte data-bs-spy="scroll"
prvok, ktorý chcete špehovať (najčastejšie to bude <body>
). Potom pridajte data-bs-target
atribút s id
názvom triedy alebo rodičovského prvku ľubovoľného .nav
komponentu Bootstrap.
<body data-bs-spy="scroll" data-bs-target="#navbar-example">
...
<div id="navbar-example">
<ul class="nav nav-tabs" role="tablist">
...
</ul>
</div>
...
</body>
Cez JavaScript
const scrollSpy = new bootstrap.ScrollSpy(document.body, {
target: '#navbar-example'
})
možnosti
Keďže možnosti možno odovzdať prostredníctvom atribútov údajov alebo jazyka JavaScript, môžete pridať názov možnosti k data-bs-
, ako v data-bs-animation="{value}"
. Pri odovzdávaní možností cez atribúty údajov nezabudnite zmeniť typ prípadu názvu možnosti z „ camelCase “ na „ kebab-case “. Napríklad použite data-bs-custom-class="beautifier"
namiesto data-bs-customClass="beautifier"
.
Od Bootstrapu 5.2.0 všetky komponenty podporujú experimentálny atribút rezervovaných údajov data-bs-config
, ktorý môže obsahovať jednoduchú konfiguráciu komponentu ako reťazec JSON. Ak má prvok atribúty data-bs-config='{"delay":0, "title":123}'
a data-bs-title="456"
, konečná title
hodnota bude 456
a samostatné atribúty údajov prepíšu hodnoty uvedené na data-bs-config
. Existujúce dátové atribúty môžu navyše obsahovať hodnoty JSON ako data-bs-delay='{"show":0,"hide":150}'
.
názov | Typ | Predvolené | Popis |
---|---|---|---|
rootMargin |
reťazec | 0px 0px -25% |
Intersection Observer rootMargin platné jednotky pri výpočte pozície rolovania. |
smoothScroll |
boolovská hodnota | false |
Umožňuje plynulé posúvanie, keď používateľ klikne na odkaz, ktorý odkazuje na pozorovateľné položky ScrollSpy. |
target |
reťazec, prvok DOM | null |
Určuje prvok, na ktorý sa má použiť doplnok Scrollspy. |
threshold |
pole | [0.1, 0.5, 1] |
IntersectionObserver prahový platný vstup pri výpočte polohy rolovania. |
Možnosti s ukončenou podporou
Až do verzie 5.1.3 sme používali možnosti offset
& method
, ktoré sú teraz zastarané a nahradené rootMargin
. Aby sme zachovali spätnú kompatibilitu, budeme pokračovať v analýze daného offset
do rootMargin
, ale táto funkcia bude vo verzii 6 odstránená .
Metódy
Metóda | Popis |
---|---|
dispose |
Zničí scrollspy prvku. (Odstráni uložené údaje v prvku DOM) |
getInstance |
Statická metóda na získanie inštancie scrollspy priradenej k prvku DOM. |
getOrCreateInstance |
Statická metóda na priradenie scrollspy inštancie k prvku DOM alebo na vytvorenie novej v prípade, že nebola inicializovaná. |
refresh |
Pri pridávaní alebo odstraňovaní prvkov v DOM budete musieť zavolať metódu obnovenia. |
Tu je príklad použitia metódy obnovenia:
const dataSpyList = document.querySelectorAll('[data-bs-spy="scroll"]')
dataSpyList.forEach(dataSpyEl => {
bootstrap.ScrollSpy.getInstance(dataSpyEl).refresh()
})
Diania
Udalosť | Popis |
---|---|
activate.bs.scrollspy |
Táto udalosť sa spustí na rolovacom prvku vždy, keď scrollspy aktivuje kotvu. |
const firstScrollSpyEl = document.querySelector('[data-bs-spy="scroll"]')
firstScrollSpyEl.addEventListener('activate.bs.scrollspy', () => {
// do something...
})