Slideshow declarativo, modular y extensible para general.js
| Característica | Descripción |
|---|---|
✅ Declarativo por atributos data- |
Configura el slideshow directamente en HTML |
| 🧩 Modular y extensible | Compatible con plugin systems y efectos personalizados |
| 🎞️ Animaciones visuales por clase | Efectos desacoplados (fade, slide, none) |
| 🧃 Autoheight dinámico | Ajusta la altura del contenedor según el contenido del slide |
| 🧠 Metadata por slide | Trazabilidad con data-slide-meta, data-caption, data-slide-state |
| 🔘 Navegación externa | Control desde botones con data-slide-prev, data-slide-next, data-slide-go |
| 🧠 API imperativa avanzada | Métodos como pause, resume, go, addSlide, removeSlide, getMeta |
| 🧪 Debug visual y trazabilidad | console.groupCollapsed, dataset por slide, inspección DOM |
🧬 Integración con general.js |
Compatible con g(selector) para control declarativo e imperativo |
| Método | Descripción |
|---|---|
initSlideshow(el) |
Inicializa el slideshow en el elemento especificado |
slideNext() |
Avanza al siguiente slide |
slidePrev() |
Retrocede al slide anterior |
slideGo(index) |
Navega a un slide específico |
slidePause() |
Pausa el autoplay |
slidePlay() |
Reanuda el autoplay |
slideDestroy() |
Elimina el slideshow y limpia el DOM |
getCurrentSlide() |
Devuelve el índice del slide activo |
getSlideMeta() |
Devuelve metadata del slide activo |
addSlide(node, meta) |
Agrega dinámicamente un nuevo slide con metadata opcional |
removeSlide(index) |
Elimina un slide por índice |
setFx(name) |
Cambia el efecto visual en tiempo real |
registerEffect(name, fn) |
Registra un nuevo efecto visual personalizado |
getSlideshow(elOrId) |
Devuelve la instancia API del slideshow por elemento o ID |
| Atributo | Tipo | Descripción | Valor por defecto |
|---|---|---|---|
data-slide-fx |
string |
Tipo de efecto visual (fade, slide, none) |
"fade" |
data-slide-timeout |
number |
Tiempo en milisegundos entre transiciones automáticas | 3000 |
data-slide-autoheight |
boolean |
Ajusta automáticamente la altura del contenedor al contenido del slide | false |
data-slide-meta |
boolean |
Activa trazabilidad por slide (data-slide-state, data-caption, etc.) |
false |
data-slide-pager |
string |
Selector del contenedor de paginación externa | null |
data-slide-on-start |
string |
Nombre de función global que se ejecuta al iniciar un slide | null |
data-slide-on-end |
string |
Nombre de función global que se ejecuta al finalizar un ciclo | null |
| Versión | Fecha | Cambios realizados |
|---|---|---|
v1.0.0 |
2025-10-06 | Versión avanzada con arquitectura modular, trazabilidad y API imperativa completa |
- Registro de efectos visuales personalizados (registerEffect) |
||
- Navegación externa por atributos declarativos (data-slide-*) |
||
- Metadata por slide (data-caption, data-slide-state, data-slide-meta) |
||
- API imperativa con addSlide, removeSlide, getSlideMeta, setFx |
||
- Debug visual con console.groupCollapsed y dataset por slide |
||
- Integración declarativa e imperativa con general.js |
<div id="galeria" class="slide-show"
data-slide-fx="fade"
data-slide-timeout="4000"
data-slide-autoheight="true"
data-slide-meta="true">
<img src="img1.jpg" data-caption="Primera imagen">
<img src="img2.jpg" data-caption="Segunda imagen">
<img src="img3.jpg" data-caption="Tercera imagen">
</div>
<button data-slide-prev="galeria">Anterior</button>
<button data-slide-next="galeria">Siguiente</button>
<script>
g('#galeria').initSlideshow();
</script><div id="slideshow-container"></div>
<button id="btn-next">Siguiente</button>
<button id="btn-prev">Anterior</button>// Crear el contenedor dinámicamente
const container = g('div')
.addClass('slide-show')
.attr({
id: 'galeria-js',
'data-slide-fx': 'fade',
'data-slide-timeout': '3000',
'data-slide-autoheight': 'true',
'data-slide-meta': 'true'
})
.appendTo('body');
// Crear slides dinámicamente
const slides = [
{ src: 'img1.jpg', caption: 'Primera imagen' },
{ src: 'img2.jpg', caption: 'Segunda imagen' },
{ src: 'img3.jpg', caption: 'Tercera imagen' }
];
slides.forEach(({ src, caption }) => {
g('img')
.attr({ src, 'data-caption': caption })
.appendTo(container);
});
// Inicializar slideshow con gdom
const api = g('#galeria-js').initSlideshow();
// Crear botones externos con gdom
g('button')
.text('⟵ Anterior')
.on('click', api.slidePrev)
.appendTo('body');
g('button')
.text('Siguiente ⟶')
.on('click', api.slideNext)
.appendTo('body');<script src="https://cdn.underdevelopment.work/generaljs/slideapi.js"></script>