Vés al contingut principal Saltar a la navegació de documents
Check

Utilitzeu el connector modal de JavaScript de Bootstrap per afegir diàlegs al vostre lloc per a caixes de llum, notificacions d'usuari o contingut completament personalitzat.

Com funciona

Abans de començar amb el component modal de Bootstrap, assegureu-vos de llegir el següent, ja que les nostres opcions de menú han canviat recentment.

  • Els modals es creen amb HTML, CSS i JavaScript. Es col·loquen sobre tota la resta del document i eliminen el desplaçament de <body>manera que el contingut modal es desplaça.
  • Si feu clic al "teló de fons" modal, tancarà automàticament el modal.
  • Bootstrap només admet una finestra modal alhora. No s'admeten els modalitats imbricades, ja que creiem que són experiències d'usuari deficients.
  • Els modals utilitzen position: fixed, que de vegades pot ser una mica particular pel que fa a la seva representació. Sempre que sigui possible, col·loqueu el vostre HTML modal en una posició de primer nivell per evitar possibles interferències d'altres elements. És probable que tingueu problemes en niuar un .modaldins d'un altre element fix.
  • Una vegada més, a causa de position: fixed, hi ha algunes advertències amb l'ús de modals en dispositius mòbils. Consulteu els nostres documents d'assistència per al navegador per obtenir més informació.
  • A causa de com HTML5 defineix la seva semàntica, l' autofocusatribut HTML no té cap efecte en els modals d'Bootstrap. Per aconseguir el mateix efecte, utilitzeu JavaScript personalitzat:
const myModal = document.getElementById('myModal')
const myInput = document.getElementById('myInput')

myModal.addEventListener('shown.bs.modal', () => {
  myInput.focus()
})
L'efecte d'animació d'aquest component depèn de la prefers-reduced-motionconsulta de mitjans. Consulteu la secció de moviment reduït de la nostra documentació d'accessibilitat .

Continueu llegint per obtenir demostracions i directrius d'ús.

Exemples

A continuació es mostra un exemple modal estàticposition (és a dir, el seu i displays'han substituït). S'inclouen la capçalera modal, el cos modal (obligatori per a padding) i el peu de pàgina modal (opcional). Us demanem que incloeu capçaleres modals amb accions d'ignoració sempre que sigui possible o proporcioneu una altra acció d'ignorar explícita.

<div class="modal" tabindex="-1">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Modal title</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        <p>Modal body text goes here.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Demo en directe

Commuteu una demostració modal de treball fent clic al botó següent. Es lliscarà cap avall i s'esvaeix des de la part superior de la pàgina.

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Teló de fons estàtic

Quan el fons s'estableix com a estàtic, el modal no es tancarà en fer clic fora d'ell. Feu clic al botó següent per provar-ho.

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
  Launch static backdrop modal
</button>

<!-- Modal -->
<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="staticBackdropLabel">Modal title</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Understood</button>
      </div>
    </div>
  </div>
</div>

Desplaçament de contingut llarg

Quan els modals es fan massa llargs per a la finestra o el dispositiu de l'usuari, es desplacen independentment de la pròpia pàgina. Proveu la demostració a continuació per veure què volem dir.

També podeu crear un modal desplaçable que permeti desplaçar-vos pel cos del modal afegint .modal-dialog-scrollable- hi .modal-dialog.

<!-- Scrollable modal -->
<div class="modal-dialog modal-dialog-scrollable">
  ...
</div>

Centrat verticalment

Afegiu .modal-dialog-centereda .modal-dialogper centrar verticalment el modal.

<!-- Vertically centered modal -->
<div class="modal-dialog modal-dialog-centered">
  ...
</div>

<!-- Vertically centered scrollable modal -->
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
  ...
</div>

Consells d'eines i popovers

Els consells sobre eines i les finestres emergents es poden col·locar dins de modalitats segons sigui necessari. Quan es tanquen les modalitats, també es descarten automàticament qualsevol informació sobre eines i finestres emergents.

<div class="modal-body">
  <h5>Popover in a modal</h5>
  <p>This <a href="#" role="button" class="btn btn-secondary" data-bs-toggle="popover" title="Popover title" data-bs-content="Popover body content is set in this attribute.">button</a> triggers a popover on click.</p>
  <hr>
  <h5>Tooltips in a modal</h5>
  <p><a href="#" data-bs-toggle="tooltip" title="Tooltip">This link</a> and <a href="#" data-bs-toggle="tooltip" title="Tooltip">that link</a> have tooltips on hover.</p>
</div>

Utilitzant la graella

Utilitzeu el sistema de quadrícula Bootstrap dins d'un modal nidificant .container-fluiddins del fitxer .modal-body. A continuació, utilitzeu les classes normals del sistema de graella com ho faríeu en qualsevol altre lloc.

<div class="modal-body">
  <div class="container-fluid">
    <div class="row">
      <div class="col-md-4">.col-md-4</div>
      <div class="col-md-4 ms-auto">.col-md-4 .ms-auto</div>
    </div>
    <div class="row">
      <div class="col-md-3 ms-auto">.col-md-3 .ms-auto</div>
      <div class="col-md-2 ms-auto">.col-md-2 .ms-auto</div>
    </div>
    <div class="row">
      <div class="col-md-6 ms-auto">.col-md-6 .ms-auto</div>
    </div>
    <div class="row">
      <div class="col-sm-9">
        Level 1: .col-sm-9
        <div class="row">
          <div class="col-8 col-sm-6">
            Level 2: .col-8 .col-sm-6
          </div>
          <div class="col-4 col-sm-6">
            Level 2: .col-4 .col-sm-6
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

Contingut modal variable

Tens un munt de botons que activen tots el mateix modal amb continguts lleugerament diferents? Utilitzeu event.relatedTargeti els atributs HTMLdata-bs-* per variar el contingut del modal en funció del botó que s'hagi fet clic.

A continuació es mostra una demostració en directe seguida d'exemples d'HTML i JavaScript. Per obtenir més informació, llegiu els documents d'esdeveniments modals per obtenir més informació sobre relatedTarget.

html
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@mdo">Open modal for @mdo</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@fat">Open modal for @fat</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@getbootstrap">Open modal for @getbootstrap</button>

<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">New message</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        <form>
          <div class="mb-3">
            <label for="recipient-name" class="col-form-label">Recipient:</label>
            <input type="text" class="form-control" id="recipient-name">
          </div>
          <div class="mb-3">
            <label for="message-text" class="col-form-label">Message:</label>
            <textarea class="form-control" id="message-text"></textarea>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Send message</button>
      </div>
    </div>
  </div>
</div>
const exampleModal = document.getElementById('exampleModal')
exampleModal.addEventListener('show.bs.modal', event => {
  // Button that triggered the modal
  const button = event.relatedTarget
  // Extract info from data-bs-* attributes
  const recipient = button.getAttribute('data-bs-whatever')
  // If necessary, you could initiate an AJAX request here
  // and then do the updating in a callback.
  //
  // Update the modal's content.
  const modalTitle = exampleModal.querySelector('.modal-title')
  const modalBodyInput = exampleModal.querySelector('.modal-body input')

  modalTitle.textContent = `New message to ${recipient}`
  modalBodyInput.value = recipient
})

Canvia entre modalitats

Canvia entre diversos modals amb una ubicació intel·ligent dels atributs data-bs-targeti . data-bs-togglePer exemple, podeu canviar un modal de restabliment de la contrasenya des d'un modal d'inici de sessió ja obert. Tingueu en compte que no es poden obrir diversos modals al mateix temps ; aquest mètode simplement alterna entre dos modals separats.

Obriu el primer modal
html
<div class="modal fade" id="exampleModalToggle" aria-hidden="true" aria-labelledby="exampleModalToggleLabel" tabindex="-1">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalToggleLabel">Modal 1</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        Show a second modal and hide this one with the button below.
      </div>
      <div class="modal-footer">
        <button class="btn btn-primary" data-bs-target="#exampleModalToggle2" data-bs-toggle="modal">Open second modal</button>
      </div>
    </div>
  </div>
</div>
<div class="modal fade" id="exampleModalToggle2" aria-hidden="true" aria-labelledby="exampleModalToggleLabel2" tabindex="-1">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalToggleLabel2">Modal 2</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        Hide this modal and show the first with the button below.
      </div>
      <div class="modal-footer">
        <button class="btn btn-primary" data-bs-target="#exampleModalToggle" data-bs-toggle="modal">Back to first</button>
      </div>
    </div>
  </div>
</div>
<a class="btn btn-primary" data-bs-toggle="modal" href="#exampleModalToggle" role="button">Open first modal</a>

Canvia l'animació

La $modal-fade-transformvariable determina l'estat de transformació de .modal-dialogabans de l'animació d'esvaïment modal, la $modal-show-transformvariable determina la transformació de .modal-dialogal final de l'animació d'esvaïment modal.

Si voleu, per exemple, una animació amb zoom, podeu configurar $modal-fade-transform: scale(.8).

Elimina l'animació

Per als modals que simplement apareixen en lloc de desaparèixer per veure's, elimineu la .fadeclasse del vostre marcatge modal.

<div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
  ...
</div>

Altures dinàmiques

Si l'alçada d'un modal canvia mentre està obert, hauríeu de trucar myModal.handleUpdate()per reajustar la posició del modal en cas que aparegui una barra de desplaçament.

Accessibilitat

Assegureu-vos d'afegir aria-labelledby="...", fent referència al títol modal, a .modal. A més, podeu donar una descripció del vostre diàleg modal amb aria-describedbyon .modal. Tingueu en compte que no cal que l'afegiu role="dialog", ja que ja l'afegim mitjançant JavaScript.

Inserció de vídeos de YouTube

La inserció de vídeos de YouTube en modalitats requereix JavaScript addicional que no estigui a Bootstrap per aturar automàticament la reproducció i molt més. Consulteu aquesta útil publicació de Stack Overflow per obtenir més informació.

Mides opcionals

Els modals tenen tres mides opcionals, disponibles mitjançant classes modificadores per col·locar-los en un fitxer .modal-dialog. Aquestes mides s'inicien en determinats punts d'interrupció per evitar barres de desplaçament horitzontals a les finestres més estretes.

Mida Classe Amplada màxima modal
Petit .modal-sm 300px
Per defecte Cap 500px
Gran .modal-lg 800px
Extra gran .modal-xl 1140px

La nostra classe modal per defecte sense modificador constitueix el modal de mida "mitjana".

<div class="modal-dialog modal-xl">...</div>
<div class="modal-dialog modal-lg">...</div>
<div class="modal-dialog modal-sm">...</div>

Modal de pantalla completa

Una altra substitució és l'opció d'aparèixer un modal que cobreixi la finestra gràfica de l'usuari, disponible mitjançant classes modificadores que es col·loquen en un fitxer .modal-dialog.

Classe Disponibilitat
.modal-fullscreen Sempre
.modal-fullscreen-sm-down 576px
.modal-fullscreen-md-down 768px
.modal-fullscreen-lg-down 992px
.modal-fullscreen-xl-down 1200px
.modal-fullscreen-xxl-down 1400px
<!-- Full screen modal -->
<div class="modal-dialog modal-fullscreen-sm-down">
  ...
</div>

CSS

Les variables

Afegit a la v5.2.0

Com a part de l'evolució de l'enfocament de variables CSS de Bootstrap, els modals ara utilitzen variables CSS locals .modalper .modal-backdropa una personalització millorada en temps real. Els valors de les variables CSS s'estableixen mitjançant Sass, de manera que la personalització de Sass encara és compatible.

  --#{$prefix}modal-zindex: #{$zindex-modal};
  --#{$prefix}modal-width: #{$modal-md};
  --#{$prefix}modal-padding: #{$modal-inner-padding};
  --#{$prefix}modal-margin: #{$modal-dialog-margin};
  --#{$prefix}modal-color: #{$modal-content-color};
  --#{$prefix}modal-bg: #{$modal-content-bg};
  --#{$prefix}modal-border-color: #{$modal-content-border-color};
  --#{$prefix}modal-border-width: #{$modal-content-border-width};
  --#{$prefix}modal-border-radius: #{$modal-content-border-radius};
  --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};
  --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};
  --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};
  --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};
  --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y
  --#{$prefix}modal-header-border-color: #{$modal-header-border-color};
  --#{$prefix}modal-header-border-width: #{$modal-header-border-width};
  --#{$prefix}modal-title-line-height: #{$modal-title-line-height};
  --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};
  --#{$prefix}modal-footer-bg: #{$modal-footer-bg};
  --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};
  --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};
  
  --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};
  --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};
  --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};
  

Variables Sass

$modal-inner-padding:               $spacer;

$modal-footer-margin-between:       .5rem;

$modal-dialog-margin:               .5rem;
$modal-dialog-margin-y-sm-up:       1.75rem;

$modal-title-line-height:           $line-height-base;

$modal-content-color:               null;
$modal-content-bg:                  $white;
$modal-content-border-color:        var(--#{$prefix}border-color-translucent);
$modal-content-border-width:        $border-width;
$modal-content-border-radius:       $border-radius-lg;
$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width);
$modal-content-box-shadow-xs:       $box-shadow-sm;
$modal-content-box-shadow-sm-up:    $box-shadow;

$modal-backdrop-bg:                 $black;
$modal-backdrop-opacity:            .5;

$modal-header-border-color:         var(--#{$prefix}border-color);
$modal-header-border-width:         $modal-content-border-width;
$modal-header-padding-y:            $modal-inner-padding;
$modal-header-padding-x:            $modal-inner-padding;
$modal-header-padding:              $modal-header-padding-y $modal-header-padding-x; // Keep this for backwards compatibility

$modal-footer-bg:                   null;
$modal-footer-border-color:         $modal-header-border-color;
$modal-footer-border-width:         $modal-header-border-width;

$modal-sm:                          300px;
$modal-md:                          500px;
$modal-lg:                          800px;
$modal-xl:                          1140px;

$modal-fade-transform:              translate(0, -50px);
$modal-show-transform:              none;
$modal-transition:                  transform .3s ease-out;
$modal-scale-transform:             scale(1.02);

Bucle

Els mods de pantalla completa responsius es generen mitjançant el $breakpointsmapa i un bucle a scss/_modal.scss.

@each $breakpoint in map-keys($grid-breakpoints) {
  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
  $postfix: if($infix != "", $infix + "-down", "");

  @include media-breakpoint-down($breakpoint) {
    .modal-fullscreen#{$postfix} {
      width: 100vw;
      max-width: none;
      height: 100%;
      margin: 0;

      .modal-content {
        height: 100%;
        border: 0;
        @include border-radius(0);
      }

      .modal-header,
      .modal-footer {
        @include border-radius(0);
      }

      .modal-body {
        overflow-y: auto;
      }
    }
  }
}

Ús

El connector modal alterna el contingut ocult a demanda, mitjançant atributs de dades o JavaScript. També anul·la el comportament de desplaçament predeterminat i genera un .modal-backdropper proporcionar una àrea de clic per descartar els mods mostrats quan es fa clic fora del modal.

Mitjançant atributs de dades

Commuta

Activa un modal sense escriure JavaScript. Estableix data-bs-toggle="modal"en un element del controlador, com un botó, juntament amb un data-bs-target="#foo"o href="#foo"per orientar un modal específic per alternar.

<button type="button" data-bs-toggle="modal" data-bs-target="#myModal">Launch modal</button>

Descartar

L'acomiadament es pot aconseguir amb l' dataatribut d'un botó dins del modal tal com es mostra a continuació:

<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>

o en un botó fora del modal utilitzant data-bs-targetcom es mostra a continuació:

<button type="button" class="btn-close" data-bs-dismiss="modal" data-bs-target="#my-modal" aria-label="Close"></button>
Tot i que s'admeten ambdues maneres d'eliminar un modal, tingueu en compte que l'eliminació des de fora d'un modal no coincideix amb el patró de diàleg (modal) de la Guia de pràctiques de creació d'ARIA . Fes-ho sota el teu propi risc.

Mitjançant JavaScript

Creeu un modal amb una sola línia de JavaScript:

const myModal = new bootstrap.Modal(document.getElementById('myModal'), options)
// or
const myModalAlternative = new bootstrap.Modal('#myModal', options)

Opcions

Com que les opcions es poden passar mitjançant atributs de dades o JavaScript, podeu afegir un nom d'opció a data-bs-, com a data-bs-animation="{value}". Assegureu-vos de canviar el tipus de cas del nom de l'opció de " camelCase " a " kebab-case " quan passeu les opcions mitjançant atributs de dades. Per exemple, utilitzeu data-bs-custom-class="beautifier"en comptes de data-bs-customClass="beautifier".

A partir de Bootstrap 5.2.0, tots els components admeten un atribut de dades reservades experimentalsdata-bs-config que pot albergar una configuració senzilla de components com a cadena JSON. Quan un element té data-bs-config='{"delay":0, "title":123}'i data-bs-title="456"atributs, el titlevalor final serà 456i els atributs de dades independents substituiran els valors donats a data-bs-config. A més, els atributs de dades existents poden albergar valors JSON com data-bs-delay='{"show":0,"hide":150}'.

Nom Tipus Per defecte Descripció
backdrop booleà,'static' true Inclou un element de fons modal. Alternativament, especifiqueu staticper a un teló de fons que no tanqui el modal en fer clic.
focus booleà true Posa el focus en el modal quan s'inicialitza.
keyboard booleà true Tanca el modal quan es prem la tecla d'escapament.

Mètodes

Mètodes asíncrons i transicions

Tots els mètodes de l'API són asíncrons i comencen una transició . Tornen a la persona que truca tan bon punt s'inicia la transició però abans que acabi . A més, s'ignorarà una trucada de mètode en un component en transició .

Consulteu la nostra documentació de JavaScript per obtenir més informació .

Opcions de pas

Activa el teu contingut com a modal. Accepta opcions opcionals object.

const myModal = new bootstrap.Modal('#myModal', {
  keyboard: false
})
Mètode Descripció
dispose Destrueix el modal d'un element. (Elimina les dades emmagatzemades a l'element DOM)
getInstance Mètode estàtic que permet obtenir la instància modal associada a un element DOM.
getOrCreateInstance Mètode estàtic que us permet obtenir la instància modal associada a un element DOM o crear-ne una de nova en cas que no s'hagi inicialitzat.
handleUpdate Reajusteu manualment la posició del modal si l'alçada d'un modal canvia mentre està obert (és a dir, en cas que aparegui una barra de desplaçament).
hide Amaga manualment un modal. Torna a la persona que truca abans que el modal s'hagi amagat (és a dir, abans hidden.bs.modalque es produeixi l'esdeveniment).
show Obre manualment un modal. Torna a la persona que truca abans que s'hagi mostrat realment el modal (és a dir, abans shown.bs.modalque es produeixi l'esdeveniment). A més, podeu passar un element DOM com a argument que es pot rebre als esdeveniments modals (com a relatedTargetpropietat). (és a dir const modalToggle = document.getElementById('toggleMyModal'); myModal.show(modalToggle).
toggle Commuta manualment un modal. Torna a la persona que truca abans que el modal s'hagi mostrat o amagat (és a dir, abans que es produeixi l'esdeveniment shown.bs.modalo ).hidden.bs.modal

Esdeveniments

La classe modal de Bootstrap exposa alguns esdeveniments per connectar-se a la funcionalitat modal. Tots els esdeveniments modals es desencadenen al propi modal (és a dir, al <div class="modal">).

Esdeveniment Descripció
hide.bs.modal Aquest esdeveniment s'activa immediatament quan hides'ha cridat el mètode d'instància.
hidden.bs.modal Aquest esdeveniment s'activa quan el modal s'ha acabat d'ocultar a l'usuari (esperarà que finalitzin les transicions CSS).
hidePrevented.bs.modal Aquest esdeveniment s'activa quan es mostra el modal, el seu teló de fons statici es realitza un clic fora del modal. L'esdeveniment també s'activa quan es prem la tecla d'escapament i l' keyboardopció s'estableix a false.
show.bs.modal Aquest esdeveniment s'activa immediatament quan showes crida al mètode d'instància. Si és causat per un clic, l'element clicat està disponible com a relatedTargetpropietat de l'esdeveniment.
shown.bs.modal Aquest esdeveniment s'activa quan el modal s'ha fet visible per a l'usuari (esperarà que finalitzin les transicions CSS). Si és causat per un clic, l'element clicat està disponible com a relatedTargetpropietat de l'esdeveniment.
const myModalEl = document.getElementById('myModal')
myModalEl.addEventListener('hidden.bs.modal', event => {
  // do something...
})