2017-07-04 11 views
0

私が持っている同様の問題の解決策を見つけたHERE.しかし、私はそれを自分のために働かせることはできません。私が遭遇した問題は、私が取り組んでいるサイトでモバイルメニューが開かれている間、垂直スクロールをロックしようとしたときでした。スクロールをロックすると、メニューが開かれるたびにページが先頭にジャンプしました。jQueryでスクロール位置を設定するには?

のjQuery:

timber.openDrawerMenu = function() { 
    var tempScrollTop = $(window).scrollTop(); 
    var $mobileMenu = $('.nav-bar'), 
    $mobileMenuButton = $('#menu-opener'), 
    $body = $('body'); 
    $mobileMenuButton.addClass('opened'); 
    $mobileMenu.addClass('opened'); 
    $body.addClass('opened-drawer'); 

    // Make drawer a11y accessible 
    timber.cache.$navBar.attr('aria-hidden', 'false'); 

    // Set focus on drawer 
    timber.trapFocus({ 
    $container: timber.cache.$navBar, 
    namespace: 'drawer_focus' 
    }); 

    // Escape key closes menu 
    timber.cache.$html.on('keyup.drawerMenu', function(evt) { 
    if (evt.keyCode == 27) { 
     timber.closeDrawerMenu(); 
    } 
    }); 
    console.log(tempScrollTop); 
    $(window).scrollTop(tempScrollTop); 
} 

私は、スクリプトが適切scrollTopスプライト値をcaputuringたし、実際にそれがあるかどうかを確認するために、console.log()の文を追加しました。なんらかの理由でそれはスクロール位置を設定していないので、私はなぜ正確に把握できません。ここのお手伝いが大歓迎です。

+0

'読む前にスクロールするブラウザの時間を与えるために、DOMの更新を待つ(0、x)は'のsetTimeoutを使用しています。クラスを追加してから、しばらく待ってからスクロールコードを実行してください。 – dandavis

+0

@dandavisどこでそのコードを正確に使うのですか?しかし、実際にはクリックイベントの後に実際にスクロール位置を設定していないことが正しく測定されています。 –

+0

jQueryで何を達成しようとしているのか分かりません。 –

答えて

1

これはモバイル固有の問題です。

  1. 私はその上の1つの考えがあります。
    • をbodyタグにposition: relativeを設定明示的に試してみてください。
  2. 問題が解決しない場合、私はより多くのハックの思考を持っている:
    • だけでメニューを閉じる前に、スクロール位置をリセットし、明示的に試してみてください。

は、コメントを残し、それらの作業を願って、そうでない場合は:)

+0

別の関数で定義された変数を使用してscrollTopの位置を設定するにはどうすればよいですか? –

+0

かなりの方法があります。私の頭の上から離れて..あなたは木材やメニューオブジェクトにそれを保存することができます。また、要素自体のデータ変数に格納することもできます。変数をコールバック関数にバインドすることもできます。 –

関連する問題