Scrollspy
Automatiškai atnaujinkite Bootstrap naršymą arba sąrašo grupės komponentus pagal slinkties padėtį, kad nurodytumėte, kuri nuoroda šiuo metu aktyvi peržiūros srityje.
Kaip tai veikia
Scrollspy perjungia .active
klasę inkaro ( <a>
) elementuose, kai elementas su prierašo id
nuoroda href
yra slenkamas į rodinį. „Scrollspy“ geriausia naudoti kartu su „Bootstrap“ navigacijos komponentu arba sąrašo grupe , tačiau jis taip pat veiks su bet kokiais prierašo elementais dabartiniame puslapyje. Štai kaip tai veikia.
-
Norėdami pradėti, scrollspy reikia dviejų dalykų: naršymo, sąrašų grupės arba paprasto nuorodų rinkinio ir slenkamo konteinerio. Slenkamas sudėtinis rodinys gali būti
<body>
arba pasirinktinis elementas su rinkiniuheight
iroverflow-y: scroll
. -
Slenkamajame sudėtiniame rodinyje pridėkite
data-bs-spy="scroll"
irdata-bs-target="#navId"
kurnavId
yra unikalusid
susietas naršymas. Taip pat būtinai įtraukite atabindex="0"
, kad užtikrintumėte prieigą prie klaviatūros. -
Kai slenkate „šnipinėjimo“ konteineriu,
.active
klasė pridedama ir pašalinama iš susietos naršymo nuorodos. Nuorodos turi turėti išsprendžiamusid
tikslus, priešingu atveju jų nepaisoma. Pavyzdžiui,<a href="#home">home</a>
turi atitikti kažką DOM panašaus<div id="home"></div>
-
Tiksliniai elementai, kurie nematomi, bus ignoruojami. Žr. toliau esantį skyrių „Nematomi elementai “.
Pavyzdžiai
Navigacijos juosta
Slinkite po naršymo juosta esančia sritimi ir stebėkite aktyvios klasės pasikeitimą. Atidarykite išskleidžiamąjį meniu ir žiūrėkite, kad išskleidžiamieji elementai taip pat būtų paryškinti.
Pirma antraštė
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Antroji antraštė
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Trečia antraštė
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Ketvirta antraštė
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Penkta antraštė
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
<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>
Įdėta navigacija
Scrollspy taip pat veikia su įdėtomis .nav
s. Jei įdėtas .nav
yra .active
, jo tėvai taip pat bus .active
. Slinkite šalia naršymo juostos esančia zona ir stebėkite, kaip keičiasi aktyvi klasė.
1 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Atminkite, kad „JavaScript“ papildinys bando pasirinkti tinkamą elementą iš visų, kurie gali būti matomi. Keli matomi scrollspy taikiniai vienu metu gali sukelti tam tikrų problemų.
1-1 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Atminkite, kad „JavaScript“ papildinys bando pasirinkti tinkamą elementą iš visų, kurie gali būti matomi. Keli matomi scrollspy taikiniai vienu metu gali sukelti tam tikrų problemų.
1-2 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Atminkite, kad „JavaScript“ papildinys bando pasirinkti tinkamą elementą iš visų, kurie gali būti matomi. Keli matomi scrollspy taikiniai vienu metu gali sukelti tam tikrų problemų.
2 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Atminkite, kad „JavaScript“ papildinys bando pasirinkti tinkamą elementą iš visų, kurie gali būti matomi. Keli matomi scrollspy taikiniai vienu metu gali sukelti tam tikrų problemų.
3 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Atminkite, kad „JavaScript“ papildinys bando pasirinkti tinkamą elementą iš visų, kurie gali būti matomi. Keli matomi scrollspy taikiniai vienu metu gali sukelti tam tikrų problemų.
3-1 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Atminkite, kad „JavaScript“ papildinys bando pasirinkti tinkamą elementą iš visų, kurie gali būti matomi. Keli matomi scrollspy taikiniai vienu metu gali sukelti tam tikrų problemų.
3-2 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
Atminkite, kad „JavaScript“ papildinys bando pasirinkti tinkamą elementą iš visų, kurie gali būti matomi. Keli matomi scrollspy taikiniai vienu metu gali sukelti tam tikrų problemų.
<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>
Sąrašo grupė
Scrollspy taip pat veikia su .list-group
s. Slinkite šalia sąrašo grupės esančia sritimi ir stebėkite aktyvios klasės pasikeitimą.
1 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
2 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
3 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
4 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
<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>
Paprasti inkarai
„Scrollspy“ neapsiriboja navigacijos komponentais ir sąrašų grupėmis, todėl jis veiks su bet <a>
kuriais dabartinio dokumento inkaro elementais. Slinkite sritį ir stebėkite, kaip .active
keičiasi klasė.
1 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
2 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
3 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
4 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
5 punktas
Tai yra tam tikras „scrollspy“ puslapio rezervuotos vietos turinys. Atminkite, kad slenkant puslapiu žemyn, paryškinama atitinkama naršymo nuoroda. Tai kartojama visame komponento pavyzdyje. Čia nuolat pridedame dar keletą pavyzdžių, kad pabrėžtume slinkimą ir paryškinimą.
<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>
Nematomi elementai
Tiksliniai elementai, kurie nematomi, bus ignoruojami, o atitinkami navigacijos elementai negaus .active
klasės. Scrollspy egzemplioriai, inicijuoti nematomame pakete, nepaisys visų tikslinių elementų. Naudokite šį refresh
metodą, kad patikrintumėte, ar nėra pastebimų elementų, kai įvynioklis tampa matomas.
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()
})
})
Naudojimas
Per duomenų atributus
Norėdami lengvai pridėti slinkties elgseną prie viršutinės juostos naršymo, pridėkite data-bs-spy="scroll"
elementą, kurį norite šnipinėti (dažniausiai tai būtų <body>
). Tada pridėkite data-bs-target
atributą su bet kurio Bootstrap komponento id
pirminio elemento arba klasės pavadinimu ..nav
<body data-bs-spy="scroll" data-bs-target="#navbar-example">
...
<div id="navbar-example">
<ul class="nav nav-tabs" role="tablist">
...
</ul>
</div>
...
</body>
Per JavaScript
const scrollSpy = new bootstrap.ScrollSpy(document.body, {
target: '#navbar-example'
})
Galimybės
Kadangi parinktis galima perduoti naudojant duomenų atributus arba „JavaScript“, galite pridėti parinkties pavadinimą prie data-bs-
, kaip ir data-bs-animation="{value}"
. Perduodant parinktis per duomenų atributus , būtinai pakeiskite parinkties pavadinimo didžiosios raidės tipą iš „ camelCase “ į „ kebab-case “. Pavyzdžiui, naudokite data-bs-custom-class="beautifier"
vietoj data-bs-customClass="beautifier"
.
Nuo 5.2.0 versijos „Bootstrap“ visi komponentai palaiko eksperimentinį rezervuotų duomenų atributą data-bs-config
, kuriame galima laikyti paprastą komponento konfigūraciją kaip JSON eilutę. Kai elementas turi data-bs-config='{"delay":0, "title":123}'
ir data-bs-title="456"
atributus, galutinė title
reikšmė bus 456
ir atskiri duomenų atributai nepaisys reikšmių, pateiktų data-bs-config
. Be to, esamuose duomenų atributuose gali būti JSON reikšmės, pvz ., data-bs-delay='{"show":0,"hide":150}'
.
vardas | Tipas | Numatytas | apibūdinimas |
---|---|---|---|
rootMargin |
styga | 0px 0px -25% |
Sankryža Stebėtojo šakninė marža , galiojantys vienetai, skaičiuojant slinkties padėtį. |
smoothScroll |
loginis | false |
Įgalina sklandų slinkimą, kai vartotojas spusteli nuorodą, kuri nurodo „ScrollSpy“ stebimus objektus. |
target |
eilutė, DOM elementas | null |
Nurodo elementą, kurį reikia taikyti „Scrollspy“ papildiniui. |
threshold |
masyvas | [0.1, 0.5, 1] |
IntersectionObserver slenkstis galiojantis įvestis, skaičiuojant slinkties padėtį. |
Nebenaudojamos parinktys
Iki 5.1.3 versijos naudojome offset
& method
parinktis, kurios dabar nebenaudojamos ir pakeistos rootMargin
. Siekdami išlaikyti atgalinį suderinamumą, toliau analizuosime duotus offset
duomenis rootMargin
, bet ši funkcija bus pašalinta naudojant v6 .
Metodai
Metodas | apibūdinimas |
---|---|
dispose |
Sunaikina elemento slinktį. (Pašalina saugomus duomenis DOM elemente) |
getInstance |
Statinis metodas, skirtas gauti scrollspy egzempliorių, susietą su DOM elementu. |
getOrCreateInstance |
Statinis metodas, skirtas gauti scrollspy egzempliorių, susietą su DOM elementu, arba sukurti naują, jei jis nebuvo inicijuotas. |
refresh |
Pridėdami arba pašalindami elementus iš DOM, turėsite iškviesti atnaujinimo metodą. |
Štai pavyzdys naudojant atnaujinimo metodą:
const dataSpyList = document.querySelectorAll('[data-bs-spy="scroll"]')
dataSpyList.forEach(dataSpyEl => {
bootstrap.ScrollSpy.getInstance(dataSpyEl).refresh()
})
Renginiai
Renginys | apibūdinimas |
---|---|
activate.bs.scrollspy |
Šis įvykis suaktyvinamas slinkties elemente, kai „scrollspy“ suaktyvina inkarą. |
const firstScrollSpyEl = document.querySelector('[data-bs-spy="scroll"]')
firstScrollSpyEl.addEventListener('activate.bs.scrollspy', () => {
// do something...
})