第一种使用CSS中的position:sticky
实现
使用条件:
- 父元素不能
overflow:hidden
或者overflow:auto
属性 - 必须指定
top、bottom、left、right
4 个值之一,否则只会处于相对定位 - 父元素的高度不能低于
sticky
元素的高度 sticky
元素仅在其父元素内生效例如:
1
2
3
4
5.nav {
position: -webkit-sticky;
position: sticky;
top: 0;
}
兼容性
并不是很好因为这个 API 还只是实验性的属性。不过这个 API 在 IOS 系统的兼容性还是比较好的。
使用Jquery 的 offset().top 实现
1 | window.addEventListener('scroll',self.handleScrollone); |
使用原生JavaScript 实现
1 | window.addEventListener('scroll',Navflexd); |
第二种
- 说明:vm.$refs 一个对象,持有已注册过 ref 的所有子组件(或HTML元素)
- 使用:在 HTML元素 中,添加ref属性,然后在JS中通过vm.$refs.属性来获取
- 注意:如果获取的是一个子组件,那么通过ref就能获取到子组件中的data和methods
1
2
3
4
5
6window.addEventListener('scroll', self.handleScrollTwo);
handleScrollTwo: function() {
let self = this;
let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
let offsetTop = self.getOffset(self.$refs.prode_tab_fixed);
self.titleFixed = scrollTop > offsetTop;
###
使用 obj.getBoundingClientRect().top
实现 MDN)
定义:
这个 API
可以告诉你页面中某个元素相对浏览器视窗上下左右的距离。
使用:
tab 吸顶可以使用 obj.getBoundingClientRect().top
代替 scrollTop - offsetTop
,代码如下:
1 | // html |
offsetTop 和 getBoundingClientRect() 区别
1. getBoundingClientRect():
该**Element.getBoundingClientRect()**
方法返回元素的大小及其相对于视口的位置。。
该函数返回一个 object
对象,有6个属性: top, right, buttom, left, width, height。
(在 IE 中,默认坐标从(2,2)开始计算,只返回 top,lef,right,bottom
四个值)
2. offsetTop:
用于获得当前元素到定位父级( element.offsetParent )顶部的距离(偏移值)。