2013-09-04 48 views
10

Có cách nào để vô hiệu hóa hành vi trong đó một số trình duyệt hiện đại (Chrome và Safari) nhớ vị trí cuộn của bạn khi làm mới trang không?Tắt tính năng tự động cuộn của brower sau khi làm mới trang?

+0

Tại sao bạn sẽ muốn làm điều đó? Đó là trải nghiệm người dùng tốt để quay lại vị trí đó. – putvande

+0

@putvande 100% đồng ý trong hầu hết các trường hợp, nhưng trường hợp sử dụng sẽ là khi có bảng dữ liệu lớn bổ sung dữ liệu mới lên đầu và mặc dù chúng tôi có thể cập nhật dữ liệu động, nếu người dùng làm mới vì bất kỳ lý do gì, chúng tôi không không muốn đưa họ trở lại vị trí cuộn cũ của họ. Đây không phải là hành vi mong đợi từ quan điểm của họ cho kinh nghiệm này - cũng chỉ là 1 trường hợp sử dụng, còn có những người khác tồn tại. – Anthony

+1

Bất kỳ trang nào sử dụng cuộn vô hạn cho trải nghiệm tải sẽ có vấn đề (không mong muốn) này. –

Trả lời

1

không chỉ cho chrome, nhưng đối với tất cả tôi nghĩ rằng điều này sẽ làm việc tốt.

window.onload = function() { 
    window.scrollTo(0, 0); 
}; 

Sau khi cập nhật các câu hỏi của bạn:

Tôi nghĩ rằng nó tốt hơn nếu chúng ta sử dụng một số cookie hoặc lưu trữ phiên.

+5

Đây cũng là suy nghĩ của tôi - nhưng tôi không có may mắn với kiểu gọi lại này - có vẻ như chrome tự động cuộn sau khi bật lửa. – Anthony

3

Bạn đã thử kích hoạt tính năng này sau khi tài liệu đã sẵn sàng chưa?

$(document).ready(function(){ 
    window.scrollTo(0, 0); 
}); 

nếu điều đó không làm việc ...

$(document).ready(function(){ 
    setTimeout(function(){ 
     window.scrollTo(0, 0); 
    }, 1); 
}); 

Mà sẽ đẩy này để dưới cùng của các cuộc gọi stack

0

Thay vì hy vọng một setTimout kết thúc ở dưới cùng của ngăn xếp - Tôi thà thực thi nó mà chúng tôi đã đạt được vị trí cuộn mà chúng tôi muốn. Tôi vẫn coi đây là một hack, tôi đã hy vọng cho một số loại sự kiện trình duyệt chúng tôi liên kết với.

var scrollToYPos = 100; 
var interval = setInterval(checkPos, 0); 

function checkPos() { 
    if ($(window).scrollTop() == scrollToYPos) { 
     clearInterval(interval); 
    } else { 
     window.scrollTo(0, scrollToYPos); 
     checkPos();    
    } 
}  
0

Tôi gặp phải sự cố tương tự này. Đây là giải pháp cơ bản mà tôi đã đưa ra:

 // scroll the user to the comments section if we need to 
     wt = win.scrollTop(); 
     wb = wt + win.height(); 
     // if scroll position is 0, do this (it's a fresh user), otherwise 
     // the browser is likely to resume the user's scroll position, in 
     // which case we don't want to do this 
     yab.loaded().done(function() { 
     // it seems that browsers (consistently) set the scroll position after 
     // page load. Accordingly wait a 1/4 second (I haven't tested this to the lowest 
     // possible timeout) before triggering our logic 
     setTimeout(function() { 
      // if the window top is 0, scroll the user, otherwise the browser restored 
      // the users scroll position (I realize this fails if the users scroll position was 0) 
      if(wt === 0) { 
      p = self.container.offset().top; 
      if(wb != p) { 
       win.scrollTop(p - th - 20);   
      } 
      }    
     }, 250); 
     }); 
+0

Oh và 'yab.loaded' là lời hứa được giải quyết khi cửa sổ được tải. Tương đương với '$ (window) .load (function() {// ...});' – Skone

-3

Tôi nghĩ cách dễ nhất là lừa trình duyệt tải lại mà nó nghĩ là một trang mới.

window.location = window.location 

Tất cả các trình duyệt tôi đã thử nghiệm đều hoạt động ổn định. Cá nhân tôi sẽ tránh xa các callback onload vì chúng có thể gây ra các bước nhảy trong quá trình tải không quá hấp dẫn.

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