一尘不染

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

css

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

我的想法是:

  1. body{ overflow: hidden;}
  2. 捕获当前 scrollTop();/scrollLeft()
  3. 绑定到正文滚动事件,将scrollTop / scrollLeft设置为捕获的值。

有没有更好的办法?


更新:

我知道有人会在想“为什么他不只是position: fixed在面板上使用?”。

请不要提出这个建议,因为我还有其他原因。


阅读 473

收藏
2020-05-16

共1个答案

一尘不染

我发现执行此操作的唯一方法与您所描述的类似:

  1. 抓住当前滚动位置(不要忘记水平轴!)。
  2. 将溢出设置为隐藏(可能要保留以前的溢出值)。
  3. 使用scrollTo()将文档滚动到存储的滚动位置。

然后,当您准备允许再次滚动时,请撤消所有操作。

编辑:自从我费劲去挖掘它以来,没有理由我不能给你代码…

// 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])
2020-05-16