tab滚动到顶部时 粘性效果(解决不支持sticky浏览器)

可以先判断是否支持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 距离顶部的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值