如何以编程方式禁用jQuery页面滚动

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

使用jQuery,我想禁用身体的滚动:

我的想法是:

  1. body{ overflow: hidden;}
  2. 捕捉电流scrollTop();/scrollLeft()
  3. 绑定到主体滚动事件,将滚动顶/滚动左侧设置为捕获的值。

有更好的办法吗?

提问于
用户回答回答于

我找到的唯一方法就是和你描述的相似:

  1. 抓取当前滚动位置(不要忘记水平轴!)
  2. 将溢出设置为隐藏(可能希望保留以前的溢出值)。
  3. 将文档滚动到存储的滚动位置。
// lock scroll position, but retain settings for later
var scrollPosition = [
  self.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
  self.pageYOffset || document.documentElement.scrollTop  || document.body.scrollTop
];
var html = jQuery('html'); // it would make more sense to apply this to body, but IE7 won't have that
html.data('scroll-position', scrollPosition);
html.data('previous-overflow', html.css('overflow'));
html.css('overflow', 'hidden');
window.scrollTo(scrollPosition[0], scrollPosition[1]);


// un-lock scroll position
var html = jQuery('html');
var scrollPosition = html.data('scroll-position');
html.css('overflow', html.data('previous-overflow'));
window.scrollTo(scrollPosition[0], scrollPosition[1])
用户回答回答于

这将完全地禁用滚动:

$('html, body').css({
    overflow: 'hidden',
    height: '100%'
});

恢复:

$('html, body').css({
    overflow: 'auto',
    height: 'auto'
});

在Firefox和Chrome上进行了测试。

扫码关注云+社区