2010-04-09 10 views
6

CelJak przewijać zawartość w DIV za pomocą jQuery?

Celem jest dysponowanie kontener DIV o stałej wysokości i szerokości i mają zawartość HTML wewnątrz że div automatycznie przewijać w pionie w sposób ciągły.

Pytanie Zasadniczo Utworzyliśmy poniższy kod za pomocą jQuery do przewijania (ruch) dziecko DIV pionowo do góry, aż jego nieszablonowo dominującej ograniczającej gdzie animacja następnie uzupełnia który wyzwala procedurę obsługi zdarzenia, które resetuje pozycję DIV dziecka i ponownie rozpoczyna proces.

Działa to dobrze, więc zawartość przewija się w górę pozostawiając puste miejsce, a następnie ponownie zaczyna się od dołu i przewija w górę.

Problem polega na tym, że wymagania dotyczą tego, aby treść wyglądała tak, jakby była ciągle powtarzana, zobacz poniższy schemat, aby lepiej to wyjaśnić, czy jest jakiś sposób na zrobienie tego? (Nie chcę używać 3rd plug in Strona lub bibliotek innych niż jQuery):

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

Co mam tak daleko

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> 

CSS:

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

#scrollingContainer DIV.scroller{ 
    position: relative; 
} 

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(); 
} 

Odpowiedz

3

Musisz powielić swój elementu treści i dostosować je tak, że są one pionowo obok siebie, a następnie wskaż je w tandemie. Twoje obecne przewijanie powinno działać, skok będzie niewidoczny, ponieważ powinien przeskakiwać od górnej części dolnego elementu do górnej części górnego elementu, czyli do tej samej części. Wrzuciłem obie kopie zawartości (można tylko .clone, aby uzyskać drugą kopię) w pojemniku i przewinąć w ten sposób, aby nie trzeba było się przejmować przenoszeniem dwóch elementów.

Jeśli naprawdę chcesz ją zoptymalizować, możesz wyświetlić tylko górną część (na tyle, by ukryć skok) zawartości w dolnym elemencie, ale jeśli twoja zawartość nie jest zbyt skomplikowana i ciężka, nie jest to warte wysiłku.

1

Chcesz, aby zawartość "automatycznie powtarzała się" i przewijać na zawsze? Powinieneś być w stanie dodać nowy DIV pod tekstem i skopiować ten tekst do nowego DIV. Zrób to na podstawie pozycji przewijania, usuwając DIV powyżej, gdy zniknie z widoku. Zasadniczo po prostu kopiujesz tekst, przesuwając nowy DIV na dół "stosu" i wyskakując go z góry, gdy jest poza zasięgiem.

0

Po prostu potrzebujesz dwóch elementów div, które są większe niż pole przewijania, a będziesz musiał przesunąć ruch, który nie jest widoczny poniżej tego, który jest. Jeśli oba są dokładnie takie same, nie powinny być zauważalne.

0

Spróbuj tego:

$('.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)");}); 

przykład roboczych można zobaczyć tutaj: http://www.timeswellness.com/index.aspx?page=others&rightnav=false&do=CancerDay

Powiązane problemy