如何暂时锁定网页滚动
How to lock scrolling of a web page temporarily?
显示对话框时,如何临时锁定网页滚动?我有一个对话框,在停用覆盖网页的滚动后,我想在其中启用滚动。
是否有js命令暂时禁用滚动
编辑试试这个:
打开对话框时(删除滚动条并阻止用户滚动):
$('body').css({'overflow':'hidden'});
$(document).bind('scroll',function () {
window.scrollTo(0,0);
});
对话框关闭时(允许用户再次滚动):
$(document).unbind('scroll');
$('body').css({'overflow':'visible'});
您可以设置一个容器元素,甚至可以将主体设置为具有浏览器窗口宽度和高度的overflow: hidden
。这样,任何溢出的内容都会从页面上掉下来,滚动条永远不会显示。这可以在像body.dialog-open { overflow: hidden; }
这样的css语句中设置。然后,当对话框打开和关闭时,可以添加和删除.dialog-open
类名。
如果在主体上设置此项,可能不需要宽度和高度,但我必须检查该项的浏览器兼容性。可能会得到一些意想不到的结果。
编辑:如果你想在对话框中滚动,你可以在那里设置overflow: auto
,并在该元素上设置高度。
较旧的浏览器(尤其是IE)可能也会显示水平滚动条,如果是这样的话,您可能必须设置overflow-x: hidden
。
另请参阅:CSSdiv元素-如何只显示水平滚动条?有关滚动条的更多信息。
这里是香草JS版本:
document.getElementsByTagName('body')[0].style.overflow = 'hidden';
...
document.getElementsByTagName('body')[0].style.overflow = 'visible' // the default for the css property
这是我在这里发布的答案的副本:https://stackoverflow.com/a/63221105/4336168
我使用这两个功能:
function enableBodyScroll() {
if (document.readyState === 'complete') {
document.body.style.position = '';
document.body.style.overflowY = '';
if (document.body.style.marginTop) {
const scrollTop = -parseInt(document.body.style.marginTop, 10);
document.body.style.marginTop = '';
window.scrollTo(window.pageXOffset, scrollTop);
}
} else {
window.addEventListener('load', enableBodyScroll);
}
}
function disableBodyScroll({ savePosition = false } = {}) {
if (document.readyState === 'complete') {
if (document.body.scrollHeight > window.innerHeight) {
if (savePosition) document.body.style.marginTop = `-${window.pageYOffset}px`;
document.body.style.position = 'fixed';
document.body.style.overflowY = 'scroll';
}
} else {
window.addEventListener('load', () => disableBodyScroll({ savePosition }));
}
}
工作原理:
如果要禁用滚动并保存当前位置,则运行
disableBodyScroll({ savePosition: true })
。该功能检查页面是否已加载(因为用户可能会在加载过程中触发对话框打开)。
如果页面已加载,则通过在
body
上设置margin-top
来保存当前滚动位置,然后在其上设置position: fixed; overflow-y: scroll
以删除滚动条。如果页面没有加载,它会在页面加载时添加要运行的事件侦听器(3.)。
为了启用滚动,一切都是一样的,但功能删除样式而不是设置它们。
代码的来源,所以它们可以这样使用:
npm install --save @funboxteam/diamonds
import { enableBodyScroll, disableBodyScroll } from '@funboxteam/diamonds';
- Don'当到达iFrame底部时,不要滚动网页
- 如何在 django 中加载页面之前自动滚动网页
- 防止空格键和箭头键滚动网页
- 我们可以在不将其加载到无限可滚动网页中的情况下访问 DOM 元素吗?
- 如何在jquery中垂直滚动网页
- 在Chrome中滚动网页时出现奇怪问题
- 带有侧边栏的单滚动网页
- 按子像素滚动网页
- 聚焦SWF对象时停止滚动网页
- 如何在页面加载时向下滚动网页20px-50px
- 滚动网页与鼠标的位置-悬停在侧面元素
- JS代码滚动网页不工作
- 添加Class到body>在用户滚动网页后标记
- 表格,当用户向下/向上滚动网页时显示
- 禁用iPad滚动网页
- 单指滚动网页-什么技术?工作榜样
- 使用iPhone的加速度计滚动网页
- 无法在iPad上滚动网页
- 如何在向下滚动网页时显示内容
- 如何自动滚动网页