JavaScript
Äratage Bootstrap ellu meie valikuliste JavaScripti pistikprogrammidega. Lisateave iga pistikprogrammi, meie andmete ja programmilise API valikute ning muu kohta.
Individuaalne või koostatud
Pluginad saab lisada üksikult (kasutades Bootstrapi individuaalset funktsiooni js/dist/*.js
) või kõik korraga, kasutades bootstrap.js
või minimeeritud bootstrap.min.js
(ärge kaasake mõlemat).
Kui kasutate komplekteerijat (Webpack, Pack, Vite jne), saate kasutada /js/dist/*.js
faile, mis on UMD-valmidusega.
Kasutamine JavaScripti raamistikega
Kuigi Bootstrap CSS-i saab kasutada mis tahes raamistikuga, ei ühildu Bootstrap JavaScript täielikult JavaScripti raamistikega, nagu React, Vue ja Angular, mis eeldavad täielikke teadmisi DOM-i kohta. Nii Bootstrap kui ka raamistik võivad üritada muteerida sama DOM-i elementi, mille tulemuseks on vead, näiteks rippmenüüd, mis on kinni jäänud asendisse "avatud".
Parem alternatiiv seda tüüpi raamistike kasutajatele on kasutada Bootstrap JavaScripti asemel raamistikupõhist paketti. Siin on mõned kõige populaarsemad valikud.
- Reageerida: reageerida Bootstrapile
- Vue: BootstrapVue (toetab praegu ainult Vue 2 ja Bootstrap 4)
- Nurk: ng-bootstrap
Bootstrapi kasutamine moodulina
Pakume Bootstrapi versiooni, mis on ehitatud kui ESM
( bootstrap.esm.js
ja bootstrap.esm.min.js
), mis võimaldab teil kasutada Bootstrapi brauseris moodulina, kui teie sihitud brauserid seda toetavad .
<script type="module">
import { Toast } from 'bootstrap.esm.min.js'
Array.from(document.querySelectorAll('.toast'))
.forEach(toastNode => new Toast(toastNode))
</script>
Võrreldes JS-i komplekteerijatega nõuab ESM-i kasutamine brauseris mooduli nime asemel täieliku tee ja failinime kasutamist. Loe lähemalt JS-moodulite kohta brauseris. Sellepärast kasutame ülaltoodud 'bootstrap.esm.min.js'
asemel . 'bootstrap'
Kuid selle muudab veelgi keerulisemaks meie Popperi sõltuvus, mis impordib Popperi meie JavaScripti järgmiselt:
import * as Popper from "@popperjs/core"
Kui proovite seda praegusel kujul, näete konsoolis järgmist tõrget:
Uncaught TypeError: Failed to resolve module specifier "@popperjs/core". Relative references must start with either "/", "./", or "../".
Selle parandamiseks saate kasutada importmap
suvaliste moodulite nimede lahendamiseks teede lõpuleviimiseks. Kui teie sihitud brauserid ei toeta importmap
, peate kasutama projekti es-module-shims . Bootstrapi ja Popperi puhul toimib see järgmiselt.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">
<title>Hello, modularity!</title>
</head>
<body>
<h1>Hello, modularity!</h1>
<button id="popoverButton" type="button" class="btn btn-primary btn-lg" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="ESM in Browser" data-bs-content="Bang!">Custom popover</button>
<script async src="https://cdn.jsdelivr.net/npm/es-module-shims@1/dist/es-module-shims.min.js" crossorigin="anonymous"></script>
<script type="importmap">
{
"imports": {
"@popperjs/core": "https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js",
"bootstrap": "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.esm.min.js"
}
}
</script>
<script type="module">
import * as bootstrap from 'bootstrap'
new bootstrap.Popover(document.getElementById('popoverButton'))
</script>
</body>
</html>
Sõltuvused
Mõned pistikprogrammid ja CSS-i komponendid sõltuvad teistest pistikprogrammidest. Kui lisate pistikprogrammid eraldi, kontrollige kindlasti nende sõltuvuste olemasolu dokumentidest.
Popperist sõltuvad ka meie rippmenüüd, hüpikaknad ja vihjed .
Andmete atribuudid
Peaaegu kõiki Bootstrapi pistikprogramme saab lubada ja konfigureerida ainult HTML-i kaudu koos andmeatribuutidega (meie eelistatud viis JavaScripti funktsiooni kasutamiseks). Kasutage ühel elemendil kindlasti ainult ühte andmeatribuutide komplekti (nt te ei saa samal nupul käivitada kohtspikri ja modaali).
Kuna suvandeid saab edastada andmeatribuutide või JavaScripti kaudu, saate valikule lisada valiku nime data-bs-
, nagu näiteks data-bs-animation="{value}"
. Suvandite andmeatribuutide kaudu edastamisel muutke suvandi nime tõuketüüp „ camelCase ” asemel „ kebab-case ”. Näiteks data-bs-custom-class="beautifier"
kasutage data-bs-customClass="beautifier"
.
Alates versioonist Bootstrap 5.2.0 toetavad kõik komponendid eksperimentaalset reserveeritud andmeatribuuti data-bs-config
, mis mahutab lihtsa komponendi konfiguratsiooni JSON-stringina. Kui elemendil on atribuudid data-bs-config='{"delay":0, "title":123}'
ja data-bs-title="456"
, on lõplik title
väärtus 456
ja eraldi andmeatribuudid alistavad väärtused, mis on antud kuupäeval data-bs-config
. Lisaks võivad olemasolevad andmeatribuudid sisaldada JSON-i väärtusi, nagu data-bs-delay='{"show":0,"hide":150}'
.
Valijad
Kasutame DOM-i elementide päringute tegemiseks toimivuse huvides natiivset querySelector
ja querySelectorAll
meetodeid, seega peate kasutama kehtivaid selektoreid . Kui kasutate spetsiaalseid valijaid, nagu collapse:Example
, vältige neid kindlasti.
Sündmused
Bootstrap pakub kohandatud sündmusi enamiku pistikprogrammide ainulaadsete toimingute jaoks. Üldjuhul on need infinitiivi ja mineviku osastava vormina – kus infinitiiv (nt show
) käivitatakse sündmuse alguses ja selle mineviku osastava vorm (nt shown
) käivitatakse tegevuse lõppedes.
Kõik infinitiivsed sündmused pakuvad preventDefault()
funktsionaalsust. See annab võimaluse toimingu sooritamine enne selle algust peatada. Sündmuste töötlejalt vale tagastamine kutsub automaatselt välja ka preventDefault()
.
const myModal = document.querySelector('#myModal')
myModal.addEventListener('show.bs.modal', event => {
if (!data) {
return event.preventDefault() // stops modal from being shown
}
})
Programmaatiline API
Kõik konstruktorid aktsepteerivad valikuliste suvandite objekti või mitte midagi (mis käivitab pistikprogrammi vaikekäitumisega):
const myModalEl = document.querySelector('#myModal')
const modal = new bootstrap.Modal(myModalEl) // initialized with defaults
const configObject = { keyboard: false }
const modal1 = new bootstrap.Modal(myModalEl, configObject) // initialized with no keyboard
Kui soovite hankida konkreetse pistikprogrammi eksemplari, avaldab iga pistikprogramm getInstance
meetodi. Näiteks eksemplari toomiseks otse elemendist:
bootstrap.Popover.getInstance(myPopoverEl)
See meetod naaseb, null
kui eksemplari ei algatata taotletud elemendi kaudu.
Teise võimalusena getOrCreateInstance
saab seda kasutada eksemplari seostamiseks DOM-i elemendiga või uue loomiseks juhuks, kui seda ei lähtestatud.
bootstrap.Popover.getOrCreateInstance(myPopoverEl, configObject)
Kui eksemplari ei lähtestatud, võib see aktsepteerida ja kasutada teise argumendina valikulist konfiguratsiooniobjekti.
CSS-i valijad konstruktorites
Lisaks meetoditele getInstance
ja saavad kõik pistikprogrammide konstruktorid esimese argumendina getOrCreateInstance
aktsepteerida DOM-i elementi või kehtivat CSS-i valijat . Plugina elemendid leitakse selle querySelector
meetodiga, kuna meie pistikprogrammid toetavad ainult ühte elementi.
const modal = new bootstrap.Modal('#myModal')
const dropdown = new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
const offcanvas = bootstrap.Offcanvas.getInstance('#myOffcanvas')
const alert = bootstrap.Alert.getOrCreateInstance('#myAlert')
Asünkroonsed funktsioonid ja üleminekud
Kõik programmilised API meetodid on asünkroonsed ja naasevad helistaja juurde pärast ülemineku algust, kuid enne selle lõppu . Toimingu sooritamiseks pärast ülemineku lõppemist saate kuulata vastavat sündmust.
const myCollapseEl = document.querySelector('#myCollapse')
myCollapseEl.addEventListener('shown.bs.collapse', event => {
// Action to execute once the collapsible area is expanded
})
Lisaks ignoreeritakse üleminekukomponendi meetodikutset .
const myCarouselEl = document.querySelector('#myCarousel')
const carousel = bootstrap.Carousel.getInstance(myCarouselEl) // Retrieve a Carousel instance
myCarouselEl.addEventListener('slid.bs.carousel', event => {
carousel.to('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
})
carousel.to('1') // Will start sliding to the slide 1 and returns to the caller
carousel.to('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!
dispose
meetod
Kuigi võib tunduda õige dispose
meetodi kasutamine kohe pärast hide()
, viib see valede tulemusteni. Siin on näide probleemi kasutamisest:
const myModal = document.querySelector('#myModal')
myModal.hide() // it is asynchronous
myModal.addEventListener('shown.bs.hidden', event => {
myModal.dispose()
})
Vaikeseaded
Saate muuta pistikprogrammi vaikesätteid, muutes pistikprogrammi Constructor.Default
objekti.
// changes default for the modal plugin's `keyboard` option to false
bootstrap.Modal.Default.keyboard = false
Meetodid ja omadused
Iga Bootstrapi pistikprogramm paljastab järgmised meetodid ja staatilised omadused.
meetod | Kirjeldus |
---|---|
dispose |
Hävitab elemendi modaali. (Eemaldab DOM-elemendile salvestatud andmed) |
getInstance |
Staatiline meetod, mis võimaldab teil saada DOM-i elemendiga seotud modaalse eksemplari. |
getOrCreateInstance |
Staatiline meetod, mis võimaldab teil saada DOM-i elemendiga seotud modaalse eksemplari või luua uue, kui seda ei lähtestatud. |
Staatiline omadus | Kirjeldus |
---|---|
NAME |
Tagastab pistikprogrammi nime. (Näide bootstrap.Tooltip.NAME :) |
VERSION |
Iga Bootstrapi pistikprogrammi versioonile pääseb juurde VERSION pistikprogrammi konstruktori atribuudi kaudu (näide: bootstrap.Tooltip.VERSION ) |
Puhastusvahend
Tööriistavihjed ja hüpikaknad kasutavad HTML-i aktsepteerivate valikute puhastamiseks meie sisseehitatud puhastusvahendit.
Vaikeväärtus allowList
on järgmine:
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
const DefaultAllowlist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
}
Kui soovite sellele vaikeväärtusele lisada uusi väärtusi, allowList
saate teha järgmist.
const myDefaultAllowList = bootstrap.Tooltip.Default.allowList
// To allow table elements
myDefaultAllowList.table = []
// To allow td elements and data-bs-option attributes on td elements
myDefaultAllowList.td = ['data-bs-option']
// You can push your custom regex to validate your attributes.
// Be careful about your regular expressions being too lax
const myCustomRegex = /^data-my-app-[\w-]+/
myDefaultAllowList['*'].push(myCustomRegex)
Kui soovite meie desinfitseerimisvahendist mööda minna, kuna eelistate kasutada spetsiaalset teeki, näiteks DOMpurify , peaksite tegema järgmist.
const yourTooltipEl = document.querySelector('#yourTooltip')
const tooltip = new bootstrap.Tooltip(yourTooltipEl, {
sanitizeFn(content) {
return DOMPurify.sanitize(content)
}
})
Soovi korral jQuery kasutamine
Te ei vaja Bootstrap 5-s jQueryt , kuid meie komponente on siiski võimalik jQueryga kasutada. Kui Bootstrap tuvastab objektis, jQuery
lisab window
see kõik meie komponendid jQuery pistikprogrammide süsteemi. See võimaldab teil teha järgmist.
$('[data-bs-toggle="tooltip"]').tooltip() // to enable tooltips, with default configuration
$('[data-bs-toggle="tooltip"]').tooltip({ boundary: 'clippingParents', customClass: 'myClass' }) // to initialize tooltips with given configuration
$('#myTooltip').tooltip('show') // to trigger `show` method
Sama kehtib ka meie teiste komponentide kohta.
Ei mingit konflikti
Mõnikord on vaja Bootstrapi pistikprogramme kasutada koos teiste kasutajaliidese raamistikega. Sellistel juhtudel võib aeg-ajalt tekkida nimeruumi kokkupõrkeid. Kui see juhtub, võite helistada .noConflict
pistikprogrammile, mille väärtust soovite taastada.
const bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality
Bootstrap ei toeta ametlikult kolmandate osapoolte JavaScripti teeke, nagu Prototype või jQuery kasutajaliides. Vaatamata .noConflict
ja nimeruumiga sündmustele võib esineda ühilduvusprobleeme, mille peate ise lahendama.
jQuery sündmused
Bootstrap tuvastab jQuery, kui jQuery
see on window
objektis olemas ja data-bs-no-jquery
atribuuti pole määratud <body>
. Kui jQuery leitakse, väljastab Bootstrap sündmusi tänu jQuery sündmuste süsteemile. Nii et kui soovite kuulata Bootstrapi sündmusi, peate meetodi asemel kasutama jQuery meetodeid ( .on
, ) ..one
addEventListener
$('#myTab a').on('shown.bs.tab', () => {
// do something...
})
JavaScript on keelatud
Kui JavaScript on keelatud, pole Bootstrapi pistikprogrammidel erilist tagavara. Kui teile huvitab sel juhul kasutajakogemus, kasutage <noscript>
olukorra selgitamiseks (ja JavaScripti uuesti lubamiseks) oma kasutajatele ja/või oma kohandatud varude lisamiseks.