这是目前我得到的最佳解决方案。相信我,我尝试了所有其他方法,这是我想出来的最好、最简单的方法。它在
Windows设备上表现出色,可以将页面从右侧推出以留出系统滚动条的空间,并且在
IOS设备上也很好用,在浏览器中不需要为其滚动条腾出空间。因此,使用此方法,您无需在右侧添加填充,以使页面在使用CSS隐藏正文或HTML的溢出时不会闪烁。
如果您认真思考,这个解决方案非常简单。其思路是在弹出窗口打开时给window.scrollTop()设置完全相同的位置。同时,当窗口大小改变时更改该位置(因为此时滚动位置也会改变)。
那么,我们开始吧...
首先,让我们创建一个变量,称之为stopWindowScroll,用于指示弹出窗口是否已打开。如果我们不这样做,您的页面将出现未定义变量的错误,并将其设置为0-表示未激活。
$(document).ready(function(){
stopWindowScroll = 0;
});
现在让我们创建打开弹出窗口的函数,这个函数可以是代码中触发任何弹出窗口插件或自定义弹出窗口的函数。 在这种情况下,它将是一个简单的自定义弹出窗口,具有简单的“单击文档”功能。
$(document).on('click','.open-popup', function(){
stopWindowScrollPosition = $(window).scrollTop();
stopWindowScroll = 1;
$('.your-popup').fadeIn(300);
});
所以接下来我们要创建关闭弹出窗口的函数,我再重复一遍,这个函数可以是你已经创建或正在使用的任何函数或插件。重要的是,我们需要这两个函数将
stopWindowScroll 变量设置为 1 或 0,以便知道它是开着还是关闭着。
$(document).on('click','.open-popup', function(){
stopWindowScroll = 0;
$('.your-popup').fadeOut(300);
});
那么我们就创建一个 window.scroll 函数,以便在上面提到的 stopWindowScroll 被设置为 1(激活状态)时,可以防止滚动。
$(window).scroll(function(){
if(stopWindowScroll == 1) {
$(window).scrollTop(stopWindowScrollPosition);
}
});
就这样。这不需要CSS才能工作,除了页面上自己的样式。这对我来说非常好用,希望能帮助到你和其他人。
以下是JSFiddle上的一个可行示例:
JS Fiddle 示例
如果有帮助,请告诉我。祝好。