JavaScript
Sahihisha Bootstrap na programu-jalizi zetu za hiari za JavaScript. Jifunze kuhusu kila programu-jalizi, data na chaguo zetu za API za kiprogramu, na zaidi.
Ya mtu binafsi au iliyokusanywa
Programu-jalizi zinaweza kujumuishwa kibinafsi (kwa kutumia Bootstrap ya mtu binafsi js/dist/*.js
), au zote kwa wakati mmoja kwa kutumia bootstrap.js
au minified bootstrap.min.js
(usijumuishe zote mbili).
Ukitumia kifurushi (Webpack, Parcel, Vite…), unaweza kutumia /js/dist/*.js
faili ambazo UMD tayari.
Matumizi na mifumo ya JavaScript
Ingawa Bootstrap CSS inaweza kutumika na mfumo wowote, JavaScript ya Bootstrap haioani kikamilifu na mifumo ya JavaScript kama React, Vue, na Angular ambayo inachukua ujuzi kamili wa DOM. Bootstrap na mfumo unaweza kujaribu kubadilisha kipengele sawa cha DOM, na kusababisha hitilafu kama menyu kunjuzi ambazo zimekwama katika nafasi ya "wazi".
Mbadala bora kwa wale wanaotumia aina hii ya mifumo ni kutumia kifurushi maalum cha mfumo badala ya JavaScript ya Bootstrap. Hapa kuna baadhi ya chaguzi maarufu zaidi:
- Jibu: React Bootstrap
- Vue: BootstrapVue (kwa sasa inasaidia tu Vue 2 na Bootstrap 4)
- Angular: ng-bootstrap
Kutumia Bootstrap kama moduli
Tunatoa toleo la Bootstrap iliyojengwa kama ESM
( bootstrap.esm.js
na bootstrap.esm.min.js
) ambayo inakuruhusu kutumia Bootstrap kama sehemu katika kivinjari, ikiwa vivinjari unavyolengwa vinaiunga mkono .
<script type="module">
import { Toast } from 'bootstrap.esm.min.js'
Array.from(document.querySelectorAll('.toast'))
.forEach(toastNode => new Toast(toastNode))
</script>
Ikilinganishwa na vifurushi vya JS, kutumia ESM kwenye kivinjari kunahitaji utumie njia kamili na jina la faili badala ya jina la moduli. Soma zaidi kuhusu moduli za JS kwenye kivinjari. Ndio maana tunatumia 'bootstrap.esm.min.js'
badala ya 'bootstrap'
hapo juu. Walakini, hii inachanganyikiwa zaidi na utegemezi wetu wa Popper, ambao huingiza Popper kwenye JavaScript yetu kama hivyo:
import * as Popper from "@popperjs/core"
Ukijaribu hii kama ilivyo, utaona hitilafu kwenye koni kama ifuatayo:
Uncaught TypeError: Failed to resolve module specifier "@popperjs/core". Relative references must start with either "/", "./", or "../".
Ili kurekebisha hili, unaweza kutumia importmap
kutatua majina ya moduli kiholela ili kukamilisha njia. Ikiwa vivinjari vyako vilivyolengwa havitumii , importmap
utahitaji kutumia mradi wa es-module-shims . Hivi ndivyo inavyofanya kazi kwa Bootstrap na Popper:
<!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>
Vitegemezi
Baadhi ya programu-jalizi na vipengele vya CSS hutegemea programu-jalizi zingine. Ikiwa utajumuisha programu-jalizi kibinafsi, hakikisha kuwa umeangalia tegemezi hizi kwenye hati.
Kunjuzi zetu, popover, na vidokezo vyetu pia hutegemea Popper .
Sifa za data
Takriban programu-jalizi zote za Bootstrap zinaweza kuwashwa na kusanidiwa kupitia HTML pekee na sifa za data (njia tunayopendelea ya kutumia utendaji wa JavaScript). Hakikisha kuwa unatumia seti moja tu ya sifa za data kwenye kipengele kimoja (kwa mfano, huwezi kuanzisha kidokezo na modali kutoka kwa kitufe kimoja.)
Kwa vile chaguo zinaweza kupitishwa kupitia sifa za data au JavaScript, unaweza kuongeza jina la chaguo kwa data-bs-
, kama katika data-bs-animation="{value}"
. Hakikisha umebadilisha aina ya kipochi cha jina la chaguo kutoka " camelCase " hadi " kebab-case " wakati wa kupitisha chaguo kupitia sifa za data. Kwa mfano, tumia data-bs-custom-class="beautifier"
badala ya data-bs-customClass="beautifier"
.
Kufikia Bootstrap 5.2.0, vipengee vyote vinaauni sifa ya data iliyohifadhiwa ya majaribiodata-bs-config
ambayo inaweza kuweka usanidi wa sehemu rahisi kama mfuatano wa JSON. Wakati kipengele kina data-bs-config='{"delay":0, "title":123}'
na data-bs-title="456"
sifa, title
thamani ya mwisho itakuwa 456
na sifa tofauti za data zitabatilisha thamani zilizotolewa kwenye data-bs-config
. Kwa kuongezea, sifa zilizopo za data zinaweza kuweka maadili ya JSON kama data-bs-delay='{"show":0,"hide":150}'
.
Wateuzi
Tunatumia asili querySelector
na querySelectorAll
mbinu kuuliza vipengele vya DOM kwa sababu za utendaji, kwa hivyo ni lazima utumie viteuzi halali . Ikiwa unatumia viteuzi maalum kama vile collapse:Example
, hakikisha umeviepuka.
Matukio
Bootstrap hutoa matukio maalum kwa vitendo vingi vya kipekee vya programu-jalizi. Kwa ujumla, hizi huja katika umbo lisilo na kikomo na la wakati uliopita - ambapo hali isiyo na kikomo (mf. show
) huanzishwa mwanzoni mwa tukio, na umbo lake la zamani la kishirikishi (mf. shown
) huanzishwa wakati kitendo kinapokamilika.
Matukio yote yasiyo na mwisho hutoa preventDefault()
utendaji. Hii hutoa uwezo wa kusimamisha utekelezaji wa kitendo kabla ya kuanza. Kurejesha uwongo kutoka kwa kidhibiti tukio pia kutapiga simu kiotomatiki preventDefault()
.
const myModal = document.querySelector('#myModal')
myModal.addEventListener('show.bs.modal', event => {
if (!data) {
return event.preventDefault() // stops modal from being shown
}
})
Programu ya API
Wajenzi wote wanakubali chaguo la chaguo la kitu au chochote (ambacho huanzisha programu-jalizi na tabia yake chaguomsingi):
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
Ikiwa ungependa kupata mfano fulani wa programu-jalizi, kila programu-jalizi inafichua getInstance
mbinu. Kwa mfano, kupata mfano moja kwa moja kutoka kwa kipengee:
bootstrap.Popover.getInstance(myPopoverEl)
Njia hii itarudi null
ikiwa mfano haujaanzishwa juu ya kipengele kilichoombwa.
Vinginevyo, getOrCreateInstance
inaweza kutumika kupata mfano unaohusishwa na kipengele cha DOM, au kuunda kipya ikiwa hakijaanzishwa.
bootstrap.Popover.getOrCreateInstance(myPopoverEl, configObject)
Ikiwa mfano haukuanzishwa, inaweza kukubali na kutumia kitu cha hiari cha usanidi kama hoja ya pili.
Viteuzi vya CSS katika wajenzi
Kando na getInstance
na getOrCreateInstance
mbinu, waundaji programu-jalizi wote wanaweza kukubali kipengele cha DOM au kiteuzi halali cha CSS kama hoja ya kwanza. Vipengele vya programu-jalizi hupatikana kwa querySelector
mbinu kwani programu-jalizi zetu zinaauni kipengele kimoja pekee.
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')
Kazi na mabadiliko ya Asynchronous
Mbinu zote za API za kiprogramu hazifanani na hurudi kwa anayepiga mara mpito unapoanza, lakini kabla haujaisha . Ili kutekeleza kitendo mara tu mpito utakapokamilika, unaweza kusikiliza tukio linalolingana.
const myCollapseEl = document.querySelector('#myCollapse')
myCollapseEl.addEventListener('shown.bs.collapse', event => {
// Action to execute once the collapsible area is expanded
})
Kwa kuongeza, simu ya mbinu kwenye sehemu ya mpito itapuuzwa .
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
njia
Ingawa inaweza kuonekana kuwa sawa kutumia dispose
njia mara baada hide()
ya , itasababisha matokeo yasiyo sahihi. Hapa kuna mfano wa matumizi ya shida:
const myModal = document.querySelector('#myModal')
myModal.hide() // it is asynchronous
myModal.addEventListener('shown.bs.hidden', event => {
myModal.dispose()
})
Mipangilio chaguomsingi
Unaweza kubadilisha mipangilio chaguomsingi ya programu-jalizi kwa kurekebisha kipengee cha programu-jalizi Constructor.Default
:
// changes default for the modal plugin's `keyboard` option to false
bootstrap.Modal.Default.keyboard = false
Mbinu na mali
Kila programu-jalizi ya Bootstrap inafichua njia zifuatazo na mali tuli.
Njia | Maelezo |
---|---|
dispose |
Huharibu modi ya kipengele. (Huondoa data iliyohifadhiwa kwenye kipengele cha DOM) |
getInstance |
Njia tuli ambayo hukuruhusu kupata mfano wa modal unaohusishwa na kipengee cha DOM. |
getOrCreateInstance |
Njia tuli ambayo hukuruhusu kupata mfano wa modal unaohusishwa na kipengee cha DOM, au kuunda mpya ikiwa haikuanzishwa. |
Mali tuli | Maelezo |
---|---|
NAME |
Hurejesha jina la programu-jalizi. (Mfano bootstrap.Tooltip.NAME :) |
VERSION |
Toleo la kila programu-jalizi za Bootstrap linaweza kufikiwa kupitia VERSION mali ya mjenzi wa programu-jalizi (Mfano bootstrap.Tooltip.VERSION :) |
Sanitizer
Vidokezo vya zana na Popovers hutumia sanitizer yetu iliyojumuishwa ili kusafisha chaguzi zinazokubali HTML.
Thamani chaguo-msingi allowList
ni ifuatayo:
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: []
}
Ikiwa unataka kuongeza maadili mapya kwa chaguo-msingi hili allowList
unaweza kufanya yafuatayo:
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)
Ikiwa ungependa kukwepa kisafishaji chetu kwa sababu unapendelea kutumia maktaba maalum, kwa mfano DOMpurify , unapaswa kufanya yafuatayo:
const yourTooltipEl = document.querySelector('#yourTooltip')
const tooltip = new bootstrap.Tooltip(yourTooltipEl, {
sanitizeFn(content) {
return DOMPurify.sanitize(content)
}
})
Kwa hiari kutumia jQuery
Hauitaji jQuery ndani Bootstrap 5 , lakini bado inawezekana kutumia vifaa vyetu na jQuery. Ikiwa Bootstrap itagundua jQuery
kwenye window
kitu, itaongeza vipengee vyetu vyote kwenye mfumo wa jalizi wa jQuery. Hii hukuruhusu kufanya yafuatayo:
$('[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
Vile vile huenda kwa vipengele vyetu vingine.
Hakuna mgongano
Wakati mwingine ni muhimu kutumia programu-jalizi za Bootstrap na mifumo mingine ya UI. Katika hali hizi, migongano ya nafasi ya majina inaweza kutokea mara kwa mara. Hili likitokea, unaweza kupiga simu .noConflict
kwenye programu-jalizi unayotaka kurejesha thamani yake.
const bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality
Bootstrap haitumii rasmi maktaba za JavaScript za wahusika wengine kama Prototype au jQuery UI. Licha .noConflict
ya matukio na yaliyowekwa katika nafasi ya majina, kunaweza kuwa na matatizo ya uoanifu ambayo unahitaji kurekebisha peke yako.
matukio ya jQuery
Bootstrap itagundua jQuery ikiwa jQuery
iko kwenye window
kitu na hakuna data-bs-no-jquery
sifa iliyowekwa kwenye <body>
. Ikiwa jQuery itapatikana, Bootstrap itatoa matukio kutokana na mfumo wa tukio wa jQuery. Kwa hivyo ikiwa unataka kusikiliza matukio ya Bootstrap, itabidi utumie njia za jQuery ( .on
, .one
) badala ya addEventListener
.
$('#myTab a').on('shown.bs.tab', () => {
// do something...
})
JavaScript imezimwa
Programu-jalizi za Bootstrap hazina urejesho maalum wakati JavaScript imezimwa. Iwapo unajali kuhusu matumizi ya mtumiaji katika kesi hii, tumia <noscript>
kueleza hali (na jinsi ya kuwezesha tena JavaScript) kwa watumiaji wako, na/au ongeza vikwazo vyako maalum.