当模态打开时保持背景滚动

时间:2014-06-20 10:19:26

标签: javascript jquery html css twitter-bootstrap

我在这个网站和其他网站上查看过很多其他问题。他们遇到了同样的问题,但他们的解决方案都没有为我工作。我看到的最常见的解决方案是从#标记的href属性中删除a,但我的模式会在点击div时打开,而其他情况则有不同的情况,他们适合我的情况。

当我向下滚动并单击div以打开模态时,会发生模态打开。在此之前,我遇到了一个问题,当我打开我的模态时,又添加了另一个滚动条,根据我上一个问题的答案,它说要这样做:

body.modal-open {
    overflow: hidden !important;
}

我做了它并且它有效但现在当我打开它时,背景滚动到顶部。我知道这是因为position: fixed属性而发生的。我可能需要为它指定top属性以保持其滚动位置,但每次,顶部偏移都会发生变化,因此它们对于top属性来说不是常量最高值。

我寻找找出页面的滚动偏移量,发现我们可以使用window.pageYOffset来计算用户滚动背景的程度。我尝试将pageYOffset的值记录到控制台:

window.onscroll = function() {
    console.log(window.pageYOffset);
}

但是每当我滚动它时,它会不断地将0记录到控制台。

我现在不知道如何解决这个问题。请帮忙。感谢。

Fiddle.

2 个答案:

答案 0 :(得分:0)

更改

body.modal-open {overflow: hidden!important;}

body.modal-open { overflow: auto; }

然后,您需要将锚点从<a href="#">更改为<a href="javascript:void(0)">或更改为正确的锚点,而不仅仅是页面顶部。

答案 1 :(得分:0)

我想我终于理解了你的意思。您点击类别链接打开模式,对吗?

如果是这样,问题是你周围有一个空链接<a href="#">,如果href为空,浏览器的默认行为是滚动到顶部。

例如,如果您将链接的href更改为<a href="http://stackoverflow.com">,则不会滚动到顶部,但当然会离开您的网站。

正如Tom已经说过的那样,您也可以将href更改为<a href="javascript:void(0)">,但它需要的不是#,否则默认会滚动到顶部。

您可以添加一个简单的jQuery脚本,但为此您需要为此类的每个链接指定一个特定的类,如下所示:

<a class="modal_popup" href="#">

并添加此脚本:

$('.modal_popup').click(function(e) {     
     e.preventDefault();
});

您只需编写<a href="#!">,在哈希键后添加您喜欢的任何字符,只要它在您的DOM中不存在ID