Lightbox next et previous comment faire
malo91
Messages postés
55
Statut
Membre
-
malo91 Messages postés 55 Statut Membre -
malo91 Messages postés 55 Statut Membre -
Bonjour à tous!
je galere avec ma lightbox! je debute en javascript, je comprends pas ce que je trouve sur le net alors si vous pouviez me lancer une bouee !! je suis sur un projet de photographe . j'ai un fichier .js ou je veux y mettre ses functions :
l'ouvrir, la fermer, afficher la 1ere media OK avec le code ci-dessus ca fonctionne mais je n'arrive pas :( à faire les defilements des autres)
dans un second fichier js j'ai tous mes evenements :
et enfin, mes elements DOM dans un fichier à part : (factory)
incappable d'arriver à mettre mes medias et les faire passer de gauche à droite :( ah oui j'allais oublier : mon html :
esct ce que vous pouvez m''aider? merci bcp
Configuration: Windows / Chrome 102.0.0.0
je galere avec ma lightbox! je debute en javascript, je comprends pas ce que je trouve sur le net alors si vous pouviez me lancer une bouee !! je suis sur un projet de photographe . j'ai un fichier .js ou je veux y mettre ses functions :
function displayLightBox(medias) { // On recreer chaque card Html stocker dans cardsDom const domLightBox = medias.map((media) => { //console.log(medias); return typeof media.image !== "undefined" ? `<img src="./assets/thumbnails/imagesMedias/${media.image}" alt="imagecloseup view" class="hide" data-media-lightbox="${media.id}"/>` : `<video controls width="250" class="hide"><source src="./assets/thumbnails/videosMedias/${media.video}" type="video/mp4"></video> <div class="lightbox__title"> ${media.title}`; }) //("") permet de supprimer les , d'un array*/ document.querySelector(".lightbox__content").innerHTML = domLightBox.join(""); } function openLightBox(cardClicked) { //console.log('carousel'); document.getElementById('carousel').classList.remove('hide'); // open liveBox en supprimant le hide document.querySelectorAll('[data-media-lightbox]').forEach((element) => { element.classList.add('hide') // on cache les autre images du carousel avec hide }) let id = cardClicked.dataset['media']; // On trouve la data-media qui identifie la media document.querySelector('[data-media-lightbox="' + id + '"]').classList.remove('hide');// on l'affiche en suppr le hide } function closeLightBox(){ document.getElementById('carousel').classList.add('hide');// ajout hide pour close carousel } function nextSlide(){ } function previousSlide(){ // affiche la suivante uniquement }
l'ouvrir, la fermer, afficher la 1ere media OK avec le code ci-dessus ca fonctionne mais je n'arrive pas :( à faire les defilements des autres)
dans un second fichier js j'ai tous mes evenements :
function dispatchEvent(medias) { eventMediaSort(medias); eventLightBox(); eventHeart(medias); function eventMediaSort(medias) { // document.getElementById("sort-choice").addEventListener("change", function (event) {//on chang les données triees let type = document.querySelector("#sort-choice").value; sortMediasByType(medias, type)//on trie par type displayMedias(medias); //on relance les medias displayLightBox(medias); // on lance les medias pour la lightbox }); } function eventLightBox(){ document.querySelector('.gallery-section').addEventListener("click", function (event) { const target = event.target; if (target.classList.contains('media')) {// si contient media openLightBox(target);// ouverture de la lightbox } }); document.getElementById('lightboxClose').addEventListener("click", closeLightBox) } // evenement de la modal de contact const mdContainer = document.querySelector(".md-container"); const modalTriggers = document.querySelectorAll(".modal-trigger"); modalTriggers.forEach(trigger => trigger.addEventListener("click", toggleModal)) function toggleModal(){ mdContainer.classList.toggle("active") } //au clic sur le coeur function eventHeart(){ document.querySelector('.fa-heart').addEventListener("click", countClics) } }
et enfin, mes elements DOM dans un fichier à part : (factory)
function headerFactory(photograph) { const { name, portrait, city, tagline, id } = photograph; const image = `assets/photographers/${portrait}`; function getHeaderCardDOM(){ const linkURL = "photographer.html"; const url = `${linkURL}?photographer=${id}`; return ` <article> <div class="profil"> <h1>${name}</h1> <p class="where">${city}</p> <p class="tagline">${tagline}</p> </div> <button class="modal-btn modal-trigger" id="modal">Contactez moi</button> <div> <a href=${url}><img src=${image} alt="photo"></ a> </div> </article>`; } return { name, image, getHeaderCardDOM }; } /**** elements DOM partie GALERIES **********/ function galleryFactory(data) { const { id, image, title, video, likes, date } = data; const imagesMedias = typeof image !== "undefined" ? `assets/thumbnails/imagesMedias/${image}` : `https://picsum.photos/200/300`; // a remplacer par le chemin de l'image associé a la vidéo const linkURL = "photographer.html"; const url = `${linkURL}?imagesMedias=${id}`; return ` <article> <div class ="gallery-section"> <figure> <img src=${imagesMedias} alt="pictures" tabindex="0" class="media" data-media="${id}"> <figcaption> <p class="infoMedia"> ${title}</p> <span class="numberLike" id="clicHeart">${likes}</span><i class="fa fa-solid fa-heart"></i> </figcaption> </figure> </div> </article>`; } /****************************************************************************/ function displayDataHeader(photographer) { const profilHeaderModel = headerFactory(photographer); document.querySelector(".photograph-header").innerHTML = profilHeaderModel.getHeaderCardDOM(); document.getElementById("nameModal").innerHTML = photographer.name; } /*********** Affichage des medias de l ID *******************************/ function displayMedias(medias) { // On recreer chaque card Html stocker dans cardsDom const cardsDom = medias.map((media) => { return galleryFactory(media); }); // On ecrase la section des cards par la nouvelle document.querySelector(".gallery-section").innerHTML = cardsDom; }
incappable d'arriver à mettre mes medias et les faire passer de gauche à droite :( ah oui j'allais oublier : mon html :
<!-- CAROUSEL LIGHTBOX --> <div id="carousel" class="lightbox hide"> <button class="lightbox__close" id="lightboxClose" aria-label="Close">Fermer</button> <button class="lightbox__next next" aria-label="next">Suivant</button> <button class="lightbox__prev previous"aria-label="previous">Précédent</button> <div class="lightbox__content"></div> </div>
esct ce que vous pouvez m''aider? merci bcp
Configuration: Windows / Chrome 102.0.0.0
A voir également:
- Cryhod previous os boot failed
- Dual boot - Guide
- Previous os boot failed - Guide
- Mac os 15 - Accueil - MacOS
- Reinstaller mac os - Guide
- Hiren's boot - Télécharger - Divers Utilitaires
2 réponses
Salut,
plutôt que de multiplier les bibliothèques ou Framework en JavaScript(Boostrap, peut-être React?)il serais plus simple de commencer par du pur JavaScript. Les bibliothèques logicielle et Framework n sont qu'une application de JavaScript avec ses particularités. Censé faire gagner du temps cela ne vous aidera pas à comprendre.
Même chose si vous prenez un code sur le net vous ne pouvez pas le copier coller sans le comprendre, il faut comprendre la logique et l'appliquer à votre contexte/page web.
Un exemple de ce que vous voulez(il faudra indiquer des adresses d'images existantes si vous voulez voir quelque chose) qui peut vous aider à comprendre.
Bien sûr il existe des cours et tutos bien mieux faits et plus explicite mais si vous ne comprenez pas cet exemple assez simpliste il vous manque les bases et dans ce cas avant de pouvoir faire une galerie d'images défilantes(c'est plus clair que "lightbox" quand même^^ déjà mettre les bonnes définitions ça aide aussi à comprendre) il faut vous tourner vers un cours débutant en JavaScript:
plutôt que de multiplier les bibliothèques ou Framework en JavaScript(Boostrap, peut-être React?)il serais plus simple de commencer par du pur JavaScript. Les bibliothèques logicielle et Framework n sont qu'une application de JavaScript avec ses particularités. Censé faire gagner du temps cela ne vous aidera pas à comprendre.
Même chose si vous prenez un code sur le net vous ne pouvez pas le copier coller sans le comprendre, il faut comprendre la logique et l'appliquer à votre contexte/page web.
Un exemple de ce que vous voulez(il faudra indiquer des adresses d'images existantes si vous voulez voir quelque chose) qui peut vous aider à comprendre.
Bien sûr il existe des cours et tutos bien mieux faits et plus explicite mais si vous ne comprenez pas cet exemple assez simpliste il vous manque les bases et dans ce cas avant de pouvoir faire une galerie d'images défilantes(c'est plus clair que "lightbox" quand même^^ déjà mettre les bonnes définitions ça aide aussi à comprendre) il faut vous tourner vers un cours débutant en JavaScript:
<!DOCTYPE html> <html> <head><meta charset="utf-8"><!-- valide XML--> </head> <body> <img id=galerie src=img0.jpg alt=image0> <hr/> <button id=bt-prev >Précédent</button> <button id=bt-next >Suivant</button> <script> "use strict" const listeImages=['img0.jpg', 'img1.jpg', 'img2.jpg', 'img3.jpg']; /** le tableau peut être modifié sans soucis(nombre d'images, adresse images...) */ const descriptions=['description image0','description image1','description image2','description image3'];/** si modif mettre à jour le texte alternatif aussi bien sûr*/ let positionEnCours=0,/** avec la virgule c'est une écriture raccourcie qui permet d'éviter de répéter const let ou var quand on crée plusieurs varaibles d'affilées*/ galerie=document.getElementById('galerie'), next=document.getElementById('bt-next'), prev=document.getElementById('bt-prev');/** le point virgule n'est pas obligatoire en fin de ligne, juste c'est plus clair pour voir où se termine la création des variables*/ prev.addEventListener('click',/** sélectionne l'élément qui a pou id bt-prev et détecte le clic*/ function(){/** événement lors du clic*/ console.log(positionEnCours-1) if(positionEnCours-1 < 0){/** si positionEncours-1 est inférieur à 0(la limite inférieure de notre tableau)*/ positionEnCours = listeImages.length-1 /* on lui donne la taille du tableau listeImages-1(-1 car le premier index d'un tableau est 0) */ console.log('boucle à l\'index '+(listeImages.length-1)) }else{ /** sinon on soustrait 1 */ positionEnCours=positionEnCours-1 } /** mise à jour de l'image et du texte alternatif*/ galerie.src=listeImages[positionEnCours] galerie.setAttribute('alt', descriptions[positionEnCours]) console.log("position:"+positionEnCours+" , image:"+listeImages[positionEnCours]+", alt:"+descriptions[positionEnCours]) })/** fin de lécouteur de clic sur HTMLELementButton.id.bt-prev*/ /** même chose mais dans le sens "inverse" : ajout de 1 à la position , mise à 0 si postion +1 > à la taille du tableau*/ next.addEventListener('click',function(){ if(positionEnCours+1>listeImages.length-1){ positionEnCours= 0 }else{ positionEnCours++/** opérateur d'affectation identique à: positionEnCours=positionEnCours+1*/ } console.log("position:"+positionEnCours+" , image:"+listeImages[positionEnCours]+", alt:"+descriptions[positionEnCours]) galerie.src=listeImages[positionEnCours] galerie.setAttribute('alt', descriptions[positionEnCours]) }) </script> </body> </html>
Plutôt simple non, si on enlève les log et les commentaires il n'y a même pas 30 lignes de codes à comprendre.
Une fois compris le principe vous pouvez faire la même chose avec un script externe comme une grosse bibliothèque ou un script de lightbox trouvé sur le web.