2016-09-03 3 views
1

ページ上部にはスティッキーメニューバーがあります。このページにはいくつかの内部リンクがあります。内部リンクをクリックすると、ページスクロールとハッシュコードIDを持つ要素が一番上に移動します。スティッキーメニューには見出しがありません。したがって、ウィンドウロード時には、以下のようにjsコードを記述しています。jqueryまたはjsがヒットしたときに検出され、同じハッシュコードに入力します。アドレスバーのURL

if(window.location.hash) { 
     var hash = window.location.hash.substring(1); //Puts hash in variable, and removes the # character 
     console.log (hash); 
     if(hash && $("#"+hash).length){ 
      $("#"+hash).css('padding-top', '80px'); 
     } 
     $(window).scroll(function() { 
      $("#"+hash).css('padding-top', '0'); 
     }); 
    } 

ページがハッシュコードURLでロードされるときに問題なく動作します。

ユーザーがアドレスバーをクリックして何も変更せずにEnterキーを押すと、idがハッシュコードのagianである要素が先頭に移動し、今回はjsコードが実行されず、見出しがスティッキーメニューに表示されません。

アドレスバーにフォーカスがあってEnterキーを押したときにこのイベントを検出する方法はありますか?

この状況には他に解決策がありますか?

ありがとう、

答えて

0

私は以下のロジックで簡単な解決策になりました。私は現在、ウィンドウオブジェクト内の 'focus'イベントがどの他の状況で発生したかを完全には知りません。私は副作用に遭遇したら私の投稿を更新します。

私が知っている限り、Chromeは完全なページロードを行いますが、Firefoxはあなたの記述が言ったことをちょうど実行します。したがって、Chromeのフォーカスイベントは、ページのリロード前に発生します。これは実装に反映する必要があります。 (私も「DOMContentLoaded」内の再配置のロジックを持っているので、この場合は、私にとっては結構です)

window.addEventListener('focus', function() { 

    // Do the repositioning actions 

}); 

更新

あなたの場合、フォーカスイベントも解雇されています

  • クリックタイトルバーで
  • ブラウザウィンドウを最小化して最大化する
  • タスクバーのスイッチプログラムとスイッチバックブラウザへ
関連する問題