1. ホーム
  2. jquery

[解決済み] ページ読み込み時のアンカー "ジャンプ "を無効にするには?

2022-09-03 02:15:55

質問

私はこれが可能ではないかもしれないと思う、私ができる限り説明しようとします。 私はタブを含むページを持っています(jquery powered)、以下によって制御されます。

私はこのコードを使用しています、以前の質問から別のユーザーによって提供されたように。

<script type="text/javascript">
    $(function() {

     $('html, body').animate({scrollTop:0}); // this is my "fix"

        var tabContent = $(".tab_content");
        var tabs = $("#menu li");
        var hash = window.location.hash;
     tabContent.not(hash).hide();
        if(hash=="") {
      $('#tab1').fadeIn();
     }
        tabs.find('[href=' + hash + ']').parent().addClass('active');

        tabs.click(function() {
            $(this).addClass('active').siblings().removeClass('active');
            tabContent.hide();
            var activeTab = $(this).find("a").attr("href");

            $(activeTab).fadeIn();
           return false;
        });

    });
</script>

このコードは、私が直接"tabs"ページを訪問したときにうまく動作します。

しかし、私は他のページから個々のタブにリンクする必要があります - これを行うために、このコードは window.location.hash を取得し、適切なタブを表示します。

を実行すると、"return false"のため、ページはアンカーに "jump" しない。

このイベントは、クリック イベントでのみトリガーされます。したがって、他のページから私の "tabs" にアクセスすると、"jump" の効果がトリガーされます。これに対処するために、私は自動的にページの一番上までスクロールしますが、これが起こらないことを望んでいます。

ページが読み込まれたときに "return false" をシミュレートして、アンカー "jump" が発生するのを防ぐ方法はありませんか。

これが十分に明確であることを望みます。

感謝

どのように解決するのですか?

あなたの修正は動作しませんか?私は質問を正しく理解しているかどうかわからない - あなたは、デモページを持っていますか?あなたは試すことができます。

if (location.hash) {
  setTimeout(function() {

    window.scrollTo(0, 0);
  }, 1);
}

編集:Windows上のFirefox、IE、Chromeでテストして動作しました。

編集2:移動 setTimeout() 内側 if ブロックの中で、@vsyncをプロップスしています。