2010-04-09 13 views
6

Aim¿Cómo desplazar continuamente contenido dentro de un DIV usando jQuery?

El objetivo es un tener un contenedor DIV con una altura fija y anchura y tienen el contenido HTML dentro de ese div desplazarse automáticamente verticalmente de forma continua.

Pregunta Básicamente hemos creado el código de abajo usando jQuery para desplazarse (mover) el niño DIV verticalmente hacia arriba hasta que su padre fuera del cuadro delimitador, donde la animación se completa a continuación, lo que desencadena un controlador de eventos que restablece la posición de el niño DIV y comienza el proceso de nuevo.

Esto funciona bien, por lo que el contenido se desplaza dejando un espacio en blanco y luego comienza desde abajo nuevamente y se desplaza hacia arriba.

El problema que tengo es que los requisitos para esto es que el contenido aparezca como si se repitiera continuamente, ver el diagrama a continuación para explicar mejor esto, ¿hay alguna manera de hacerlo? (No quiero usar plug-ins 3er partido o bibliotecas distintas de jQuery):

alt text http://www.cameroncooke.com/playground/scrolling-example.gif

Lo que tengo hasta ahora

El HTML:

<div id="scrollingContainer"> 

    <div class="scroller"> 

    <h1>This is a title</h1> 

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse at orci mi, id gravida tellus. Integer malesuada ante sit amet enim pulvinar congue. Donec pulvinar dolor et arcu posuere feugiat id et felis.</p> 

    <p>More content....</p> 

    </div> 

</div> 

El CSS:

#scrollingContainer{ 
    height: 300px; 
    width: 300px; 
    overflow: hidden; 
} 

#scrollingContainer DIV.scroller{ 
    position: relative; 
} 

El JavaScript:

/** 
* Scrolls the content DIV 
*/ 
function scroll() { 

    if($('DIV.scroller').height() > $('#scrollingContainer').height()) { 

    var t = $('DIV.scroller').position().top + $('DIV.scroller').height(); 

    /* Animate */ 
    $('DIV.scroller').animate(
    { 
     top: '-=' + t + 'px' 
    } 
    , 4000, 'linear', animationComplete); 
    } 
} 

function animationComplete() { 
    $(this).css('top', $('#scrollingContainer').height()); 
    scroll(); 
} 

Respuesta

3

Tendrá que duplicar su elemento de contenido y orientarlas de manera que están verticalmente uno junto al otro, y desplazarse en tándem. Su desplazamiento actual debería funcionar, el salto será invisible porque debería saltar de la parte superior del elemento inferior a la parte superior del elemento superior, es decir, a una parte del mismo aspecto. Colocaría ambas copias del contenido (puede simplemente .clone para obtener la otra copia) en un contenedor y lo desplazaré, de esa manera no tendrá que preocuparse por mover dos elementos.

Si realmente desea optimizarlo, solo puede mostrar la parte superior (suficiente para ocultar el salto) del contenido en el elemento inferior, pero a menos que su contenido sea realmente complejo y pesado, no vale la pena el esfuerzo.

1

¿Desea que el contenido se "repita automáticamente" y se desplace para siempre? Debería poder agregar una nueva DIV debajo del texto y copiar ese texto en la nueva DIV. Haga esto en función de la posición de desplazamiento, eliminando el DIV anterior cuando se salga de la vista. Básicamente, solo estás copiando el texto, empujando una nueva DIV hacia la parte inferior de la "pila" y sacándola de la parte superior cuando está fuera de la vista.

0

En pocas palabras necesitarás dos divs que son más grandes que la caja de desplazamiento y tendrás que mover mover el que no es visible debajo del que está. Si los dos son exactamente iguales, no deberían ser perceptibles.

0

Prueba esto:

$('.upBut').bind('click',function(){ 
    $('.articleWrapper').prepend($('.article:last')).children('.article:first').css({display:'none'}).show('slow'); 
}); 
$('.downBut').bind('click',function(){ 
    //$('.articleWrapper').append($('.article:first')).children('.article:last').css({display:'none'}).show('slow'); 
    $('.article:first').hide('slow',function(){$(this).appendTo('.articleWrapper').show('slow');}); 
}); 
$('.upBut').hover(function(){$(this).css("background-image", "url(images/up_green.png)");},function(){$(this).css("background-image", "url(images/up_red.png)");}); 
$('.downBut').hover(function(){$(this).css("background-image", "url(images/down_green.png)");},function(){$(this).css("background-image", "url(images/down_red.png)");}); 

Ejemplo de trabajo se puede ver aquí: http://www.timeswellness.com/index.aspx?page=others&rightnav=false&do=CancerDay

Cuestiones relacionadas