Hola a todos, estoy intentando hacer un widget para mi blog que sea un slider de una serie de 10 fichas que he hecho a base de CSS y HTML. El problema es que en el editor HTML lo tengo todo correcto, pero al añadir todo el código a mi web no obtengo el resultado que sí consigo en el editor. Creo que el problema es el JavaScript.
Si entráis en http://www.dostiroslibres.com/
podréis ver cómo en el lateral derecho debajo de la imagen hay un slider que comienza con la primera ficha de las 10 (que he creado consecutivas la una a la otra). Pero en cuanto tiene que hacer el scroll no pasa a la siguiente, sino que se queda en el limbo. SI sigues pulsado los botones llegas de nuevo a la primera y después a 3 fichas más. En ese momento es el único donde eso es el efecto que quiero. Pero al pasar a la cuarta ficha vuelven a desaparecer y no aparecen las seis restantes.
Me gustaría que me dijerais como hago para que el slider funcione de manera automática correctamente y para que me vaya scrolleando las 10 fichas. Os dejo el código, tanto HTML como CSS del widget, a ver si sabéis de dónde viene el error, porque yo ya no se qué hacer.
Muchas gracias.
HTML con el JavaScript y el estilo del slider.
<div id="contenedor_principal"> <span class="flecha izq"></span> <span class="flecha der"></span> <div id="contenedor_slider"> <div id="slider22"> <div id="pricing-table" class="clear"> <div class="plan"> <h3><b>#1</b> Jahill Okafor<span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/okafor_zpsgsee5w3s.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año:</b> 1995 (19)</li> <li><b>College:</b> Duke</li> <li><b>Posición NBA:</b> C</li> <li><b>Estadísticas:</b> 18.3 Pts 9.4 Rbt</li> </ul> </div> <div class="plan"> <h3><b>#2</b> Karl Towns<span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/towns_zpshrudmhhf.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año</b> 1995 (19)</li> <li><b>College:</b> Kentucky</li> <li><b>Posición NBA:</b> PF/C</li> <li><b>Estadísticas:</b> 9.3 Pts 6.8 Rbt</li> </ul> </div> <div class="plan"> <h3><b>#3</b><font size="4"> D'Angelo Russell</font><span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/russel_zpsh8lzcdoh.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año</b> 1996 (19)</li> <li><b>College:</b> Ohio State</li> <li><b>Posición NBA:</b> PG</li> <li><b>Estadísticas:</b> 19 Pts 5.3 Ast</li> </ul> </div> <div class="plan"> <h3><b>#4</b><font size="3"> Emmanuel Mudiay</font><span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/mudiay_zpstrgf0w70.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año:</b> 1996 (18)</li> <li><b>Equipo:</b> Guangdong</li> <li><b>Posición NBA:</b> PG</li> <li><b>Estadísticas:</b> 17.7 Pts 5.9 Asts</li> </ul> </div> <div class="plan"> <h3><b>#5</b><font size="4"> Stanley Johnson</font><span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/johson_zpsxjrcnqbs.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año</b> 1996 (18)</li> <li><b>College:</b> Arizona</li> <li><b>Posición NBA:</b> SF</li> <li><b>Estadísticas:</b> 19 Pts 6.8 Rbt</li> </ul> </div> <div class="plan"> <h3><b>#6</b> Mario Hezonja<span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/hezonja_zpsz15zbrws.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año</b> 1995 (20)</li> <li><b>Equipo:</b> FC Barcelona</li> <li><b>Posición NBA:</b> SG/SF</li> <li><b>Estadísticas:</b> 8.6 Pts 2 Rbt</li> </ul> </div> <div class="plan"> <h3><b>#7</b><font size="3"> Willie Cauley-Stein</font><span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/cauley_zpsplysswzj.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año</b> 1993 (21)</li> <li><b>College:</b> Kentucky</li> <li><b>Posición NBA:</b> C</li> <li><b>Estadísticas:</b> 9.1 Pts 6.7 Rbt</li> </ul> </div> <div class="plan"> <h3><b>#8</b><font size="3"> Kristaps Porzingis</font><span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/porzinings_zpsrsxal7kn.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año</b> 1995 (19)</li> <li><b>Equipo:</b> CB Sevilla</li> <li><b>Posición NBA:</b> PF</li> <li><b>Estadísticas:</b> 10.1 Pts 4.7 Rbt</li> </ul> </div> <div class="plan"> <h3><b>#9</b> Justise Winslow<span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/winslow_zpsyjlyewga.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año</b> 1996 (18)</li> <li><b>College:</b> Duke</li> <li><b>Posición NBA:</b> SF</li> <li><b>Estadísticas:</b> 12.0 Pts 5.6 Rbt</li> </ul> </div> <div class="plan"> <h3><b>#10</b> Myles Turner<span><img src="http://i288.photobucket.com/albums/ll175/dostiroslibres/turner_zpswe9tsjqw.png" /></span></h3> <a class="signup" href="">VER FICHA</a> <ul> <li><b>Año:</b> 1996 (18)</li> <li><b>College:</b> Texas</li> <li><b>Posición NBA:</b> C</li> <li><b>Estadísticas:</b> 11.0 Pts 6.7 Rbt</li> </ul> </div> </div> </div> </div> </div> <style type="text/css"> * { margin: 0; padding: 0; border: none; position: relative; } html, body33 { width: 100%; height: 100%; } div#contenedor_principal { width: 223px; height: 600px; margin: 0 auto; } div#contenedor_principal > div#contenedor_slider{ border: 0px solid #0002222; width: 223px; height: 501px; background: #transparent; margin: auto; overflow: hidden; } div#contenedor_principal > span.flecha{ z-index: 99; width: 60px; height: 60px; top: 240px; position: absolute; cursor: pointer; } div#contenedor_principal > span.der { right: -30px; background-image: url('http://i288.photobucket.com/albums/ll175/dostiroslibres/felas22222_zpsumuvigzt.png'); background-repeat: no-repeat; background-position: -60px 0; } div#contenedor_principal > span.izq{ left: -30px; background-image: url('http://i288.photobucket.com/albums/ll175/dostiroslibres/felas22222_zpsumuvigzt.png'); background-repeat: no-repeat; background-position: 0 0; } div#contenedor_principal > div#contenedor_slider div#slider{ width: 200%; /* este width es sobrescrito en el onload. es equivalente a 2 imágenes */ position: relative; left: 0; top: 0; } div#contenedor_principal > div#contenedor_slider div#slider img { width: 100px; /* mismo width de #contenedor_slider */ height: 100px; /* mismo height de #contenedor_slider */ float: left; } </style> <script type="text/javascript"> var namespaceSlider = { Evento: function(elemento,nomevento,funcion) { if (elemento.attachEvent) { var fct=function(){ funcion.call(elemento,window.event); } elemento.attachEvent('on'+nomevento,fct); return true; } else if (elemento.addEventListener) { elemento.addEventListener(nomevento,funcion,false); return true; } else { return false; } }, estableceValoryEventos: window.onload = function() { var selectorSlider = document.getElementById('slider22'); var n_Imagenes = selectorSlider.getElementsByTagName('img').length; selectorSlider.style.width = parseInt(n_Imagenes * 100, 10) + '%'; var spans = document.querySelectorAll('span.flecha'); namespaceSlider.Evento(spans[0], 'click', function() {namespaceSlider.mover(n_Imagenes, 0)}); namespaceSlider.Evento(spans[1], 'click', function() {namespaceSlider.mover(n_Imagenes, 1)}); }, clicks: 0, posInicial: 0, anchoImg: 100, mover : function(nImg, i){ namespaceSlider.clicks += (i == 0) ? parseInt(nImg-1, 10) : parseInt(i, 10); var indiceImg = namespaceSlider.clicks % nImg; var posFinal = namespaceSlider.anchoImg * parseInt(indiceImg, 10); var slider = document.getElementById('slider22'); if (namespaceSlider.posInicial >= posFinal) { // escrolea hacia la izquierda (function desplazar() { setTimeout(function(){ if(namespaceSlider.posInicial <= posFinal) return; namespaceSlider.posInicial -= 2; slider.style.left = -namespaceSlider.posInicial + '%'; desplazar(); },6); })(); } else { // escrolea hacia la derecha (function desplazar() { setTimeout(function(){ if(namespaceSlider.posInicial >= posFinal) return; namespaceSlider.posInicial += 2; slider.style.left = -namespaceSlider.posInicial + '%'; desplazar(); },6); })(); } } } </script>
Y el css de las fichas:
body { background: #303030; } #pricing-table { margin: 100px auto; text-align: center; width: 5000px; /* total computed width = 222 x 3 + 226 */; } #pricing-table .plan { font: 12px 'Lucida Sans', 'trebuchet MS', Arial, Helvetica; text-shadow: 0 1px rgba(255,255,255,.8); background: #fff; border: 1px solid #ddd; color: #333; padding: 20px; width: 181px; /* plan width = 180 + 20 + 20 + 1 + 1 = 222px */ float: left; position: relative; } #pricing-table #most-popular { z-index: 2; top: -13px; border-width: 3px; padding: 30px 20px; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; -moz-box-shadow: 20px 0 10px -10px rgba(0, 0, 0, .15), -20px 0 10px -10px rgba(0, 0, 0, .15); -webkit-box-shadow: 20px 0 10px -10px rgba(0, 0, 0, .15), -20px 0 10px -10px rgba(0, 0, 0, .15); box-shadow: 20px 0 10px -10px rgba(0, 0, 0, .15), -20px 0 10px -10px rgba(0, 0, 0, .15); } /* --------------- */ #pricing-table h3 { font-size: 20px; font-weight: normal; padding: 20px; margin: -20px -20px 50px -20px; background-color: #eee; background-image: -moz-linear-gradient(#fff,#eee); background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee)); background-image: -webkit-linear-gradient(#fff, #eee); background-image: -o-linear-gradient(#fff, #eee); background-image: -ms-linear-gradient(#fff, #eee); background-image: linear-gradient(#fff, #eee); } #pricing-table #most-popular h3 { background-color: #ddd; background-image: -moz-linear-gradient(#eee,#ddd); background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#ddd)); background-image: -webkit-linear-gradient(#eee, #ddd); background-image: -o-linear-gradient(#eee, #ddd); background-image: -ms-linear-gradient(#eee, #ddd); background-image: linear-gradient(#eee, #ddd); margin-top: -30px; padding-top: 30px; -moz-border-radius: 5px 5px 0 0; -webkit-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } #pricing-table .plan:nth-child(1) h3 { -moz-border-radius: 5px 0 0 0; -webkit-border-radius: 5px 0 0 0; border-radius: 5px 0 0 0; } #pricing-table .plan:nth-child(4) h3 { -moz-border-radius: 0 5px 0 0; -webkit-border-radius: 0 5px 0 0; border-radius: 0 5px 0 0; } #pricing-table h3 span { display: block; font: bold 25px/100px Georgia, Serif; color: #777; background: #fff; border: 5px solid #fff; height: 100px; width: 100px; margin: 10px auto -65px; -moz-border-radius: 100px; -webkit-border-radius: 100px; border-radius: 100px; -moz-box-shadow: 0 5px 20px #ddd inset, 0 3px 0 #999 inset; -webkit-box-shadow: 0 5px 20px #ddd inset, 0 3px 0 #999 inset; box-shadow: 0 5px 20px #ddd inset, 0 3px 0 #999 inset; } /* --------------- */ #pricing-table ul { margin: 20px 0 0 0; padding: 0; list-style: none; } #pricing-table li { border-top: 1px solid #ddd; padding: 10px 0; } /* --------------- */ #pricing-table .signup { position: relative; padding: 8px 20px; margin: 20px 0 0 0; color: #fff; font: bold 14px Arial, Helvetica; text-transform: uppercase; text-decoration: none; display: inline-block; background-color: #cc4728; background-image: -moz-linear-gradient(#cc4728, #cc4728); background-image: -webkit-gradient(linear, left top, left bottom, from(#cc4728), to(#62bc30)); background-image: -webkit-linear-gradient(#cc4728, #cc4728); background-image: -o-linear-gradient(#cc4728, #cc4728); background-image: -ms-linear-gradient(#cc4728, #cc4728); background-image: linear-gradient(#cc4728, #cc4728); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; text-shadow: 0 1px 0 rgba(0,0,0,.3); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, .5), 0 2px 0 rgba(0, 0, 0, .7); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .5), 0 2px 0 rgba(0, 0, 0, .7); box-shadow: 0 1px 0 rgba(255, 255, 255, .5), 0 2px 0 rgba(0, 0, 0, .7); } #pricing-table .signup:hover { background-color: #cc4728; background-image: -moz-linear-gradient(#cc4728, #cc4728); background-image: -webkit-gradient(linear, left top, left bottom, from(#cc4728), to(#cc4728)); background-image: -webkit-linear-gradient(#cc4728, #cc4728); background-image: -o-linear-gradient(#cc4728, #cc4728); background-image: -ms-linear-gradient(#cc4728, #cc4728); background-image: linear-gradient(#cc4728, #cc4728); } #pricing-table .signup:active, #pricing-table .signup:focus { background: #cc4728; top: 2px; -moz-box-shadow: 0 0 3px rgba(0, 0, 0, .7) inset; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .7) inset; box-shadow: 0 0 3px rgba(0, 0, 0, .7) inset; } /* --------------- */ .clear:before, .clear:after { content: ""; display: table; } .clear:after { clear: both; } .clear { zoom: 1; }
Respuestas
Por lo que he visto, el problema está en el elemento #pricing-table
, cuyos estilos CSS actuales son los siguientes:
#pricing-table { margin: 100px auto; text-align: center; width: 892px; /* <-- quita esta propiedad */ }
Si quitas la propiedad width
, para que el elemento tenga una anchura automática, el problema se resuelve (al menos en Google Chrome): ver imagen del slider funcionando
@javiereguiluz
Perfecto, que cosa más tonta era, estaba cegado.
EDIT: Problema resuelto. Muchísimas gracias.
@dostiroslibres