2010-04-09 57 views
6

Mục tiêuLàm cách nào để liên tục cuộn nội dung trong một DIV bằng jQuery?

Mục đích là có hộp chứa DIV với chiều cao cố định và chiều rộng và có nội dung HTML trong đó DIV tự động cuộn theo chiều dọc liên tục.

Câu hỏi Về cơ bản tôi đã tạo ra mã dưới đây sử dụng jQuery để di chuyển (move) đứa trẻ DIV thẳng đứng cho đến khi nó bên ngoài hộp mẹ bounding nơi đoạn hoạt cảnh sau đó hoàn tất mà gây nên một event handler mà resets vị trí của đứa trẻ DIV và bắt đầu lại quá trình.

Tính năng này hoạt động tốt, vì vậy nội dung cuộn lên để lại khoảng trống và sau đó bắt đầu lại từ dưới cùng và cuộn lên.

Vấn đề tôi có là yêu cầu cho nội dung này xuất hiện như thể nó liên tục lặp lại, xem sơ đồ dưới đây để giải thích rõ hơn, có cách nào để làm điều này không? (Tôi không muốn sử dụng in bên thứ 3 cắm hoặc các thư viện khác hơn jQuery):

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

Những gì tôi có cho đến nay

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

Trả lời

3

Bạn sẽ cần phải lặp yếu tố nội dung của bạn và sắp xếp chúng để chúng theo chiều dọc cạnh nhau, và di chuyển chúng song song. Cuộn hiện tại của bạn sẽ hoạt động, bước nhảy sẽ ẩn bởi vì nó sẽ nhảy từ trên cùng của phần tử đáy lên phần trên cùng của phần tử trên cùng, tức là phần giống nhau. Tôi sẽ đưa cả hai bản sao của nội dung (bạn chỉ có thể .clone nó để có được bản sao khác) trong một container và di chuyển đó, theo cách đó bạn không phải lo lắng về việc di chuyển hai yếu tố.

Nếu bạn thực sự muốn tối ưu hóa nó, bạn chỉ có thể hiển thị phần trên (đủ để ẩn bước nhảy) của nội dung trong phần tử dưới cùng, trừ khi nội dung của bạn thực sự phức tạp và nặng nề, nó không đáng để thử.

1

Bạn muốn nội dung "tự động lặp lại" và cuộn vĩnh viễn? Bạn sẽ có thể thêm một DIV mới bên dưới văn bản và sao chép văn bản đó vào DIV mới. Làm điều này dựa trên vị trí di chuyển, loại bỏ DIV ở trên khi nó ra khỏi tầm nhìn. Về cơ bản bạn chỉ cần sao chép văn bản, đẩy một DIV mới xuống dưới cùng của "ngăn xếp" và popping nó ra khỏi đầu khi nó ra khỏi xem.

0

Đơn giản chỉ cần đặt bạn sẽ cần hai divs lớn hơn hộp cuộn và bạn sẽ cần phải di chuyển di chuyển hình ảnh không hiển thị bên dưới hộp cuộn. Nếu cả hai giống hệt nhau thì nó không đáng chú ý.

0

Hãy thử điều này:

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

dụ làm việc có thể được nhìn thấy ở đây: http://www.timeswellness.com/index.aspx?page=others&rightnav=false&do=CancerDay

Các vấn đề liên quan