2010-01-05 42 views
29

Tôi có một hoạt động trang có sử dụng một cái gì đó như:Khôi phục trang cuộn vị trí với jQuery

$('#thetable tbody').replaceWith(newtbody); 

trong một callback ajax. Đôi khi, nếu người dùng đã cuộn trang xuống, thao tác này có tác dụng phụ có thể hiểu được khi cuộn trang sao lưu. Nhưng sự thay thế xuất hiện liền mạch với người dùng, do đó, nó hơi khó chịu khi phải cuộn xuống một lần nữa. Và vì số newtbody thường có chiều cao thẳng đứng giống như chiều cao được thay thế, nên chúng tôi có thể làm cho tập lệnh thực hiện thay thế.

Bây giờ, kể từ khi tôi phát hiện ra rằng thực hiện:

$('body').scrollTop(300); 

từ JS gỡ lỗi giao diện điều khiển làm những gì tôi hy vọng nó sẽ, tôi nghĩ biện pháp khắc phục đơn giản sẽ là:

var scrollsave = $('body').scrollTop(); 
$('#thetable tbody').replaceWith(newtbody); 
$('body').scrollTop(scrollsave); 

nhưng không có niềm vui. Tôi chưa sử dụng đến jQuery.ScrollTo.

+0

Điều đó sẽ làm việc. Bạn có thể đăng bản demo không? Yếu tố nào có thể cuộn được? – SLaks

+0

Chỉ trang được cuộn. Không có phần tử nào trong đánh dấu có thể cuộn được. Tôi sẽ xem những gì tôi có thể làm về bản trình diễn. –

Trả lời

33

Chúng tôi đã có vấn đề chính xác giống nhau, và đoạn mã sau hoạt động tuyệt vời ...

var scroll = $(window).scrollTop(); 
// yada 
$("html").scrollTop(scroll); 
+1

Tôi đã thử nó. Cũng không may mắn. Gỡ lỗi cho thấy rằng không có vấn đề gì tôi sử dụng như selector trong dòng đầu tiên, có thể là 'window',' "body" ',' "html" ', vv, giá trị trả về bởi' scrollTop (...) 'luôn luôn số không. Odd! Có thể bối cảnh của một cuộc gọi ẩn danh có thể ảnh hưởng đến điều đó? –

+0

Thật kỳ lạ. Cuộn xuống trên trang này. Dán vào thanh địa chỉ trình duyệt của bạn và nhấn enter: 'javascript: alert ($ (window) .scrollTop());' Nó hoạt động tốt cho tôi ở đây trên IE8. –

+0

Có điều gì đó bất ngờ về các trang của tôi ngăn việc này hoạt động. Nhưng tôi nghĩ câu trả lời của bạn là đúng cho hầu hết các trang hợp lý. –

25
var position= $(window).scrollTop(); 

//some things here 

$(window).scrollTop(position); 

Nó làm việc cho tôi trong cả IE8 và FF.

+5

Câu trả lời được chấp nhận không hoạt động trong Chrome 29 - tính năng này có hiệu lực. –

+2

Ngoài ra nó có ý nghĩa hơn. – Henrik

+0

Câu trả lời này cũng hoạt động để cuộn các phần tử khác với cửa sổ, ví dụ nếu bạn có một phương thức với nội dung có thể cuộn, bạn chỉ cần thay thế 'window' bằng' "# your-element-selector" 'và nó hoạt động như một nét duyên dáng! – SergeyB

4

Hãy chắc chắn để sử dụng return false; chấm dứt function(){} xây dựng của bạn.

Sự kiện kích hoạt có thể cố gắng để thực hiện thao tác mặc định của mục tiêu DOM yếu tố ví dụ: < a href="" >;

+0

omg cuối cùng! nhờ nhận xét của bạn tôi có thể phủ nhận sự kiện để trang không di chuyển đến vị trí trước đó của nó mọi lúc. Lời khuyên hữu ích, cảm ơn! – Pauls

0

Bạn định kỳ có thể kiểm tra divouterHeight, và thiết lập các scrollTop tài sản khi div vẽ đã vượt qua giá trị cuộn.

var g_Interval ; 
var g_ScrollTop ; 

function checkAndAdjustScroll() { 
    var height=$('#content').outerHeight() ; 
    if(height>g_ScrollTop) { 
      $(window).scrollTop(g_ScrollTop) ; 
      clearInterval(g_Interval) ; 
    } 
} 

Và bất cứ khi nào bạn cập nhật div của bạn với nội dung AJAX, làm được điều này

g_ScrollTop=$(window).scrollTop() ; 
g_Interval=setInterval(checkAndAdjustScroll, 100) ; 

Bạn có thể cần phải thực hiện điều chỉnh trên cơ sở bù đắp của div của bạn từ phía trên cùng của trang

1

Are u sử dụng aspx? nếu nó aspx:

$(document).ready(function() { 
 
     //------------ scroll------------- 
 
      
 
     $('body').scrollTop(document.getElementById('<%=hdScroll.ClientID%>').value); 
 
      
 
     $(window).scroll(function() { 
 
      $("#<%= hdScroll.ClientID %>").val($(window).scrollTop()); 
 
      //alert(document.getElementById('<%=hdScroll.ClientID%>').value); 
 
     }); 
 
     });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
    <asp:HiddenField Id="hdScroll" runat="server"></asp:HiddenField>

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