Crea un carrusel con jQuery

jQuery - Carrusel

En muchas páginas webs hay carruseles que muestran una imagen y un pequeño texto. Un ejemplo de estos carruseles lo podemos ver algunas páginas de empresas de diseño web, donde nos muestras el nombre de uno de sus diseños y una pequeña captura. También son frecuentes en webs de revistas, usados para mostrar los artículos más destacados.

Desde hacía tiempo quería crear un carrusel con jQuery y hace un rato he encontrado un plugin de este framework que es precisamente lo que andaba buscando: Step Carousel.

Para añadir el carrusel basta con enlazar jQuery y el plugin mediante <script /> y luego añadir el siguiente código Javascript, que inicia el carrusel:

<script type="text/javascript">
stepcarousel.setup({
galleryid: 'carousel', //ID del div que contiene el carrusel
beltclass: 'belt', //Clase del primer div dentro del carrusel, que contiene al resto de divs
panelclass: 'panel', //Clase de cada panel individual
autostep: {enable:true, moveby:1, pause:3000},
panelbehavior: {speed:500, wraparound:true, persist:true},
statusvars: ['statusA', 'statusB', 'statusC'], //register 3 variables that contain current panel (start), current panel (last), and total panels
contenttype: ['external'] //content setting ['inline'] or ['external', 'path_to_external_file']
})
</script>

También es necesario incluir un poco de CSS para que el carrusel funcione correctamente:

#carousel {
position: relative; /* Necesario */
overflow: hidden; /* Necesario */
height: 250px;
margin-left:35px;
background:#5B5B5B url(carousel-bg.png) bottom left repeat-x;
}

#carousel .belt {
position: absolute; /* Necesario */
left: 0;
top: 0;
margin:0 10px 10px 0;
}

#carousel .panel {
width:265px;
float: left; /* Necesario */
overflow: hidden;
margin: 15px;
padding:7px;
border:1px solid #5B5B5B;
background:#383838 url(carousel-panel-bg.png) bottom left repeat-x;
}

Finalmente, este es el código HTML que usaremos en el carrusel:

<a href="javascript:stepcarousel.stepBy('carousel', 1)">Anterior</a>
<a href="javascript:stepcarousel.stepBy('carousel', -1)">Posterior</a>

<div id="carousel" class="stepcarousel">

<div class="belt">

<div class="panel">
<img src="img1.png" />
<div class="panel-text">
<p>Este carousel es una demostraci&oacute;n</p>
</div>
</div>

<div class="panel">
<img src="img2.png" />
<div class="panel-text">
<p>de un tutorial de <a href="http://sumolari.com">Sumolari.com</a>.</p>
</div>
</div>

</div>
</div>

El código es sencillo de entender y fácil de personalizar. Por ejemplo, para añadir más paneles basta con añadir más bloques, que tienen la siguiente estructura:

<div class="panel">
<img src="img2.png" />
<div class="panel-text">
<p>de un tutorial de <a href="http://sumolari.com">Sumolari.com</a>.</p>
</div>
</div>

Si lo que queremos es que el link pase dos paneles en lugar de uno, basta con cambiar el -1 o el 1 por -2 o 2 respectivamente.

He montado una demostración del carrusel que se puede ver aquí.

Por último, podéis descargar la demostración desde aquí (incluye imágenes, Javascript y CSS).

Hay un total de 26 comentarios y 1 pingbacks / trackbacks.

Tyler

Hola!! Buen blog sin duda alguna, enhorabuena por los tutoriales que te curras tío. Solo tengo una duda con el carrusel (y ni idea de programación claro), ¿se puede hacer que el carrusel se mueva automaticamente cada x segundos el solo?
Gracias y de nuevo, enhorabuena

Sí, se puede, basta con modificar esta línea del código que inicia el carrusel:

autostep: {enable:true, moveby:1, pause:3000},

Donde moveby indica el número de paneles que se desplazan cada vez y pause el tiempo entre cada desplazamiento.

Si haces clic en los botones de mover el panel manualmente, se desactiva el movimiento automático.

 

Hola: He puesto el código para hacer que el carrusel gire sólo pero no funciona, que puede estar mal.
Muchas gracias.

zoooooo

Plugin could not be activated because it triggered a fatal error.
Fatal error: Class wp_carousel_widget: Cannot inherit from undefined class wp_widget in /wp-content/plugins/wp-carousel/wp-carousel.php on line 754

??????

@HugoAlva: Si no das más datos no te puedo decir nada. ¿Qué error te aparece?

@zoooooo: WP Carousel 0.3 only works with WordPress 2.8 or later. The error says that WP Carousel can’t create the widget. WP Carousel uses a new API included in WordPress 2.8 to create the widget.

Por cierto, para pedir ayuda sobre WP Carousel, mejor hacerlo en la página del plugin.

navegante

En opera se muestra mal en la parte izquierda se rompe el diseño.

Pedro

Hola, en primer lugar, enhorabuena por tu blog. Aunque es la primera vez que hago un comentario, lo visito muy amenudo.
El carousel me funciona perfectamente, pero he intentado ir un poco más allá, probando a insertar 2 carouseles en una misma página y el segundo no me funciona. He cambiado el nombre del segundo “galleryid”, pero no me funciona, alguna pista o detalle que debería tener en cuenta?.
Gracias y ánimo.

@Pedro:

Puede que se deba a que debes repetir el código Javascript que inicia el carrusel. Por ejemplo, si usas un sólo carrusel, el código sería así:

stepcarousel.setup({
galleryid: ‘carousel’, //ID del div que contiene el carrusel
beltclass: ‘belt’, //Clase del primer div dentro del carrusel, que contiene al resto de divs
panelclass: ‘panel’, //Clase de cada panel individual
autostep: {enable:true, moveby:1, pause:3000},
panelbehavior: {speed:500, wraparound:true, persist:true},
statusvars: ['statusA', 'statusB', 'statusC'], //register 3 variables that contain current panel (start), current panel (last), and total panels
contenttype: ['external'] //content setting ['inline'] or ['external', 'path_to_external_file']
})

Sin embargo, si quieres usar dos, debería ser así:

stepcarousel.setup({
galleryid: ‘carousel’, //ID del div que contiene el carrusel
beltclass: ‘belt’, //Clase del primer div dentro del carrusel, que contiene al resto de divs
panelclass: ‘panel’, //Clase de cada panel individual
autostep: {enable:true, moveby:1, pause:3000},
panelbehavior: {speed:500, wraparound:true, persist:true},
statusvars: ['statusA', 'statusB', 'statusC'], //register 3 variables that contain current panel (start), current panel (last), and total panels
contenttype: ['external'] //content setting ['inline'] or ['external', 'path_to_external_file']
})
stepcarousel.setup({
galleryid: ‘carousel2′, //ID del div que contiene el carrusel
beltclass: ‘belt’, //Clase del primer div dentro del carrusel, que contiene al resto de divs
panelclass: ‘panel’, //Clase de cada panel individual
autostep: {enable:true, moveby:1, pause:3000},
panelbehavior: {speed:500, wraparound:true, persist:true},
statusvars: ['statusA', 'statusB', 'statusC'], //register 3 variables that contain current panel (start), current panel (last), and total panels
contenttype: ['external'] //content setting ['inline'] or ['external', 'path_to_external_file']
})

Y luego también deberías repetir el código HTML y CSS de forma similar a como lo he hecho con el Javscript.

@navegante: El código que pongo es sólo de ejemplo, si ves que no se ve correctamente o que no se adapta a tu diseño modíficalo como veas necesario.

JACU

Hola muy buena aportación, solo que me marcaba un error en explorer (el clasico error de javascrip), asi que me dedique a ver donde pudiera estar el error y encontre una manera de solucionarlo, no creo que sea la mejor pero lo que hize fue abrir tu carrusel.js y comentar de la linea 112 a la 119, y cambiar en la linea 15 autostep: {enable:false, moveby:1, pause:3000}, esto del index index.html.

Espero que les sirva y si me pueden ayudar a solicionar muchas gracias.

ATTE: JACU

gonzalo

he estado intentando lo mismo que otro usuario de poner 2 galerias en la misma pagina, he duplicado el scrip y los estilo pero nada ocurre en la segunda, alguien seria tan amable de compartir un ejemplo con 2 carruseles.

Gracias

Mikebric

necesito que me digan com colocar mas de un carousel en una misma pag.

de antemano gracias

Todos los que tengáis problemas con el tema de poner más de un carrusel en una página, he publicado un tutorial sobre cómo hacerlo, que podéis ver aquí.

djreigosa

Hola!
Fantástico el carrusel.
Tengo un pequeño problema. Yo tenía una galería bastante cutre y hacía ampliaciones de las fotos con el conocido prettyPhoto (similar a litebox y otros).
Ahora mi galeria la he transformado en este carrusel y quería seguir haciendo mis ampliaciones con el prettyphoto, sin embargo eso ya no funciona y nose a que puede ser debido.
La inicialización del prettyphoto la hacia en document.ready, mientras que la del carrusel, al igual que haces aquí, no la meto en document.ready. Nose si esto tiene algo que ver o no, pero el caso es que me gustaría hacer ampliaciones de las imagenes que pongo en el carrusel y me encuentro con que el que siempre uso, el prettyPhoto, ahora no carga…

Agradecería aportes! :-(

Pues supongo que será porque la imagen del carrusel tendrá que tener algún atributo extra, algo como rel=”lightbox” o similares, pero tampoco te lo puedo asegurar.

apl

Hola, muy buen carrusel. Alguien podria decirme como centrar el texto de cada imagen¿? No consio centrar el contenido del ni del >_<

    Respondiendo a apl

    Para centrar el texto basta que utilices el atributo text-align de CSS. Si utilizas el mismo código CSS que en el tutorial, basta que añadas:

    .panel-text { text-align:center; }

    Con esto se centrará el texto de cada panel.

rigo

hola como estas muchas gracias por tu blog estoy haciendo una galeria de imagenes con un carrusel abajo de la galeria te queria pedir ayuda, mi idea es parecida a la que se muestra en esta pagina http://www.mediotimepo.com me puedes ayudar por favor saludos y muchas gracias

    Respondiendo a rigo

    Para hacer un carrusel como ese tendrás que ampliar un poco el script del carrusel, ya que por defecto no se puede hacer que al hacer clic sobre una imagen, cargue contenido en un contenedor (aunque con AJAX se puede hacer sin mucha dificultad).

    Por lo demás, es cuestión de adaptar el aspecto mediante CSS y HTML.

    Trata de adaptarlo a lo que buscas y si te atascas en algún momento, no dudes en pedir ayuda.

Luis

Como decía JACU comentando esas líneas (112-119) del carrusel.js se consigue quitar el error … y a mí me ha conseguido hacer funcionar el modo automático. Sin quitar nada más, dejando autostep:true

franco

hola, excelente post

quisiera que me ayudaran, estoy usando imagenes mas pequenas, por lo que reduje la altura del carrousel, pero la imagen de las flechas se quedo exactamente donde estaban originalmente, osea, quedaron fuera del carrousel y por lo tanto no se ven

he estado buscando por todos los archivos y no encuentro como colocar las imagenes de las flechas mas “arriba” para que queden centradas de nuevo aunque haya reducido la altura de todo el carrousel

y tambien………..tengo el mismo problema, no encuentro la forma de reducir el ancho, quisiera que tuviera un ancho de 700px
saludos

    Respondiendo a franco

    En el código que he puesto en el artículo no está el CSS completo de la demo. En la demo encontrarás este código CSS:

    .button-prev {
    	height:250px;
    	width:35px;
    	float:left;
    	background:#5B5B5B url(carousel-bg.png) bottom left repeat-x;
    	-moz-border-radius:10px 0 0 10px;
    }
    
    .button-prev a {
    	display:block;
    	padding:5px;
    	margin-top:105px;
    }
    
    .button-next {
    	height:250px;
    	width:35px;
    	float:right;
    	background:#5B5B5B url(carousel-bg.png) bottom left repeat-x;
    	-moz-border-radius:0 10px 10px 0;
    }
    
    .button-next a {
    	display:block;
    	padding:5px;
    	margin-top:105px;
    }
    

    Fíjate en que se .button-prev y .button-next (las clases que se corresponden con el botón de anterior y posterior) tienen definido una altura, 250px. Cámbila por la que tenga tu carrusel. Por otro lado, si te fijas, los elementos a hijos de un elemento con clase button-prev tienen definido un margen superior de 105px (lo mismo para los elementos a hijos de un elemento con clase button-next).

    Para centrar completamente las flechas, el margen superior debería ser: ( – 35)/ 2. En mi demo debería ser: (250 – 35) / 2 = 215 / 2 = 107.5. He redondeado a 105 por comodidad.

    Reduciendo los valores de margen superior y de altura del elemento puedes centrar las flechas sin mucha dificultad.

    En cuanto al ancho, reduce el ancho de los elementos con clase .panel, ya que no he definido un ancho para el carrusel en sí.

franco

gracias sulomari eres mi idolo!!!!!

una ultima pregunta, esta si de plano no encuentro como hacerlo

creo entender que el texto debajo de las imagenes se encuenra dentro del div panel-text, pero al reducir la altura del div, el texto no quedo “centrado” como orginialmente estaba, quedo “abajo” por decirlo asi

    Respondiendo a franco

    Eso es porque en el CSS he especificado un espaciado (padding). Fíjate en el código CSS y verás (me estoy basando en el código de la demo):

    #carousel .panel .panel-text {
    	padding-top:5px;
    	font-size:13px;
    	font-family:Verdana, Geneva, sans-serif;
    	color:#FFF;
    }
    

    Cambia el padding-top:5px; por el tamaño que se adapte mejor. Redúcelo para subir el texto (o mejor dicho, bajarlo menos) o auméntalo para bajar el texto.

joel

hola que tal estoy usando tu utileria pero no mas no jala con ajax, lo que hago es que en el window.onload mando a llamar una funcion que crea mis divs y despues crea el carrusel, espero me puedas ayudar, el error es : stepcarousel no definido

    Respondiendo a joel

    Sin el código Javascript es difícil saber qué pasa. ¿Has cargado el JS de Stepcarousel? Siento no poder ayudarte más, pero no sé demasiado Javascript.


  • Creando múltiples carruseles con jQuery | Sumolari.com (24-10-2009):

    [...] que algunos tenían problemas para mostrar varios carruseles con aquel tutorial que escribí sobre cómo crear un carrusel con jQuery, hoy voy a explicar cómo crear varios carruseles, a modo de continuación del anterior tutorial, [...]


Escribe un comentario

:-) :-D :-P (H) ;-) (*) :-( :-O ;-( :-S :-$ (I) (Y) (N) (G) (^) (D) (C) (B) :-[ (@) (&) (L) (U) (K) (F) (W) (O) (E) (T) (~) (8) (P)