Mettre un bouton pour fermer zoom photo
Résolu/Fermé
mont_dani
Messages postés
232
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
7 mai 2024
-
15 nov. 2021 à 14:58
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 16 nov. 2021 à 19:33
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 16 nov. 2021 à 19:33
A voir également:
- Html zoom image onclick
- Image iso - Guide
- Editeur html - Télécharger - HTML
- Acronis true image - Télécharger - Sauvegarde
- Zoom pour pc - Télécharger - Téléphonie & Visio
- Zoom ecran pc - Guide
5 réponses
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
15 nov. 2021 à 15:55
15 nov. 2021 à 15:55
Bonjour,
Tu as une erreur de syntaxe sur l'utilisation de ::before :
https://developer.mozilla.org/fr/docs/Web/CSS/::before
Au passage, il n'est pas correct d'avoir une balise <a> à l'intérieur d'une autre balise <a>.
Tu devrais remplacer la balise <a> utilisé pour afficher la croix par une balise non interactive (une balise <span> par exemple).
L'utilisation de la balise <div> semble également inutile ici.
Bonne journée,
Tu as une erreur de syntaxe sur l'utilisation de ::before :
.arrow::before { content: "X"; }
https://developer.mozilla.org/fr/docs/Web/CSS/::before
Au passage, il n'est pas correct d'avoir une balise <a> à l'intérieur d'une autre balise <a>.
Tu devrais remplacer la balise <a> utilisé pour afficher la croix par une balise non interactive (une balise <span> par exemple).
L'utilisation de la balise <div> semble également inutile ici.
Bonne journée,
mont_dani
Messages postés
232
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
7 mai 2024
15 nov. 2021 à 17:51
15 nov. 2021 à 17:51
Merci Pilet pour ton message.
Correction faite voici mon code:
Mais la croix ne s'affiche pas pour fermer la fenetre.
Une idée?
Correction faite voici mon code:
<a href="../../image/galeria/42111a (5).jpg"> <img src="../../image/galeria/42111a (5).jpg"><span class="arrow"></span> </a>
Mais la croix ne s'affiche pas pour fermer la fenetre.
Une idée?
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
15 nov. 2021 à 20:34
15 nov. 2021 à 20:34
La croix s'affiche bien mais uniquement sur la page html qui affiche l'image : https://jsfiddle.net/y8df65n4/
Si on cliques sur le lien html, puisque celui-ci pointe sur l'image (href="../image.jpg"), le navigateur va alors afficher cette image.
Dans ce cas, le navigateur n'affiche pas une page html mais directement le document image, il n'est donc pas possible d'ajouter une croix en html/css sur cette image pour revenir à la page précédente du navigateur.
Une solution en html serait de modifier le lien afin de le faire pointer vers une autre page html (href="/galerie.html"). Dans cette 2e page html, on peut afficher l'image dans un autre format et créer un lien sous forme de croix pour revenir à la première page.
Le plus souvent pour faire un zoom sur une image, on va préférer rester sur la même page.
Une solution possible est alors d'utiliser javascript pour afficher l'image dans une fenêtre modale. Quelques exemples :
https://www.w3schools.com/howto/howto_css_modal_images.asp
https://codepen.io/r3dg3cko/pen/ZLryQG
https://css-tricks.com/creating-a-modal-image-gallery-with-bootstrap-components/
Si on cliques sur le lien html, puisque celui-ci pointe sur l'image (href="../image.jpg"), le navigateur va alors afficher cette image.
Dans ce cas, le navigateur n'affiche pas une page html mais directement le document image, il n'est donc pas possible d'ajouter une croix en html/css sur cette image pour revenir à la page précédente du navigateur.
Une solution en html serait de modifier le lien afin de le faire pointer vers une autre page html (href="/galerie.html"). Dans cette 2e page html, on peut afficher l'image dans un autre format et créer un lien sous forme de croix pour revenir à la première page.
Le plus souvent pour faire un zoom sur une image, on va préférer rester sur la même page.
Une solution possible est alors d'utiliser javascript pour afficher l'image dans une fenêtre modale. Quelques exemples :
https://www.w3schools.com/howto/howto_css_modal_images.asp
https://codepen.io/r3dg3cko/pen/ZLryQG
https://css-tricks.com/creating-a-modal-image-gallery-with-bootstrap-components/
mont_dani
Messages postés
232
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
7 mai 2024
16 nov. 2021 à 09:49
16 nov. 2021 à 09:49
Merci Pitet pour ton aide.
Cela fonctionne très bien en utilisant le srcipt de https://codepen.io/r3dg3cko/pen/ZLryQG.
Cependant, j'ai un problème. Quand je suis en local tout va bien, mais quand je passe sur serveur, le téléchargement des photo est long.
Si tu connais JS, pourrais-tu me dire comment insérer dans le script une variable php ($imagegrande) qui serait le nom dela photo en grande taille.
Voici le script
Merci pour ton aide.
Au cas cela pourrait t'aider voici tout le script.
Cela fonctionne très bien en utilisant le srcipt de https://codepen.io/r3dg3cko/pen/ZLryQG.
Cependant, j'ai un problème. Quand je suis en local tout va bien, mais quand je passe sur serveur, le téléchargement des photo est long.
Si tu connais JS, pourrais-tu me dire comment insérer dans le script une variable php ($imagegrande) qui serait le nom dela photo en grande taille.
Voici le script
function onClick(element) { document.getElementById("img01").src = element.src; document.getElementById("modal01").style.display = "block"; }
Merci pour ton aide.
Au cas cela pourrait t'aider voici tout le script.
if (!empty($_POST['pais'])){ if(isset($_POST)) { $categoria = $_POST["pais"]; $imagegrande = glob('../../image/galeria/'.$categoria.'*'); // toute les photo qui commence par $files = glob('../../image/galeria/mini/'.$categoria.'*'); // toute les photo qui commence par $lines = count($files); // nombre de photo $nb_colonne = 3; // nombre de colonnes a l'affichage $nb_imgCel = ceil($lines/$nb_colonne); // Nombre d'images par cellule //variable utilisées pour recréer un array organisé comme tu le souhaites $arrF = []; $row = 0; $col = 0; $K = 0; //on boucle sur chaque fichier : foreach($files as $F){ if($col>0 && $col % ($nb_colonne-1) == 0 && $K>=$nb_imgCel){ $col=0; $K=0; $row++; } if($K>0 && $K % $nb_imgCel == 0){ $col++; $K=0; } $arrF[$row][$col][] = $F; $K++; } //pour voir à quoi ressemble l'array echo "<table width='60%' align='center'>"; foreach($arrF as $Row ){ echo "<tr>"; foreach($Row as $Col){ echo "<td width='30%' style='vertical-align: top;>"; foreach($Col as $img){ echo "<div class='container1'><img class='catimage' src='$img' style=' cursor:pointer' onclick='onClick(this)' class='modal-hover-opacity'/><br></div>"; ?> <div id="modal01" class="modal" onclick="this.style.display='none'"> <span class="close">X</span> <div class="modal-content"> <img id="img01" style="max-width:70%"> </div> </div> <script> function onClick(element) { document.getElementById("img01").src = element.src; document.getElementById("modal01").style.display = "block"; } </script> <?php } echo "</td>"; } echo "</tr>"; } } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
16 nov. 2021 à 19:33
16 nov. 2021 à 19:33
Si tu reprends l'exemple proposé sur codepen, tu n'as normalement pas besoin de modifier le javascript, il faut simplement appeler la fonction javascript lorsqu'on clique sur l'image en ajoutant un attribut html onclick sur les balises img, ce que tu as bien fait.
Pour info, l'image est automatiquement passée à la fonction javascript grâce mot-clé this passé en paramètre.
Par contre, le code html de la fenêtre modale et la déclaration de la fonction javascript ne doit apparaitre qu'une seule fois dans la page html, il faut donc les sortir de la boucle foreach :
Je me suis permis de renommer la fonction javascript en "showImageInModal". Tu peux lui donner un autre nom si tu préfères, mais le nom "onClick" n'était pas très pertinent (le nom devrait décrire ce que fait la fonction).
Pense à regarder la console du navigateur voir pour les éventuelles erreurs javascript.
Enfin, concernant le délai de chargement des images sur serveur, il faudrait surement optimiser tes images pour réduire leurs poids (mise à l'échelle, compression, choix du format, etc...).
C'est un sujet un peu vaste qui pourrait faire l'objet d'une autre discussion, et tu pourras facilement trouver pleins d'infos sur le net à ce sujet, à minima redimensionner les images selon leurs tailles affichées (par exemple, pas besoin d'avoir une image de 2000px de large si elle n'est affichée au maximum que sur 500px dans le site web).
Pour info, l'image est automatiquement passée à la fonction javascript grâce mot-clé this passé en paramètre.
Par contre, le code html de la fenêtre modale et la déclaration de la fonction javascript ne doit apparaitre qu'une seule fois dans la page html, il faut donc les sortir de la boucle foreach :
<?php if (!empty($_POST['pais'])) { if (isset($_POST)) { $categoria = $_POST["pais"]; $imagegrande = glob('../../image/galeria/' . $categoria . '*'); // toute les photo qui commence par $files = glob('../../image/galeria/mini/' . $categoria . '*'); // toute les photo qui commence par $lines = count($files); // nombre de photo $nb_colonne = 3; // nombre de colonnes a l'affichage $nb_imgCel = ceil($lines / $nb_colonne); // Nombre d'images par cellule //variable utilisées pour recréer un array organisé comme tu le souhaites $arrF = []; $row = 0; $col = 0; $K = 0; //on boucle sur chaque fichier : foreach ($files as $F) { if ($col > 0 && $col % ($nb_colonne - 1) == 0 && $K >= $nb_imgCel) { $col = 0; $K = 0; $row++; } if ($K > 0 && $K % $nb_imgCel == 0) { $col++; $K = 0; } $arrF[$row][$col][] = $F; $K++; } echo "<table width='60%' align='center'>"; foreach ($arrF as $Row) { echo "<tr>"; foreach ($Row as $Col) { echo "<td width='30%' style='vertical-align: top;>"; foreach ($Col as $img) { echo "<div class='container1'><img class='catimage' src='$img' style=' cursor:pointer' onclick='showImageInModal(this)' class='modal-hover-opacity'/><br></div>"; } echo "</td>"; } echo "</tr>"; } ?> <div id="modal01" class="modal" onclick="this.style.display='none'"> <span class="close">X</span> <div class="modal-content"> <img id="img01" style="max-width:70%"> </div> </div> <script> function showImageInModal(element) { document.getElementById("img01").src = element.src; document.getElementById("modal01").style.display = "block"; } </script> <?php } }
Je me suis permis de renommer la fonction javascript en "showImageInModal". Tu peux lui donner un autre nom si tu préfères, mais le nom "onClick" n'était pas très pertinent (le nom devrait décrire ce que fait la fonction).
Pense à regarder la console du navigateur voir pour les éventuelles erreurs javascript.
Enfin, concernant le délai de chargement des images sur serveur, il faudrait surement optimiser tes images pour réduire leurs poids (mise à l'échelle, compression, choix du format, etc...).
C'est un sujet un peu vaste qui pourrait faire l'objet d'une autre discussion, et tu pourras facilement trouver pleins d'infos sur le net à ce sujet, à minima redimensionner les images selon leurs tailles affichées (par exemple, pas besoin d'avoir une image de 2000px de large si elle n'est affichée au maximum que sur 500px dans le site web).