Popovers
Dokumentácia a príklady pridávania kontextových okien Bootstrap, ako sú tie, ktoré sa nachádzajú v systéme iOS, do akéhokoľvek prvku na vašej lokalite.
Prehľad
Čo by ste mali vedieť pri používaní popover plugin:
- Popovery sa pri polohovaní spoliehajú na knižnicu Popper tretej strany . Aby popover fungovali, musíte pred bootstrap.js vložiť popper.min.js alebo použiť
bootstrap.bundle.min.js
/bootstrap.bundle.js
ktorý obsahuje Popper! - Popovery vyžadujú doplnok tooltip ako závislosť.
- Vyskakovacie okná sú aktivované z dôvodov výkonu, takže ich musíte inicializovať sami .
- Nulová dĺžka
title
acontent
hodnoty nikdy nezobrazia kontextové okno. - Špecifikujte
container: 'body'
, aby ste sa vyhli problémom s vykresľovaním v zložitejších komponentoch (ako sú naše vstupné skupiny, skupiny tlačidiel atď.). - Spustenie vyskakovacích okien na skrytých prvkoch nebude fungovať.
- Vyskakovacie okná pre prvky
.disabled
alebodisabled
prvky musia byť spustené na prvku obalu. - Pri spustení z kotiev, ktoré sa zalomia cez viacero riadkov, budú vyskakovacie okná vycentrované medzi celkovou šírkou kotiev. Použite
.text-nowrap
na<a>
s, aby ste sa vyhli tomuto správaniu. - Vyskakovacie okná musia byť skryté pred odstránením príslušných prvkov z modelu DOM.
- Popovery môžu byť spustené vďaka prvku vo vnútri tieňového DOM.
prefers-reduced-motion
mediálneho dopytu. Pozrite si
časť so zníženým pohybom v našej dokumentácii o prístupnosti .
Pokračujte v čítaní, aby ste videli, ako fungujú vyskakovacie okná s niekoľkými príkladmi.
Príklad: Povoliť vyskakovacie okná všade
Jedným zo spôsobov, ako inicializovať všetky kontextové okná na stránke, je vybrať ich podľa ich data-bs-toggle
atribútu:
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
})
Príklad: Použitie container
možnosti
Ak máte nejaké štýly v nadradenom prvku, ktoré zasahujú do kontextového okna, budete chcieť zadať vlastný container
, aby sa namiesto toho v tomto prvku objavil kód HTML kontextového okna.
var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
container: 'body'
})
Príklad
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
Štyri smery
K dispozícii sú štyri možnosti: zarovnané hore, vpravo, dole a vľavo. Pokyny sa zrkadlia pri použití Bootstrapu v RTL.
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
Popover on top
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
Popover on right
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
Popover on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
Popover on left
</button>
Zavrieť pri ďalšom kliknutí
Pomocou focus
spúšťača zatvorte kontextové okná pri ďalšom kliknutí používateľa na iný prvok, než je prvok prepínača.
Na zatvorenie pri nasledujúcom kliknutí sa vyžaduje špecifická značka
Pre správne správanie medzi prehliadačmi a platformami musíte použiť <a>
značku, nie značku <button>
, a tiež musíte zahrnúť tabindex
atribút.
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
var popover = new bootstrap.Popover(document.querySelector('.popover-dismiss'), {
trigger: 'focus'
})
Zakázané prvky
Prvky s disabled
atribútom nie sú interaktívne, čo znamená, že používatelia na ne nemôžu umiestniť kurzor myši alebo na ne kliknúť, aby vyvolali kontextové okno (alebo popis). Ako riešenie budete chcieť spustiť vyskakovacie okno z obalu <div>
alebo <span>
, ideálne tak, aby bolo možné zamerať sa na klávesnicu pomocou tabindex="0"
.
V prípade vypnutých spúšťačov kontextových okien môžete tiež uprednostniť data-bs-trigger="hover focus"
, aby sa kontextové okno zobrazovalo vašim používateľom ako okamžitá vizuálna spätná väzba, pretože nemusia očakávať, že kliknú na zakázaný prvok.
<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>
Sass
Premenné
$popover-font-size: $font-size-sm;
$popover-bg: $white;
$popover-max-width: 276px;
$popover-border-width: $border-width;
$popover-border-color: rgba($black, .2);
$popover-border-radius: $border-radius-lg;
$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow: $box-shadow;
$popover-header-bg: shade-color($popover-bg, 6%);
$popover-header-color: $headings-color;
$popover-header-padding-y: .5rem;
$popover-header-padding-x: $spacer;
$popover-body-color: $body-color;
$popover-body-padding-y: $spacer;
$popover-body-padding-x: $spacer;
$popover-arrow-width: 1rem;
$popover-arrow-height: .5rem;
$popover-arrow-color: $popover-bg;
$popover-arrow-outer-color: fade-in($popover-border-color, .05);
Použitie
Povoliť vyskakovacie okná prostredníctvom JavaScriptu:
var exampleEl = document.getElementById('example')
var popover = new bootstrap.Popover(exampleEl, options)
Aby vyskakovacie okná fungovali pre používateľov klávesnice a asistenčných technológií
Aby ste umožnili používateľom klávesnice aktivovať vaše vyskakovacie okná, mali by ste ich pridať iba do prvkov HTML, ktoré sú tradične zamerané na klávesnicu a sú interaktívne (napríklad odkazy alebo ovládacie prvky formulárov). Hoci ľubovoľné prvky HTML (napríklad <span>
s) môžu byť zaostriteľné pridaním tabindex="0"
atribútu, používateľom klávesnice to pridajú potenciálne nepríjemné a mätúce zarážky tabulátora na neinteraktívnych prvkoch a väčšina asistenčných technológií v súčasnosti v tejto situácii neoznamuje obsah kontextového okna. . Okrem toho sa nespoliehajte iba na hover
spúšťač pre vaše kontextové okná, pretože to znemožní ich spustenie pre používateľov klávesnice.
Aj keď pomocou tejto možnosti môžete do kontextových okien vložiť bohatý, štruktúrovaný kód HTML html
, dôrazne vám odporúčame vyhnúť sa pridávaniu nadmerného množstva obsahu. V súčasnosti fungujú kontextové okná tak, že po zobrazení je ich obsah prepojený so spúšťacím prvkom s aria-describedby
atribútom. Výsledkom je, že celý obsah kontextového okna bude oznámený používateľom asistenčných technológií ako jeden dlhý, neprerušovaný stream.
Okrem toho, hoci je možné do kontextového okna zahrnúť aj interaktívne ovládacie prvky (ako sú prvky formulára alebo odkazy) (pridaním týchto prvkov k allowList
povoleným atribútom a značkám), uvedomte si, že kontextové okno v súčasnosti nespravuje poradie zaostrenia klávesnice. Keď používateľ klávesnice otvorí kontextové okno, zameranie zostáva na spúšťací prvok, a keďže kontextové okno zvyčajne nesleduje okamžite spúšťač v štruktúre dokumentu, neexistuje žiadna záruka, že pohyb vpred/stlačenieTABpresunie používateľa klávesnice do samotného kontextového okna. Stručne povedané, jednoduché pridanie interaktívnych ovládacích prvkov do kontextového okna pravdepodobne spôsobí, že tieto ovládacie prvky budú nedostupné/nepoužiteľné pre používateľov klávesnice a používateľov asistenčných technológií, alebo prinajmenšom spôsobí nelogické celkové poradie zamerania. V týchto prípadoch zvážte použitie modálneho dialógu.
možnosti
Možnosti môžu byť odovzdané prostredníctvom dátových atribútov alebo JavaScriptu. Pre atribúty údajov pripojte názov voľby k data-bs-
, ako v data-bs-animation=""
. Pri odovzdávaní možností cez dátové atribúty nezabudnite zmeniť typ prípadu názvu možnosti z camelCase na kebab-case. Napríklad namiesto použitia data-bs-customClass="beautifier"
použite data-bs-custom-class="beautifier"
.
sanitize
,
sanitizeFn
, a
dodať pomocou atribútov údajov.allowList
názov | Typ | Predvolené | Popis |
---|---|---|---|
animation |
boolovská hodnota | true |
Na vyskakovacie okno použite prechod zoslabovania CSS |
container |
reťazec | prvok | falošný | false |
Pripojí kontextové okno ku konkrétnemu prvku. Príklad: |
content |
reťazec | prvok | funkciu | '' |
Ak je zadaná funkcia, bude volaná s |
delay |
číslo | objekt | 0 |
Oneskorenie zobrazenia a skrytia popoveru (ms) – netýka sa manuálneho typu spúšťania Ak je zadané číslo, oneskorenie sa použije na skrytie/zobrazenie Štruktúra objektu je: |
html |
boolovská hodnota | false |
Vložte HTML do kontextového okna. Ak je hodnota false, innerText vlastnosť sa použije na vloženie obsahu do modelu DOM. Ak sa obávate útokov XSS, použite text. |
placement |
reťazec | funkciu | 'right' |
Ako umiestniť popover - auto | hore | dole | vľavo | správny. Keď sa na určenie umiestnenia použije funkcia, volá sa s popover uzlom DOM ako jej prvým argumentom a spúšťacím prvkom DOM uzlom ako jej druhým. Kontext |
selector |
reťazec | falošný | false |
Ak je poskytnutý selektor, popover objekty budú delegované na špecifikované ciele. V praxi sa to používa na umožnenie pridávania vyskakovacích okien do dynamického obsahu HTML. Pozrite si tento a informatívny príklad . |
template |
reťazec | '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>' |
Základné HTML, ktoré sa má použiť pri vytváraní kontextového okna. Popover Popover
Prvok vonkajšieho obalu by mal mať |
title |
reťazec | prvok | funkciu | '' |
Predvolená hodnota názvu, ak Ak je zadaná funkcia, bude volaná s |
trigger |
reťazec | 'click' |
Ako sa spúšťa kontextové okno - kliknite | vznášať sa | zameranie | Manuálny. Môžete prejsť viacerými spúšťačmi; oddeľte ich medzerou. manual nie je možné kombinovať so žiadnym iným spúšťačom. |
fallbackPlacements |
pole | ['top', 'right', 'bottom', 'left'] |
Definujte záložné umiestnenia poskytnutím zoznamu umiestnení v poli (v poradí podľa preferencie). Ďalšie informácie nájdete v dokumentoch o správaní Poppera |
boundary |
reťazec | prvok | 'clippingParents' |
Hranica obmedzenia pretečenia kontextového okna (platí len pre Popperov modifikátor preventOverflow). V predvolenom nastavení je 'clippingParents' a môže akceptovať referenciu HTMLElement (iba cez JavaScript). Ďalšie informácie nájdete v dokumentoch Popper's detectOverflow . |
customClass |
reťazec | funkciu | '' |
Pridajte triedy do kontextového okna, keď sa zobrazí. Všimnite si, že tieto triedy budú pridané k všetkým triedam špecifikovaným v šablóne. Ak chcete pridať viacero tried, oddeľte ich medzerami: Môžete tiež odovzdať funkciu, ktorá by mala vrátiť jeden reťazec obsahujúci ďalšie názvy tried. |
sanitize |
boolovská hodnota | true |
Povoliť alebo zakázať dezinfekciu. Ak je aktivovaný 'template' , 'content' a 'title' možnosti budú dezinfikované. Pozrite si sekciu dezinfekcie v našej dokumentácii JavaScript . |
allowList |
objekt | Predvolená hodnota | Objekt, ktorý obsahuje povolené atribúty a značky |
sanitizeFn |
null | funkciu | null |
Tu si môžete dodať vlastnú funkciu dezinfekcie. To môže byť užitočné, ak uprednostňujete použitie špeciálnej knižnice na vykonanie dezinfekcie. |
offset |
pole | reťazec | funkciu | [0, 8] |
Posun vyskakovacieho okna vzhľadom na jeho cieľ. V atribútoch údajov môžete zadať reťazec s hodnotami oddelenými čiarkou, ako sú: Keď sa funkcia používa na určenie posunu, volá sa s objektom obsahujúcim umiestnenie popper, referenciu a popper rects ako svoj prvý argument. Uzol DOM spúšťacieho prvku sa odovzdá ako druhý argument. Funkcia musí vrátiť pole s dvoma číslami: . Ďalšie informácie nájdete v dokumentoch Popper's ofset . |
popperConfig |
null | objekt | funkciu | null |
Ak chcete zmeniť predvolenú konfiguráciu Popper pre Bootstrap, pozrite si Konfiguráciu Poppera . Keď sa funkcia používa na vytvorenie konfigurácie Popper, volá sa s objektom, ktorý obsahuje predvolenú konfiguráciu Popper Bootstrapu. Pomôže vám použiť a zlúčiť predvolené nastavenie s vašou vlastnou konfiguráciou. Funkcia musí vrátiť konfiguračný objekt pre Popper. |
Atribúty údajov pre jednotlivé kontextové okná
Možnosti pre jednotlivé kontextové okná možno alternatívne špecifikovať pomocou atribútov údajov, ako je vysvetlené vyššie.
Použitie funkcie spopperConfig
var popover = new bootstrap.Popover(element, {
popperConfig: function (defaultBsPopperConfig) {
// var newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Metódy
Asynchrónne metódy a prechody
Všetky metódy API sú asynchrónne a spúšťajú prechod . Vrátia sa k volajúcemu hneď po spustení prechodu, ale skôr, ako sa skončí . Okrem toho bude volanie metódy na prechodovom komponente ignorované .
šou
Odhalí vyskakovací prvok prvku. Vráti sa k volajúcemu skôr, ako sa skutočne zobrazí kontextové okno (tj predtým, ako shown.bs.popover
dôjde k udalosti). Toto sa považuje za „manuálne“ spustenie vyskakovacieho okna. Kontextové okná, ktorých názov aj obsah majú nulovú dĺžku, sa nikdy nezobrazia.
myPopover.show()
skryť
Skryje popover prvku. Vráti sa k volajúcemu skôr, ako sa kontextové okno skutočne skrylo (tj predtým, ako hidden.bs.popover
nastane udalosť). Toto sa považuje za „manuálne“ spustenie vyskakovacieho okna.
myPopover.hide()
prepnúť
Prepína kontextové okno prvku. Vráti sa k volajúcemu predtým, ako sa kontextové okno skutočne zobrazí alebo skryje (tj predtým, ako nastane udalosť shown.bs.popover
alebo ). hidden.bs.popover
Toto sa považuje za „manuálne“ spustenie vyskakovacieho okna.
myPopover.toggle()
disponovať
Skryje a zničí popover prvku (odstráni uložené údaje v prvku DOM). Vyskakovacie okná, ktoré používajú delegovanie (ktoré sú vytvorené pomocou voľby ) selector
, nemožno jednotlivo zničiť na podradených spúšťacích prvkoch.
myPopover.dispose()
povoliť
Umožňuje zobrazenie kontextového okna prvku. Popovers sú predvolene povolené.
myPopover.enable()
zakázať
Odstráni možnosť zobrazenia kontextového okna prvku. Kontextové okno sa bude môcť zobraziť iba vtedy, ak bude znova povolené.
myPopover.disable()
toggleEnabled
Prepína možnosť zobrazenia alebo skrytia kontextového okna prvku.
myPopover.toggleEnabled()
aktualizovať
Aktualizuje pozíciu kontextového okna prvku.
myPopover.update()
getInstance
Statická metóda, ktorá vám umožňuje získať inštanciu popover spojenú s prvkom DOM
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
getOrCreateInstance
Statická metóda, ktorá vám umožňuje získať inštanciu popover priradenú k prvku DOM alebo vytvoriť novú v prípade, že nebola inicializovaná
var exampleTriggerEl = document.getElementById('example')
var popover = bootstrap.Popover.getOrCreateInstance(exampleTriggerEl) // Returns a Bootstrap popover instance
Diania
Typ udalosti | Popis |
---|---|
show.bs.popover | Táto udalosť sa spustí okamžite po show zavolaní metódy inštancie. |
zobrazený.bs.popover | Táto udalosť sa spustí, keď sa kontextové okno zobrazí používateľovi (bude čakať na dokončenie prechodov CSS). |
skryť.bs.popover | Táto udalosť sa spustí okamžite po hide zavolaní metódy inštancie. |
skrytý.bs.popover | Táto udalosť sa spustí, keď sa ukončí skrytie kontextového okna pred používateľom (bude čakať na dokončenie prechodov CSS). |
vložený.bs.popover | Táto udalosť sa spustí po show.bs.popover udalosti, keď bola do modelu DOM pridaná šablóna kontextového okna. |
var myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', function () {
// do something...
})