div导航滚动到固定位置,且锚点定位不精准解决办法

一、首页,设置导航效果:

$(function () {
            //获取要定位元素距离浏览器顶部的距离
            let p= $('#zsjz-nav').offset().top;
            $(window).bind("scroll",function () {
                //获取滚动条的滑动距离
                let scroH = $(this).scrollTop();
                //滚动条的滑动距离大于等于定位元素距离浏览器顶部的距离,就固定,反之就不固定
                if(scroH>=p){
                    $("#zsjz-nav").addClass("scroll-up")
                    $('.nav-box').show();
                }else{
                    $("#zsjz-nav").removeClass("scroll-up")
                    $('.nav-box').hide();
                }
            });
        })

因为导航div从display:block变成display:fixed,脱离了文档流,造成后面锚点定位不准确,这里发一下这个bug的解决办法

<div class="container" id="zsjz-nav">
        <ul class="nav-menu">
            <li><a href="#index">招生简章</a></li>
            <li><a href="#school">学校简介</a></li>
            <li><a href="#environment">优美环境</a></li>
            <li><a href="#culture">丰富文化</a></li>
        </ul>
    </div>
    <div class="nav-box">只为了弥补导航脱离文档流后的位置</div>
<style>
.nav-box{width: 100%;height: 140px;display: none;}
</style>

二、锚点定位的内容被导航遮住

锚点位置跳转到的位置div:

.extra{border-top: solid 100px #fff;margin-top: -100px;}

 这实际上是一种掩眼法,对齐的参考点还是在元素的顶端,只是我把元素的设置了特定的border-top(padding-top也可以,margin-top不可以),锚点就可以好像真的一样偏移到目标标题文字,但是这样会使下来元素之间产生一段距离,那么我们只要设置其margin-top为负值,而且刚好为padding-top的值即可。

具体内容可以参考:http://www.webjx.com/css/divcss-17544.html#anchor2

<ul class="nav-menu">
    <li><a href="#index">招生简章</a></li>
    <li><a href="#school">学校简介</a></li>
</ul>

<div class="row extra" id="school" >
    <div class="col-md-12">
        <div class="h3 title"><span class="glyphicon glyphicon-home icon"></span>学校介绍</div>
    </div>
</div>

 

总结:遇到问题解决问题,我们会更棒

posted @ 2020-03-30 16:11  moppet蔡蔡  阅读(1538)  评论(0编辑  收藏  举报