Scrollspy
Navîgasyona Bootstrap-ê bixweber nûve bikin an jî pêkhateyên komê li gorî pozîsyona gerokê navnîş bikin da ku destnîşan bikin ka kîjan girêdan niha di dîmenderê de çalak e.
Çawa dixebite
Scrollspy .active
çîna li ser <a>
hêmanên ankerê ( ) diguherîne dema ku hêmana ku id
ji hêla lengerê ve hatî referanskirin li href
ber çavan tê gerandin. Scrollspy çêtirîn bi pêwendiyek bi hêmanek navokê ya Bootstrap an koma navnîşê re tê bikar anîn , lê ew ê di rûpela heyî de bi her hêmanên ankerê re jî bixebite . Li vir çawa dixebite.
-
Ji bo destpêkirinê, scrollspy du tiştan hewce dike: navîgasyon, komek navnîş, an komek hêsan a lînkan, plus konteynirek gerok. Konteynirê scrollable dikare bibe
<body>
an hêmanek xwerû ya bi setheight
ûoverflow-y: scroll
. -
Li ser konteynirê ya gerok, lê zêde bike
data-bs-spy="scroll"
ûdata-bs-target="#navId"
li kunavId
ye yektaid
navîgasyona têkildar. Bawer bikin ku di heman demê de jitabindex="0"
bo ku gihîştina klavyeyê piştrast bikin. -
Gava ku hûn konteynera "sîxurî" digerînin,
.active
çînek ji girêdanên lengerê di nav navîgasyona têkildar de tê zêdekirin û jêbirin. Pêdivî ye ku girêdan xwedîid
armancên çareserker bin, wekî din ew têne paşguh kirin. Mînakî,<a href="#home">home</a>
pêdivî ye ku bi tiştek di DOM-ê de mîna hev re têkildar be<div id="home"></div>
-
Hêmanên armanc ên ku nayên dîtin dê bêne paşguh kirin. Binêre beşa hêmanên ne-xuya li jêr.
Examples
Navbar
Li qada li jêr navbarê bigerin û li guhertina çîna çalak temaşe bikin. Menuya dakêşanê vekin û temaşe bikin ku hêmanên dakêşanê jî têne ronî kirin.
Sernavê yekem
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Sernavê duyemîn
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Sernavê sêyemîn
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Sernavê çaremîn
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Sernavê pêncemîn
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
<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>
Nav hêlîn
Scrollspy jî bi .nav
s hêlînên dixebite. Heger hêlînek .nav
be .active
dê û bavê wî jî bibin .active
. Li qada li kêleka navbarê bigerin û li guhertina çîna çalak temaşe bikin.
Babetê 1
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Bînin bîra xwe ku pêveka JavaScript hewl dide ku di nav her tiştê ku xuya dibe de hêmana rast hilbijêre. Di heman demê de gelek armancên scrollspy xuya dibe ku dibe sedema hin pirsgirêkan.
Babetê 1-1
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Bînin bîra xwe ku pêveka JavaScript hewl dide ku di nav her tiştê ku xuya dibe de hêmana rast hilbijêre. Di heman demê de gelek armancên scrollspy xuya dibe ku dibe sedema hin pirsgirêkan.
Babetê 1-2
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Bînin bîra xwe ku pêveka JavaScript hewl dide ku di nav her tiştê ku xuya dibe de hêmana rast hilbijêre. Di heman demê de gelek armancên scrollspy xuya dibe ku dibe sedema hin pirsgirêkan.
Babetê 2
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Bînin bîra xwe ku pêveka JavaScript hewl dide ku di nav her tiştê ku xuya dibe de hêmana rast hilbijêre. Di heman demê de gelek armancên scrollspy xuya dibe ku dibe sedema hin pirsgirêkan.
Babetê 3
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Bînin bîra xwe ku pêveka JavaScript hewl dide ku di nav her tiştê ku xuya dibe de hêmana rast hilbijêre. Di heman demê de gelek armancên scrollspy xuya dibe ku dibe sedema hin pirsgirêkan.
Babetê 3-1
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Bînin bîra xwe ku pêveka JavaScript hewl dide ku di nav her tiştê ku xuya dibe de hêmana rast hilbijêre. Di heman demê de gelek armancên scrollspy xuya dibe ku dibe sedema hin pirsgirêkan.
Babetê 3-2
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Bînin bîra xwe ku pêveka JavaScript hewl dide ku di nav her tiştê ku xuya dibe de hêmana rast hilbijêre. Di heman demê de gelek armancên scrollspy xuya dibe ku dibe sedema hin pirsgirêkan.
<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>
Lîsteya koma
Scrollspy jî bi .list-group
s dixebite. Li qada li kêleka koma navnîşê bigerin û li guhertina çîna çalak temaşe bikin.
Babetê 1
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Babetê 2
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Babetê 3
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Babetê 4
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
<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>
Ankerên hêsan
Scrollspy bi hêmanên nav û komên navnîşê ve ne sînorkirî ye, ji ber vê yekê ew ê li ser her <a>
hêmanên ankerê yên di belgeya heyî de bixebite. Li herêmê bigerin û li .active
guherîna polê temaşe bikin.
Babetê 1
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Babetê 2
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Babetê 3
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Babetê 4
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
Babetê 5
Ev ji bo rûpela scrollspy hin naverokek cîhgir e. Bala xwe bidinê ku gava hûn rûpelê dakêşin, zencîreya navîgasyonê ya guncan tê ronî kirin. Ew li seranserê nimûneya pêkhatê tê dubare kirin. Em li vir kopiyek mînakek din lê zêde dikin da ku balê bikişîne ser gerok û ronîkirinê.
<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>
hêmanên ne-dîtbar
.active
Hêmanên mebest ên ku ne diyar in dê werin paşguh kirin û tiştên navika wan ên têkildar dê çînek nestînin . Mînakên Scrollspy yên ku di pêçekek ne-xuyarî de hatine destpêkirin dê hemî hêmanên armancê paşguh bike. Methodê bikar bînin refresh
ku hûn hêmanên çavdêriyê kontrol bikin gava ku pêça xuya dibe.
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()
})
})
Bikaranîna
Bi taybetmendiyên daneyê
Ji bo ku bi hêsanî behreya scrollspy li navîgasyona xweya jorîn zêde data-bs-spy="scroll"
bikin, li hêmana ku hûn dixwazin bişopînin lê zêde bikin (bi gelemperî ev dê bibe <body>
). Dûv re data-bs-target
taybetmendiyê bi nav id
an pola hêmana dêûbavê ya her .nav
pêkhateyek Bootstrap ve zêde bikin.
<body data-bs-spy="scroll" data-bs-target="#navbar-example">
...
<div id="navbar-example">
<ul class="nav nav-tabs" role="tablist">
...
</ul>
</div>
...
</body>
Bi JavaScript
const scrollSpy = new bootstrap.ScrollSpy(document.body, {
target: '#navbar-example'
})
Vebijêrk
Ji ber ku vebijark dikarin bi taybetmendiyên daneyan an JavaScriptê ve werin derbas kirin, hûn dikarin navek vebijarkê lê zêde bikin data-bs-
, wekî di data-bs-animation="{value}"
. Dema ku vebijarkan bi taybetmendiyên daneyê re derbas bikin, pê ewle bin ku hûn celebê doza navê vebijarkê ji " camelCase " veguherînin " kebab-case ". Mînakî, data-bs-custom-class="beautifier"
li şûna bikar bînin data-bs-customClass="beautifier"
.
Ji Bootstrap 5.2.0-ê, hemî pêkhate taybetmendiyek daneya veqetandî ya ceribandinêdata-bs-config
piştgirî dikin ku dikare veavakirina hêmanek hêsan wekî rêzek JSON bihewîne. Dema ku hêmanek hebe data-bs-config='{"delay":0, "title":123}'
û data-bs-title="456"
taybetmendî hebe, nirxa paşîn title
dê bibe 456
û taybetmendiyên daneya veqetandî dê nirxên ku li ser hatine dayîn derbas bikin data-bs-config
. Digel vê yekê, taybetmendiyên daneya heyî dikarin nirxên JSON ên mîna data-bs-delay='{"show":0,"hide":150}'
.
Nav | Awa | Destçûnî | Terîf |
---|---|---|---|
rootMargin |
ben | 0px 0px -25% |
Yekîneyên derbasdar RootMargin Çavdêrê Intersection , dema ku pozîsyona gerîdeyê tê hesibandin. |
smoothScroll |
boolean | false |
Dema ku bikarhênerek li ser zencîreyek ku ji çavdêriyên ScrollSpy re vedibêje bikirtîne gerîdeya nerm çalak dike. |
target |
string, hêmana DOM | null |
Hêmanek diyar dike ku pêveka Scrollspy bicîh bîne. |
threshold |
rêzî | [0.1, 0.5, 1] |
IntersectionObserver ketina derbasdar a sînor , dema ku pozîsyona gerokê tê hesibandin. |
Vebijêrkên Deprecated
Heya v5.1.3, me offset
& method
vebijark bikar dianîn, ku nuha hatine paşguh kirin û bi rootMargin
. Ji bo ku lihevhatina paşverû bihêlin, em ê parskirina danasînê bidomînin , lê ev taybetmendî dê di v6offset
de were rakirin .rootMargin
Methods
Awa | Terîf |
---|---|
dispose |
Scrollspy ya hêmanek hilweşîne. (Daneyên hilanîn ên li ser hêmana DOM-ê radike) |
getInstance |
Rêbaza statîk ji bo bidestxistina mînaka scrollspy ya ku bi hêmanek DOM-ê ve girêdayî ye. |
getOrCreateInstance |
Rêbaza statîk ji bo bidestxistina mînaka scrollspy-ê ya ku bi hêmanek DOM-ê ve girêdayî ye, an jî ji bo afirandina yek nû heke ew nehatibe destpêkirin. |
refresh |
Dema ku hêmanên li DOM-ê zêde bikin an jêbirin, hûn ê hewce bikin ku rêbaza nûvekirinê bang bikin. |
Li vir mînakek bi karanîna rêbaza nûvekirinê heye:
const dataSpyList = document.querySelectorAll('[data-bs-spy="scroll"]')
dataSpyList.forEach(dataSpyEl => {
bootstrap.ScrollSpy.getInstance(dataSpyEl).refresh()
})
Events
Bûyer | Terîf |
---|---|
activate.bs.scrollspy |
Dema ku lengerek ji hêla scrollspy ve tê çalak kirin ev bûyer li ser hêmana gerokê dişewite. |
const firstScrollSpyEl = document.querySelector('[data-bs-spy="scroll"]')
firstScrollSpyEl.addEventListener('activate.bs.scrollspy', () => {
// do something...
})