如何使一个 position: absolute; 的对话框在页面滚动时初始出现在视口内,而不管页面滚动到哪里?
如何使一个 position: absolute; 的对话框在页面滚动时初始出现在视口内,而不管页面滚动到哪里?
每次显示时,我希望对话框
出现在视口中,而不使用
position: fixed;
。实际上,在下面的示例中,当点击“显示”按钮时,我希望对话框出现在它将出现的位置,但我希望它的位置是绝对的。或者换句话说,我“...希望它被定位为固定的,然后在放置后立即停止固定”(感谢apsillers)。我希望它的position: absolute;
,这样我仍然可以在浏览器中滚动,但当它首次显示时,它仍然会出现在视口中。
我尝试了很多不同的CSS,来自这里,这里和这里,但没有一个似乎符合我的要求。请注意,我不能使用JQuery或其他JS库。
.dialog { position: absolute; }
对话框
问题的出现原因:需要在页面滚动的情况下,让position为absolute的对话框始终在视口内显示。
解决方法:可以使用绝对定位的对话框,并跟踪滚动位置。可以添加一个滚动事件监听器,在滚动时获取滚动的距离,并将对话框的top属性设置为滚动距离的像素值。代码如下:
document.addEventListener('scroll', function(){ var body = document.body; var top = body.scrollTop || body.parentElement.scrollTop; document.getElementById('#yourPoupUp').style.top = top + 'px'; });
(如果需要支持旧版的IE浏览器,还可以使用document.attachEvent()
添加相同的事件处理程序)
然而,我不推荐使用这种方法。如果可能的话,最好使用position:fixed
。
很好的回答!对于我具体的例子,我只需要在显示对话框的任何按钮的onclick
事件中运行这段代码。不确定,但可能值得修改示例以反映这一点。