平滑的实现tab固定在页面顶部

<div>
    <div id="aboveTab">
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>

        <img src="https://css-tricks.com/wp-content/uploads/2018/11/dddgrid-gap.svg"  style="width:500px;"/>
    </div>
    <div id="tab">
        <ul>
            <li>
                <p>tab1</p>
            </li>
            <li><p>tab2</p></li>
            <li><p>tab3</p></li>
        </ul>
    </div>

    <div id="belowTab">
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <p>这里是内容</p>
        <img src="https://css-tricks.com/wp-content/uploads/2018/11/dddgrid-gap.svg"  style="width:500px;"/>
        <img src="https://css-tricks.com/wp-content/uploads/2018/11/justify-items-stretch.svg"  style="width:500px;"/>
        <img src="https://css-tricks.com/wp-content/uploads/2018/11/justify-items-stretch.svg"  style="width:500px;"/>
    </div>
</div>
<style>
    *{margin: 0;padding: 0}
    p{
        line-height: 2;
    }
    ul li{list-style:none;border: 1px solid #000;background-color: #ffd600}
    ul {
        width: 300px;
        display: grid;
        grid-template-columns: 1fr 1fr 1fr;
        grid-template-rows: 50px;
        position: absolute; //画重点,这里可以实现平滑过渡
        top: 0; //画重点
        left: 0; //画重点
    }
    ul li {
        height: 50px;
        display: grid;
        justify-items: center;
        align-items: center;
    }
    ul li > p{
        align-self: center;
    }
    li:nth-child(1){
        grid-column: 2 / 3;
        grid-row: 1 / 2;
    }
    li:nth-child(2){
        grid-column: 1 / 2;
        grid-row: 1 / 2;
    }
    li:nth-child(3){
        grid-column: 3 / 4;
        grid-row: 1 / 2;
    }
</style>
(function (root, global) {
  var top = document.getElementById('aboveTab').offsetHeight;
  var belowObj = document.getElementById('belowTab');
  function scrollTimeout () {
    var scroll;
    clearTimeout(scroll);
    scroll = setTimeout(scrollEvent, 50)
  }
  function scrollEvent () {
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    var tabObj = document.getElementById('tab');
    if (scrollTop > top) {
      tabObj.style.position = 'fixed';
      tabObj.style.top = '0';
    }
    else {
      tabObj.style.position = 'relative';
      tabObj.style.top = 'auto';
    }
  }
  global.addEventListener('scroll', scrollTimeout)
})(this, window)

转载于:https://my.oschina.net/u/4085373/blog/3018859

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值