2013-04-26 57 views
19

Tôi đang gặp sự cố thực sự là "tính năng" trên Chrome. Như hầu hết các bạn có thể biết, Chrome nhớ vị trí cuộn mà nó quay lại, bất cứ khi nào bạn quay lại trang. Và tôi có vấn đề với điều đó.Chrome nhớ vị trí cuộn

Có cách nào để ghi đè điều này mà người dùng không nhận thấy không?

Mees

Không thử-outs:

  • ScrollTop trên document.ready
+0

những gì đã thực hiện của bạn của '.scrollTop (0)'? bởi vì tôi sử dụng nó mọi lúc với các sự kiện 'popstate' và nó hoạt động hoàn hảo. – PlantTheIdea

+0

Tôi đang sử dụng '$ ('body, html'). ScrollTop (0);' để cuộn. Sau khi sẵn sàng. –

+2

chỉ cần làm '$ ('body'). ScrollTop (0)' (không có 'html'), và nếu nó vẫn không hoạt động, làm cho nó chạy trên' $ (window) .load() 'thay vì' $ (tài liệu) .ready() '. – PlantTheIdea

Trả lời

9

Tôi đã kiểm tra trên chrome, nó hoạt động tốt. Đôi khi setTimeout không lừa :)

<script type="text/javascript"> 
window.onload=function(){ 
    setTimeout(function(){ 
     scrollTo(0,-1); 
    },0); 
} 
</script> 
+2

Tính năng này hoạt động, nhưng ngay sau khi bạn bắt đầu cuộn lại, trang sẽ nhảy đến vị trí đã ghi nhớ – David

+0

Tôi nghĩ bạn đã bỏ lỡ cài đặt giá trị "mili giây"? Khi đoạn mã của bạn được đặt thành 0, nó sẽ chỉ chạy ngay lập tức. Đặt giá trị thời gian chờ "mili giây" thành 1000 và giải pháp này hoạt động cho tôi trong Chrome. –

+2

thực sự, đặt thời gian chờ thành 0 không làm cho hàm chạy ngay lập tức - thay vào đó nó thêm hàm vào cuối hàng đợi thực hiện (mã cuộn đến vị trí được ghi nhớ sẽ nằm trong hàng đợi này) –

0
x = 0; //horizontal coord 
y = document.height; //vertical coord 
window.scroll(x,y); 

Một số javascript như thế có thể rất tốt có thể được thao tác để ngăn chặn cuộn tự động. Tuy nhiên, phụ thuộc vào việc cuộn có được cài đặt tự động đi lên đầu hay bạn đang thực sự tìm kiếm tùy chọn tiêu chuẩn của Chrome để đưa trang này đến vị trí cuộn cuối cùng, phải tắt hoàn toàn không? Không có gì phải trả lời.

Bạn hiện đang cố gắng sử dụng cho scrollTop()?

+1

Tôi e rằng mã không hoạt động. Chrome dường như bỏ qua nó và vẫn quay lại vị trí cuộn trước đó của nó. Tôi đang sử dụng scrollTop (giá trị) để cuộn đến một lượng pixel nhất định từ đầu chế độ xem. –

+1

@MeesBoeijen - Có thể vì Chrome cuộn lại sau khi tập lệnh của bạn đã hoàn tất việc thực thi. Hãy thử 'setTimeout (func, 1)'. –

-2

Đây là cách làm sạch.

window.addEventListener('unload', function(e){ 
    document.body.style.display = 'none'; 
}); 

Bởi chỉ cần thiết lập hiển thị cơ thể 'none' bạn không phải lo lắng về một đèn flash của trình duyệt di chuyển lên trên cùng của trang trước khi nó được dỡ xuống và vị trí cuộn sẽ tự động được đặt lại 0.

+0

Dường như không hoạt động trong Chrome khi truy cập trang" quay lại "hoặc trang" làm mới ". –

0

Tôi đã giải quyết vấn đề này bằng cách đính kèm sự kiện cuộn, sau đó đặt lại vị trí cuộn khi người dùng cuộn lần đầu tiên. Làm việc cho tải lại tại chỗ cho tôi.

Trông như thế này:

var scrollResetOnce = false; 
$(window).on("scroll", function() { 
    if (scrollResetOnce) return; 
    scrollResetOnce = true; 
    scrollTo(0, -1); 
}); 
35

Trong Chrome 46+, hành vi tự động cuộn có thể được tắt bằng history.scrollRestoration:

if ('scrollRestoration' in history) { 
    history.scrollRestoration = 'manual'; 
} 

nguồn: https://developers.google.com/web/updates/2015/09/history-api-scroll-restoration

+0

Điều này đã giúp rất nhiều! Lá cờ tuyệt vời để biết. Cảm ơn! –

+2

Câu trả lời này cần thêm sự đánh giá cao! GJ Cory và cảm ơn bạn. –

+0

Điều này cũng hoạt động trong Firefox kể từ năm 2017. Chắc chắn là câu trả lời hay nhất. – kursus

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