为了账号安全,请及时绑定邮箱和手机立即绑定

$(dom).offset().top取值恒为0的问题

标签:
Html/CSS

背景: 前些日子仿照「百度文库 - 发现文档」做了一个Demo,就是当List被点击时,弹出一个Dialog。Dialog的显示位置是随着触发按钮的位置变化而变化的。做完后的效果,经过测试,自己还是很满意的。然后...Coolpad手机发现了问题...当屏幕滑动后,Dialog的位置显示不正确(首屏是没问题的)。经过一番调试,发现问题出现jQuery.offset()这个方法。遂出现了这篇踩坑的文章。

offset()

这是jQuery库提供的一个函数,用来设置或者返回当前元素相对于当前文档的偏移量。

【注意】
该函数只对可见元素有效,即 display:none 的元素是不可以的。

好了,关于offset方法就解药介绍到这里了。如果读到这里的您还意犹未尽,需要更详细的介绍的话。请点击这里,有详细的介绍。

var bgTop = $('dialog-bg').offset().top;

$(dom).offset().top方法,在不同的浏览器中返回的值不同。

  • 当文档刚加载完时,返回为0(这是正确的,在所有浏览器表现一致)

  • 当滑动页面,不同浏览器返回值出现偏差

    • 一直显示0

    • 正常变化

修复方法

var bgTop = $('dialog-bg').offset().top;if( bgTop == 0 ){
  bgTop = $('body').scrollTop();
}

这里我在网上看到一个通用的方法可以解决,贴到这里,需要的话,可以自省尝试:

function pageX(elem){  return elem.offsetParent ? elem.offsetLeft + pageX(elem.offsetParent) : elem.offsetLeft;
}function pageY(elem){  return elem.offsetParent ? elem.offsetTop + pageY(elem.offsetParent) : elem.offsetTop;
}



作者:微行丶简
链接:https://www.jianshu.com/p/97c67bcdcf2f


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消