2012-10-17 41 views
5

Tôi chỉ đang làm việc với jQuery prepend và không thể làm cho nó hoạt động như mong đợi.jQuery prepend - ngăn chặn tự động cuộn

Những gì tôi đang làm:

prepending một .content div để #main div mỗi một giây

Nhưng, khi tôi di chuyển xuống một chút [một lần trang được đầy đủ nội dung] , Tôi tiếp tục bị cuộn trở lại #main 's top hoặc mới nhất prepended .content

Cách thức làm I:

Ngăn ngừa sự viewport từ việc thay đổi - như trong trường hợp của append

liên quan fiddle

+1

Quan điểm không thay đổi; trang trở nên dài hơn vì vậy khoảng cách di chuyển từ trên cùng là tĩnh trong khi chiều dài toàn trang trở nên lớn hơn động (do đó các phần tử dưới cùng vượt ra ngoài chế độ xem). Bạn đang cố gắng làm cho nó như vậy nếu bạn di chuyển tất cả các cách để dưới cùng của trang phần tử cuối cùng ở trong xem thay vì "rơi xuống"? –

+0

@ Bradradie Tôi về cơ bản muốn 'những gì là visibile' [ngoại trừ thanh cuộn, mà rõ ràng là nên thay đổi] để không thay đổi ở tất cả không phân biệt prepends. – Prasanth

Trả lời

13

Như tôi đã giải thích trong một chú thích, cuộn không thực sự thay đổi. Cuộn của cửa sổ dựa trên "khoảng cách từ trên cùng" (DfT). Đó là để nói rằng nếu bạn không có scrollbar, bạn DfT là 0. Một khi các thanh cuộn được giới thiệu bây giờ bạn có một khoảng cách để làm việc với.

Vì nội dung dài hơn nên chế độ xem chỉ cao quá nhiều pixel nên một số nội dung "rơi ra" ở cuối trang (phần thêm vào làm cho DfT bị tắt theo chiều cao của phần tử mới).

Cách tốt nhất tôi có thể nghĩ là chống lại nó với chiều cao của phần tử mới. Điều này cho phép bạn cuộn đến vị trí sau đó, khi các thành phần mới được thêm vào, bạn sửa đổi vị trí cuộn tương ứng.

Dưới đây là một ví dụ về những gì tôi có nghĩa là: http://jsfiddle.net/bradchristie/66RvC/1/

Và mã (để tham khảo):

var f = function(){ 
    var t = $(window).scrollTop(),  // Window's current scroll position 
     $d = $(d()).prependTo('#main'), // store the new element 
     h = $d.outerHeight();   // also get its height 
    if (t){        // Only adjust if they've scrolled 
     $(window).scrollTop(t + h);  // add the delta to the scroll position 
    } 
    setTimeout(f, 1000); 
}; 
+0

Và, gắn thêm không có gì để làm với DfT và tôi không có bất kỳ vấn đề. Đúng? – Prasanth

+0

@goldenparrot: Không phải là nó không có liên quan, nó chỉ là phụ thêm không làm thay đổi nhiều yếu tố. Tuy nhiên, nếu bạn có hai danh sách trên một trang và bạn tiếp tục thêm các phần tử vào danh sách ở trên cùng, các phần tử của danh sách thứ hai sẽ thay đổi và bạn có cùng một vấn đề. –

+1

@goldenparrot: Ví dụ về ý nghĩa của tôi [ở đây] (http://jsfiddle.net/bradchristie/66RvC/3/) (sử dụng phụ thêm thay vì đăng ký trước). Lưu ý rằng nội dung quan trọng ngay bây giờ với nội dung sau đó. –

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