24

私のウェブサイトでは、次を使用してURLアドレスを設定しました

window.location.hash = 'project_name';

しかし、(プロジェクトを閉じたときに)任意のハッシュからアドレスURLを消去したい場合、設定します

window.location.hash = '';

ページがトップページまでスクロールする

副作用なしで URL をクリーンアップする方法はありますか?

ありがとう

4

4 に答える 4

31

イベントはありonhashchangeますが、スクロールを防ぐためにブラウザ間で確実にキャンセルすることはできません。最善の解決策は、ハッシュ位置を変更する前にスクロール位置を記録し、後でリセットすることです。たとえば、次のコードは、href値がのリンク(伝播を停止しない)のクリックをキャッチし#、ページが垂直方向にスクロールするのを防ぎます。

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;
    }
}

スクリプトを使用してハッシュを変更する場合は、次のコードを使用できます。

var scr = document.body.scrollTop;
window.location.href = '#';
document.body.scrollTop = scr;

これらの方法のいずれかを調整して、個々の要素のスクロールやページの水平方向のスクロールを回避できます。または関数を呼び出すことにより、最近のブラウザでナビゲーションやスクロールを発生させることなく、ハッシュ全体(を含む)を削除できること に注意してください。#pushStatereplaceState

于 2011-01-17T15:56:22.480 に答える
15

私は同じ問題を抱えていて、答えを求めてここに来ました。非常に簡単な方法があることがわかりました。

window.location.hash = ' ';

基本的に「#」に設定していますが、スペースが存在しないため動きません。ページに再度アクセスすると、# と同じように扱われます。

于 2012-09-19T02:14:01.440 に答える