Bonjour,
Je cherche à afficher une carte Leaflet dans une fenêtre modale Bootstrap:
Dans ma page, j'ai un bouton, qui permet d'afficher la fenêtre modale :
J'ai ma fenêtre modale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <div class="row"> <div class="col-md-1"><button type="button" class="btn btn-primary btnInfos" data-bs-toggle="modal" data-bs-target="#infosModal" id="btnInfos" name="btnInfos">i</button></div> </div>
et à la fin de ma page, j'ai une balise <script> :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <div class="modal fade" id="infosModal" tabindex="-1" aria-labelledby="infosModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h1 class="modal-title fs-5" id="infosModalLabel">Projet <i><span id="PJ_NAME"></span></i></h1> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div>Ici des infos</div> <div id="map" style="width:100%;height:300px" class="mapContainer"></div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> </div> </div> </div> </div>
Quand je clique sur le bouton, j'ai bien la fenêtre modale qui s'affiche, le message "test dans la console".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <script> $(document).ready(function(){ var preview = L.map('map').setView([48.08, -4.35 ], 10); preview.attributionControl.addAttribution('<a href="https://www.my.fr" target="_blank">my</a>'); var layers = L.layerGroup().addTo(preview); L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', { attribution: 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a>', maxZoom: 18 }).addTo(preview); $(".btnInfos").on("click", function(e){ console.log("test"); setTimeout(function() { preview.invalidateSize(); }, 100); }); }); }); </script>
Mais la carte ne se charge pas correctement : il n'y a pas toutes les dalles, et ça dépasse largement de la fenêtre modale, l'affichage de la carte ne reste pas limité aux dimensions spécifiées dans la balise id=map.
Pourtant, de ce que j'ai vu dans différents forums, c'est le but de l'instruction invalidateSize.
Qu'est ce qui cloche?
Merci,
Nico
Partager