Scrollspy
Bootstrap navigatsiyasini avtomatik ravishda yangilang yoki ko'rish oynasida qaysi havola faol ekanligini ko'rsatish uchun aylantirish holatiga qarab guruh komponentlarini ro'yxatlang.
U qanday ishlaydi
Anchor tomonidan havola qilingan element ko'rinishga aylantirilganda Scrollspy .active
langar ( ) elementlaridagi sinfni almashtiradi. Scrollspy eng yaxshi Bootstrap nav komponenti yoki ro'yxat guruhi bilan birgalikda ishlatiladi , lekin u joriy sahifadagi har qanday langar elementlari bilan ham ishlaydi. Bu qanday ishlaydi.<a>
id
href
-
Boshlash uchun scrollspy ikkita narsani talab qiladi: navigatsiya, ro'yxatlar guruhi yoki oddiy havolalar to'plami, shuningdek aylantiriladigan konteyner. Qaytib olinadigan konteyner va
<body>
to'plamli maxsus element yoki bo'lishi mumkin .height
overflow-y: scroll
-
Qaytib olinadigan konteynerga qo'shing
data-bs-spy="scroll"
vadata-bs-target="#navId"
qayerda bog'langan navigatsiyaningnavId
noyobligi . Klaviaturadan foydalanishni ta'minlash uchunid
a qo'shganingizga ishonch hosil qiling .tabindex="0"
-
“Jsuslangan” konteynerni aylanayotganingizda
.active
sinf qo‘shiladi va tegishli navigatsiya ichidagi langar havolalaridan o‘chiriladi. Havolalar hal qilinadiganid
maqsadlarga ega bo'lishi kerak, aks holda ular e'tiborga olinmaydi. Masalan,<a href="#home">home</a>
DOMdagi biror narsaga mos kelishi kerak<div id="home"></div>
-
Ko'rinmaydigan maqsadli elementlar e'tiborga olinmaydi. Quyidagi " Ko'rinmaydigan elementlar " bo'limiga qarang.
Misollar
Navbar
Navbar ostidagi maydonni aylantiring va faol sinf o'zgarishini kuzating. Ochiladigan menyuni oching va ochiladigan elementlarning ta'kidlanishini ham tomosha qiling.
Birinchi sarlavha
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Ikkinchi sarlavha
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Uchinchi sarlavha
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
To'rtinchi sarlavha
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Beshinchi sarlavha
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
<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>
Ichki nav
Scrollspy ham ichki o'rnatilgan .nav
s bilan ishlaydi. Agar uyali .nav
bo'lsa .active
, uning ota-onasi ham bo'ladi .active
. Navbar yonidagi maydonni aylantiring va faol sinf o'zgarishini kuzating.
1-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Shuni yodda tutingki, JavaScript plagini ko'rinadigan barcha elementlar orasidan to'g'ri elementni tanlashga harakat qiladi. Bir vaqtning o'zida bir nechta ko'rinadigan scrollspy maqsadlari ba'zi muammolarni keltirib chiqarishi mumkin.
1-1-band
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Shuni yodda tutingki, JavaScript plagini ko'rinadigan barcha elementlar orasidan to'g'ri elementni tanlashga harakat qiladi. Bir vaqtning o'zida bir nechta ko'rinadigan scrollspy maqsadlari ba'zi muammolarni keltirib chiqarishi mumkin.
1-2-band
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Shuni yodda tutingki, JavaScript plagini ko'rinadigan barcha elementlar orasidan to'g'ri elementni tanlashga harakat qiladi. Bir vaqtning o'zida bir nechta ko'rinadigan scrollspy maqsadlari ba'zi muammolarni keltirib chiqarishi mumkin.
2-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Shuni yodda tutingki, JavaScript plagini ko'rinadigan barcha elementlar orasidan to'g'ri elementni tanlashga harakat qiladi. Bir vaqtning o'zida bir nechta ko'rinadigan scrollspy maqsadlari ba'zi muammolarni keltirib chiqarishi mumkin.
3-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Shuni yodda tutingki, JavaScript plagini ko'rinadigan barcha elementlar orasidan to'g'ri elementni tanlashga harakat qiladi. Bir vaqtning o'zida bir nechta ko'rinadigan scrollspy maqsadlari ba'zi muammolarni keltirib chiqarishi mumkin.
3-1-band
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Shuni yodda tutingki, JavaScript plagini ko'rinadigan barcha elementlar orasidan to'g'ri elementni tanlashga harakat qiladi. Bir vaqtning o'zida bir nechta ko'rinadigan scrollspy maqsadlari ba'zi muammolarni keltirib chiqarishi mumkin.
3-2-band
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
Shuni yodda tutingki, JavaScript plagini ko'rinadigan barcha elementlar orasidan to'g'ri elementni tanlashga harakat qiladi. Bir vaqtning o'zida bir nechta ko'rinadigan scrollspy maqsadlari ba'zi muammolarni keltirib chiqarishi mumkin.
<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>
Ro'yxat guruhi
Scrollspy .list-group
s bilan ham ishlaydi. Roʻyxat guruhi yonidagi maydonni aylantiring va faol sinf oʻzgarishini kuzating.
1-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
2-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
3-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
4-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
<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>
Oddiy langarlar
Scrollspy faqat nav komponentlari va ro'yxat guruhlari bilan cheklanmaydi, shuning uchun u <a>
joriy hujjatdagi har qanday langar elementlarida ishlaydi. Hududni aylantiring va .active
sinf o'zgarishini tomosha qiling.
1-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
2-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
3-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
4-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
5-modda
Bu scrollspy sahifasi uchun ba'zi to'ldiruvchi kontent. Sahifani pastga aylantirganda, tegishli navigatsiya havolasi ta'kidlanganligini unutmang. Bu komponent misolida takrorlanadi. Oʻtkazish va ajratib koʻrsatishni taʼkidlash uchun biz bu yerga yana bir nechta misol nusxasini qoʻshishda davom etamiz.
<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>
Ko'rinmaydigan elementlar
Ko‘rinmaydigan maqsadli elementlar e’tiborga olinmaydi va ularning mos navbatma-navbat elementlari .active
sinfga ega bo‘lmaydi. Ko'rinmaydigan o'ramda ishga tushirilgan Scrollspy nusxalari barcha maqsadli elementlarni e'tiborsiz qoldiradi. refresh
O'ram ko'rinadigan bo'lsa, kuzatiladigan elementlarni tekshirish uchun usuldan foydalaning .
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()
})
})
Foydalanish
Ma'lumotlar atributlari orqali
Yuqori paneldagi navigatsiyaga osongina scrollspy harakatini qo'shish data-bs-spy="scroll"
uchun josuslik qilmoqchi bo'lgan elementga qo'shing (ko'pincha bu <body>
). Keyin har qanday Bootstrap komponentining asosiy elementi yoki sinf nomi data-bs-target
bilan atributni qo'shing.id
.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>
JavaScript orqali
const scrollSpy = new bootstrap.ScrollSpy(document.body, {
target: '#navbar-example'
})
Variantlar
data-bs-
Variantlar ma'lumotlar atributlari yoki JavaScript orqali uzatilishi mumkinligi sababli , ga variant nomini qo'shishingiz mumkin data-bs-animation="{value}"
. Variantlarni maʼlumotlar atributlari orqali oʻtkazishda variant nomining registr turini “ camelCase ” dan “ kabob-case ” ga oʻzgartirganingizga ishonch hosil qiling. Masalan, data-bs-custom-class="beautifier"
o'rniga foydalaning data-bs-customClass="beautifier"
.
Bootstrap 5.2.0 dan boshlab barcha komponentlar JSON qatori sifatida oddiy komponent konfiguratsiyasini joylashtirishi mumkin bo'lgan eksperimental zahiradagi ma'lumotlar atributini qo'llab-quvvatlaydi. data-bs-config
Element data-bs-config='{"delay":0, "title":123}'
va data-bs-title="456"
atributlariga ega bo'lsa, yakuniy title
qiymat bo'ladi 456
va alohida ma'lumotlar atributlari ga berilgan qiymatlarni bekor qiladi data-bs-config
. Bundan tashqari, mavjud ma'lumotlar atributlari kabi JSON qiymatlarini joylashtirishi mumkin data-bs-delay='{"show":0,"hide":150}'
.
Ism | Turi | Standart | Tavsif |
---|---|---|---|
rootMargin |
ip | 0px 0px -25% |
O'tish joyini hisoblashda kesishuv kuzatuvchisi rootMargin joriy birliklar. |
smoothScroll |
mantiqiy | false |
Foydalanuvchi ScrollSpy kuzatilishi mumkin bo'lgan havolani bosganida silliq aylantirishni yoqadi. |
target |
string, DOM elementi | null |
Scrollspy plaginini qo'llash uchun elementni belgilaydi. |
threshold |
massiv | [0.1, 0.5, 1] |
IntersectionObserver o'tish joyini hisoblashda to'g'ri kirish chegarasi . |
Eskirgan variantlar
5.1.3 ga qadar biz offset
& method
opsiyalaridan foydalanardik, ular endi eskirgan va oʻrniga rootMargin
. offset
Orqaga qarab muvofiqlikni saqlab qolish uchun biz berilgan maʼlumotni tahlil qilishni davom ettiramiz , lekin bu xususiyat v6rootMargin
da oʻchirib tashlanadi .
Usullari
Usul | Tavsif |
---|---|
dispose |
Elementning scrollspy-ni yo'q qiladi. (DOM elementida saqlangan ma'lumotlarni o'chiradi) |
getInstance |
DOM elementi bilan bog'langan scrollspy misolini olish uchun statik usul. |
getOrCreateInstance |
DOM elementi bilan bog'langan scrollspy nusxasini olish yoki agar u ishga tushirilmagan bo'lsa, yangisini yaratish uchun statik usul. |
refresh |
DOM-ga elementlarni qo'shish yoki o'chirishda siz yangilash usulini chaqirishingiz kerak bo'ladi. |
Yangilash usulidan foydalanishga misol:
const dataSpyList = document.querySelectorAll('[data-bs-spy="scroll"]')
dataSpyList.forEach(dataSpyEl => {
bootstrap.ScrollSpy.getInstance(dataSpyEl).refresh()
})
Voqealar
Tadbir | Tavsif |
---|---|
activate.bs.scrollspy |
Bu hodisa scrollspy tomonidan langar faollashtirilganda aylantirish elementida yonadi. |
const firstScrollSpyEl = document.querySelector('[data-bs-spy="scroll"]')
firstScrollSpyEl.addEventListener('activate.bs.scrollspy', () => {
// do something...
})