Javascript 如何使用jQuery设置滚动位置?
我找到了一个类似问题的解决方案,但我自己无法解决。我遇到的问题是,当我正在工作的网站上打开移动菜单时,试图锁定垂直滚动。锁定滚动会导致每次打开菜单时页面跳转到顶部 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
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位置?有很多方法。从我头上掉下来。。您可以将其存储在木材或菜单对象上。还可以将其存储在元素本身的数据变量中。还可以将变量绑定到回调函数。