Javascript 当滚动超过某个点时,jQuery捕捉/固定菜单宽度会发生更改和跳跃

Javascript 当滚动超过某个点时,jQuery捕捉/固定菜单宽度会发生更改和跳跃,javascript,jquery,css,scroll,css-position,Javascript,Jquery,Css,Scroll,Css Position,当导航的top属性位于页面顶部时,我会将一个水平导航锁定在页面顶部。但是,当导航到达页面顶部时,它会增加其宽度,并且会跳跃。一旦我向下滚动一点,这种现象就会停止。请注意,在向上滚动时也会发生同样的情况。换句话说,当导航的顶部到达页面的顶部时,就会出现宽度变化跳跃的情况 <div id="container"> <div class="phone-number"> ... </div> <div id="phone-sub-

当导航的top属性位于页面顶部时,我会将一个水平导航锁定在页面顶部。但是,当导航到达页面顶部时,它会增加其宽度,并且会跳跃。一旦我向下滚动一点,这种现象就会停止。请注意,在向上滚动时也会发生同样的情况。换句话说,当导航的顶部到达页面的顶部时,就会出现宽度变化跳跃的情况

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>
链接到下面的小提琴。我试着尽可能地添加代码,但我也在抱怨

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>
HTML

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>
CSS

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>

跳跃性是卷轴事件失败中高度变化的典型案例。使导航条处于
位置:固定的
滚动时,会使该元素脱离正常文档流,降低文档的高度,从而将文档向后滚动,将导航条踢回正常位置。你一直都在滚动,所以循环会反复运行,导致跳跃。修复相当简单:插入一个占位符,当导航栏被修复时,该占位符将填充该空间

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>
HTML:

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>
JavaScript:

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>
$(window).scroll(function() {
    if ($(this).scrollTop() > topOfNav){ 
        $('#nav-bar-placeholder').show();
        $('#float-nav-bar').addClass('fixed');
    }
    else 
    {
        $('#nav-bar-placeholder').hide();
        $('#float-nav-bar').removeClass('fixed');
    }
});

查看此JSFIDLE以了解完整的工作示例:。

跳跃是滚动事件崩溃中高度变化的典型案例。使导航条处于
位置:固定的
滚动时,会使该元素脱离正常文档流,降低文档的高度,从而将文档向后滚动,将导航条踢回正常位置。你一直都在滚动,所以循环会反复运行,导致跳跃。修复相当简单:插入一个占位符,当导航栏被修复时,该占位符将填充该空间

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>
HTML:

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>
JavaScript:

<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>
$(window).scroll(function() {
    if ($(this).scrollTop() > topOfNav){ 
        $('#nav-bar-placeholder').show();
        $('#float-nav-bar').addClass('fixed');
    }
    else 
    {
        $('#nav-bar-placeholder').hide();
        $('#float-nav-bar').removeClass('fixed');
    }
});

查看此JSFiddle以获取完整的工作示例:。

能否尝试为
浮动导航条设置固定宽度,如
宽度:250px而不是使用
%
?或者您需要使用
%
?我希望它从其父容器继承。这并不能解决我的紧张情绪,这对我来说更为紧迫。我对宽度有一些“修正”,但我想看看首先修正跳跃性的地方。你能试着为
#浮动导航条
设置一个固定的宽度吗,比如
宽度:250px而不是使用
%
?或者您需要使用
%
?我希望它从其父容器继承。这并不能解决我的紧张情绪,这对我来说更为紧迫。我有一些“修复”宽度的东西,但我想看看修复跳跃的东西首先带我去哪里。范。该死的。好吃!谢谢你,好心的先生。有没有办法让class.float导航条的高度为inherit(或类似)?我不想明确地设置高度,但如果必须这样做,那就这样吧。我自然而然地尝试了inherit,但这是不可能的。@Gregolopolis您可能可以将导航栏和占位符都包装在容器div中,并让它们都继承。祝你好运!扇子。该死的。好吃!谢谢你,好心的先生。有没有办法让class.float导航条的高度为inherit(或类似)?我不想明确地设置高度,但如果必须这样做,那就这样吧。我自然而然地尝试了inherit,但这是不可能的。@Gregolopolis您可能可以将导航栏和占位符都包装在容器div中,并让它们都继承。祝你好运!
<div id="container">
    <div class="phone-number">
    ...
    </div>
    <div id="phone-sub-text">
        ...
    </div>
    <div id="social-media">
        <div>
            <img id="fb-icon" src="img/fb-rect.jpg"/>
            <img src="img/twitter-rect.jpg"/>
        </div>
    </div>
    <h1>
    ...
    </h1>
        <div id="float-nav-bar"></div>
        <div id="main">
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-top" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                </section>
                <figure>
                    <img src="#" />
                </figure>
            </div>
            <header>
                ...
            </header>
            <header class="sub-header">
                ...
            </header>
            <div id="main-content-bottom" class="main-content">
                <section>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...
                    <br/>
                    ...                    
                </section>
                <figure>
                    <img src="#">
                </figure>
            </div>
        </div>

        <footer class="container-footer">

        </footer>
</div>
</body>
</html>