Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

187
Vistas
Cómo agregar un elemento dinámico a una imagen abierta en lightgallery.js

Tengo una página que muestra muchas fotos que se pueden abrir con lightgallery.js

Ya hice algunos subtítulos HTML personalizados que funcionan bien. Pero ahora quiero agregar una etiqueta a la imagen misma. ¿Cómo puedo hacer eso?

Mostraré un ejemplo de cómo se ve mi página de fotos:

ingrese la descripción de la imagen aquí

Cuando abres una imagen, esto es lo que parece:

ingrese la descripción de la imagen aquí

La parte izquierda es un título HTML personalizado que vinculé con este atributo: data-sub-html .

Código de ejemplo de mi código en bucle:

 $photomasonry .= ' <div class="tile scale-anm noselect"> <a href="https://studio.website.nl/'.$getphotos['preview'].'" data-sub-html="#caption'.$imgcount.'" class="item masonrytile" data-src="https://studio.website.nl/'.$getphotos['preview'].'"> <img src="https://studio.website.nl/'.$getphotos['preview'].'"/> <span class="idlabel">'.$getphotos['id'].'</span> <span class="sizelabel">'.$size.'</span> </a> </div>'; $photomasonry .= ' <div id="caption'.$imgcount.'" style="display:none"> <img src="https://studio.website.nl/images/logo.png"> <h4 class="subhtmlh4">Maak iets moois met deze foto</h4> <div class="gallerypopupbtns"> <a href="design-magazijn/stockfotos/'.$_GET['alias'].'/'.$getphotos['id'].'"><button class="btnstyle purplebtn" type="button" name="button">Maak iets moois</button></a> </div> </div>'; $imgcount++;

Pero ahora quiero este ícono de tamaño púrpura (L, XL, XX) como una etiqueta en la imagen cuando se abre la galería de luz. ¿Cómo puedo hacer esto? El html de la galería de luz solo se genera después de cargar la página.

Quiero agregar un elemento dentro de esta parte:

 <div class="lg-img-wrap"> <img class="lg-object lg-image" src="https://studio.website.nl/images/photos/previews/preview-bb58317c8d05e29b32963e7a295a5b9f.jpg"> </div>

Pero no solo eso, el contenido es dinámico, así que muestra el tamaño correcto para la imagen correcta. Ya creé esto para la página de descripción general de la foto, pero no al hacer clic en una foto.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

De acuerdo con los documentos de la galería de luz, puede usar el evento lgAfterOpen para ejecutar el código una vez que se abre la galería. Sin embargo, lightgallery hace que esto sea un poco difícil ya que no puede acceder a la imagen en la que se hizo clic desde este evento, pero puede acceder desde el evento lgBeforeOpen . Con esto en mente, lo lograría haciendo dos cosas.

En primer lugar, agregue el tamaño como atributo de datos de cada imagen:

 <img src="https://studio.website.nl/'.$getphotos['preview'].'" data-size="'.$size.'"/>

En segundo lugar, agregue las siguientes funciones al inicializar lightgallery:

 // example gallery definition const lg = document.getElementById('custom-events-demo'); // add the following functions lg.addEventListener('lgBeforeOpen', (event) => { //add datasize property to target so it can be accessed in the afterOpen function event.target.dataset.size = event.explicitOriginalTarget.dataset.size; }); lg.addEventListener('lgAfterOpen', (event) => { // get size from data attribute var size = event.target.dataset.size; // get the .lg-img-wrap div to append size to var imgWrap = document.querySelector(".lg-container.lg-show .lg-img-wrap"); // create and append span var sizeSpan = document.createElement("span"); sizeSpan.classList.add("sizelabel"); sizeSpan.innerHTML = size; imgWrap.appendChild(sizeSpan); }); //initialise lightgallery lightGallery(lg);

Es posible que esté utilizando una versión diferente de lightgallery, pero cuando probé esto, el .lg-img-wrap era un elemento de picture , no un div , por lo que reemplacé la última línea de la función de escucha de eventos con lo siguiente para obtener el tamaño a mostrar:

 imgWrap.parentElement.appendChild(sizeSpan);

Es posible que necesite un poco de CSS adicional para colocar el rango de tamaño como desee, pero solo para que se muestre todo lo que necesita es:

 .sizelabel { position: relative; }

Nota: no creo que esto funcione si navega a una imagen diferente desde lightgallery, ya que no actualizará el tamaño y, de hecho, es posible que el tamaño se elimine. Para solucionar esto, probablemente necesite hacer algo usando el evento lgAfterSlide y el índice de la imagen, pero de su captura de pantalla parece que no espera que el usuario se desplace por las imágenes dentro de lightgallery de todos modos, por lo que esto puede no ser un problema. .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda