什么是吸顶效果

当我们使用app时,时常会有这样一种场景,一个网页的最上方是一个swipe,然后下面是一个搜索栏,当我们往下滑动网页的时候,swipe会随着滑动消失,而搜索栏却会“粘”在网页最上方,这就是所谓的吸顶效果

如何实现

思路是这样的 获取元素的距离页面最上边的高度,获取浏览器滑动到的高度(也就是scrollTop),然后判断

当 浏览器滑动到的高度 - 距离页面最上边的高度 > 0 时,给元素加上fixed定位固定,设置css属性 top = 0使其保持在页面最上端。

网上有很多种实现方式,其中有些用了offsetTop,让offsetTop - scrollTop

请注意!!!!

  • offsetTop像css的absoulte属性一样,是向上找一个position不为static的元素相对定位的,所以有时候会出现bug。

最好的方式是使用原生的api : object.getBoundingClientRect().top,它一步到位表示的是元素上边到视窗上边的距离。

这样直接判断 object.getBoundingClientRect().top <= 0 就可以了

细节

不同浏览器,获取scrollTop的方式是不同的,为了兼容性应该这么写

1
let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop

根据这篇文章[]