Có trường hợp onhashchange
, nhưng nó không thể bị hủy bỏ cách đáng tin cậy trên các trình duyệt để ngăn chặn di chuyển. Giải pháp tốt nhất là ghi vị trí cuộn trước khi thay đổi vị trí băm và đặt lại vị trí sau đó. Ví dụ, đoạn mã sau sẽ bắt một nhấp chuột vào bất kỳ liên kết - đó không chỉ dừng lại tuyên truyền - với một giá trị href của #
và ngăn chặn trang từ di chuyển theo chiều dọc:
document.onclick = function (evt) {
var tgt = (evt && evt.target) || event.srcElement,
scr = document.body.scrollTop;
if (tgt.tagName == "A" && tgt.href.slice(-1) == "#") {
window.location.href = "#";
document.body.scrollTop = scr;
return false;
}
}
Nếu bạn đang thay đổi băm qua tập lệnh, bạn có thể sử dụng mã sau:
var scr = document.body.scrollTop;
window.location.href = '#';
document.body.scrollTop = scr;
Có thể điều chỉnh một trong hai phương pháp này để tránh cuộn từng phần hoặc cuộn trang theo chiều ngang. Lưu ý rằng bạn có thểremove the entire hash (bao gồm #
) mà không gây điều hướng hoặc di chuyển trong trình duyệt hiện đại bằng cách gọi hàm pushState
hoặc replaceState
.
Nguồn
2011-01-17 15:56:22
Bạn có thể gán một neo không tồn tại, nhưng điều đó không thực sự "làm sạch" URL lên: D – polarblau