目前能想到的有
- 阻止所有能导致页面滚动的事件。 //scroll不能阻止,只能阻止mousewheel,鼠标拽滚动条就悲剧了
- body overflow:hidden //win下右侧滚动条会消失导致页面横移
- 把滚动部分单独放在一个div里,和弹出部分同级,body和window同高。 //所有涉及offset/scrollTop的方法都要修改。
- 弹出时算scrollTop,给内容区fix然后top移动到目前位置,同时body给一个overflow-y:scroll强撑出滚动条。
大家有没有更好的方法?
个人感觉第二种最好,而且 twitter 、QQ 空间、fancybox 插件等都采用的这种方法。JS 越简单越好。至于遇到的内容偏移的问题,解决方法就是获取当前浏览器下滚动条宽度,然后再进行赋值。
从 fancybox 插件中提取出来的检测方法大体如下:
检测添加类的目的就是取消滚动条,显然是下面这样
更详细的分析,自荐一篇文章 再谈弹窗那些事