定位filed穿透滚动问题

来源:互联网 发布:淘宝登录名 编辑:程序博客网 时间:2024/05/16 03:50

根据网上的资料,整理了下自己思路

如果直接点击弹出遮罩的时候给 body 加上 position:filed 那么 body 当前页面的默认顶部 top 则为 0

注意:body加上position:filed 则是 body 脱离当前文档流,因默认 top 为 0 所以固定在顶部不动

如果要把背景放成当前滑动到的位置则需要在 body 脱离文档流之前记录当前页面被卷曲的高度,因为页面是向上移动,所以得到的是正值,

现在页面要然他固定 top 则需要把正值转为负值,个人用的方法是字符串拼接,直接把得到的高度加 ‘ - ’ 号再转为整数,并赋值给 top 样式属性


取消弹窗主要是把之前设定的 position:filed 和 top 去掉,去掉 position:filed 之后页面会默认回到顶部如果要定位到点击之前浏览的位置则需要

重新进行定位,在执行去掉事件之前获得当前top值

当前获得的 top 值可能是 -100px 这样的,用 scrollTop 去定位当前需要跳转到的位置需要把获取到的 top 做处理,去掉-号和 px 可以用正则或 replace 函数

最后使用 scrollTop 跳转到当前位置


点击取消弹窗的方法可以参考另一篇文事件委托取消遮罩层


jq代码片段:

点击展开遮罩时

var offT=parseInt($('body').scrollTop());       //记录当前屏幕的高度
        $('body').css({position:'fixed',top:'-'+offT+'px'});


点击关闭遮罩时

var offT=$('body').css('top');       //记录当前屏幕的高度
        offT=offT.replace('-','').replace('px','');
        $('body').attr('style','');
        $('body').scrollTop(offT);