ありonhashchange
イベントだが、スクロールを防ぐために、ブラウザー間で確実にキャンセルすることはできません。最適な解決策は、ハッシュ位置を変更する前にスクロール位置を記録し、後でそれをリセットすることです。あなたはを通してハッシュを変更している場合は
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;
}
}
:#
のhref値とし、垂直スクロールからページを防ぐ - 伝播を停止しません - たとえば、次のコードは、任意のリンクをクリックをキャッチしますスクリプトの場合、次のコードを使用することができます。
var scr = document.body.scrollTop;
window.location.href = '#';
document.body.scrollTop = scr;
これらの方法のいずれかを調整すると、個々の要素をスクロールしたり、ページを水平方向にスクロールしたりすることがなくなります。最新のブラウザでは、pushState
またはreplaceState
関数を呼び出すことで、ナビゲーションやスクロールを行わずにをremove the entire hash(#
を含む)にすることができます。
をあなたは非既存のアンカーを割り当てることができ、それは、最大URLを「掃除」は本当にありません:D面白い – polarblau