可以先判断是否支持sticky 然后再循环定时监听滚动的位置,当菜单栏滚动到顶部的时候,将tab 变成fixed 定位 并且将下边的list 增加padding
//html
<img class="cuxiao-title" id='cuxiao'/>
<div id="goodTab" class="sticky" >
<div class="tab-wrap">
<ul class="good-category">
<li class="category-item" >
</li>
</ul>
</div>
</div>
//监听sticky
function isSupportSticky = () => {
var vendorList = ['', '-webkit-', '-ms-', '-moz-', '-o-'],
vendorListLength = vendorList.length,
stickyElement = document.createElement('div');
for (var i = 0; i < vendorListLength; i++) {
stickyElement.style.position = vendorList[i] + 'sticky';
console.log('stickyElement',stickyElement)
if (stickyElement.style.position !== '') {
return true;
}
}
return false;
};
if(!isSupportSticky()){
this.$nextTick(()=>{
setTimeout(()=>{
clearInterval( window.countTime)
// let divDom = document.getElementById("goodTab")
let cuxiaoDom = document.getElementById("cuxiao")
// let divTop = divDom.getBoundingClientRect().top;
let divTop = cuxiaoDom.offsetTop + cuxiaoDom.offsetParent.offsetTop + cuxiaoDom.clientHeight;
window.countTime = setInterval(() => {
let scrollTop= window.pageYOffset
|| document.documentElement.scrollTop
|| document.body.scrollTop
|| 0;
console.log(divTop)
if(scrollTop>=divTop){
divDom.style.position='fixed'
document.getElementById(this.selectPitId).style.paddingTop = '52px'
}else{
divDom.style.position='relative'
document.getElementById(this.selectPitId).style.paddingTop = '0'
}
}, 100);
},1000)
})
}
getBoundingClientRect 这个方法有个问题,在PC端,当滚动条滚动一定的位置,然后刷新页面,此时获取的top值是当前位置到顶部的值,需要加上滚动值才是真正的想要的div 距离顶部的位置