Javascript 如何使用jQuery设置滚动位置?

Javascript 如何使用jQuery设置滚动位置?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我找到了一个类似问题的解决方案,但我自己无法解决。我遇到的问题是,当我正在工作的网站上打开移动菜单时,试图锁定垂直滚动。锁定滚动会导致每次打开菜单时页面跳转到顶部 jQuery: timber.openDrawerMenu = function () { var tempScrollTop = $(window).scrollTop(); var $mobileMenu = $('.nav-bar'), $mobileMenuButton = $('#menu-opene

我找到了一个类似问题的解决方案,但我自己无法解决。我遇到的问题是,当我正在工作的网站上打开移动菜单时,试图锁定垂直滚动。锁定滚动会导致每次打开菜单时页面跳转到顶部

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()。由于某些原因,它没有设置滚动位置,但我无法弄清楚确切的原因。非常感谢您提供的任何帮助。

我发现这是一个特定于移动设备的问题

  • 我有一个想法:
    • 尝试在body标签上显式设置
      位置:相对
  • 如果这不起作用,我有一个更粗俗的想法:
    • 在关闭菜单之前,请尝试显式重置滚动位置

  • 如果没有,请留下评论:)

    使用
    setTimeout(x,0)
    等待dom刷新,让浏览器有时间在阅读之前滚动。添加类,稍等片刻,然后执行滚动代码,否则一看就可以了。@dandavi我在哪里确切地使用该代码?但它的测量是正确的,只是没有在单击事件后实际设置滚动位置。我无法真正理解您试图用jQuery实现什么。@LucasMedina我试图计算并在菜单展开时设置滚动顶部位置。这样,它将抵消我遇到的问题,当菜单展开(打开)时,页面跳转到顶部。所以我使用的是
    var tempScrollTop=$(window.scrollTop()
    计算它并
    console.log(tempScrollTop)$(窗口).scrollTop(临时scrollTop)来设置它。但是,当打开菜单时,页面仍会跳到顶部,但在控制台中显示了正确的滚动位置。位置:已修复是一个问题,因为它将相对于视口定位主体。如果没有它,这(理论上)应该可以工作,因为您已经设置了溢出:隐藏并通过编程滚动到正确的位置。如何使用在另一个函数中定义的变量设置scrollTop位置?有很多方法。从我头上掉下来。。您可以将其存储在木材或菜单对象上。还可以将其存储在元素本身的数据变量中。还可以将变量绑定到回调函数。