2017-07-04 18 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); 
} 

我加入了console.log()聲明,以查看是否腳本caputuring正確scrollTop的值,實際上它是。出於某種原因,它不是設置滾動位置,但我無法弄清楚爲什麼。任何幫助在這裏非常感謝。

+0

使用'的setTimeout(X,0)'等待DOM刷新給瀏覽器的時間閱讀之前滾動。添加類(es),稍等片刻,然後執行您的滾動代碼,否則一目瞭然看起來不錯。 – dandavis

+0

@dandavis我會在哪裏準確使用該代碼?但它正確測量,它實際上並不是在單擊事件之後設置滾動位置。 –

+0

我無法真正理解你想用jQuery完成什麼。 –

回答

1

我看到這是一個移動特定的問題。

  1. 我對1點的想法:
    • 儘量明確設置position: relative在身上的標籤。
  2. 如果不工作,我有一個更哈克的思想:
    • 嘗試明確剛剛閉幕的菜單的前重置滾動位置。

希望這些工作,如果沒有,發表評論:)

+0

如何使用在另一個函數中定義的變量來設置scrollTop位置? –

+0

有很多方法。關閉我的頭頂..您可以將其存儲在木材上或菜單對象上。您也可以將其存儲在元素本身的數據變量中。您也可以將該變量綁定到回調函數。 –