gpt4 book ai didi

javascript - 粘性导航栏有故障行为

转载 作者:行者123 更新时间:2023-11-29 10:40:40 25 4
gpt4 key购买 nike

所以我尝试自定义制作一个导航栏,该导航栏设置在页面周围边框的正下方。我做了一个插图来帮助解释: enter image description here

在页面上,我在整个页面周围有一个边框(蓝色),然后导航栏(红色)随页面滚动,直到它到达导航栏的顶部并保持不变,直到用户向上滚动。

我的问题是,一旦 js 启动(当用户滚动超过顶部边框时),似乎有什么东西将我的导航栏及其内容推到右边,做出明显的猛拉 Action 。

enter image description here

这是我的 html:

    <html>
<head>
<title>Title</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>

<body>
<%= yield :scss %>

<div class="container-main <%= layout %>">

<nav class="main-nav">
<a class="navbar-brand" href="#">
<i class="fa fa-bars menu-icon"></i>
</a>
</nav>

<div class="container">
<%= yield %>
</div>

</div>

<%= yield :js %>

</body>
</html>

有人知道怎么解决吗?我不确定它是否是需要覆盖的 Bootstrap 或者什么...我试图设置导航栏的 margin-left 以等同于移动但它最终弄乱了我设置的 Bootstrap 列.. .任何建议表示赞赏!

这是我的 CSS:

    .main-nav {
text-align: center;
margin-top: 50px;
background: transparent;
height: 50px;
z-index: 150;
margin-bottom: -50px;
}

.main-nav-scrolled {
position: fixed;
width: 100%;
top: 0;
// margin-left: -35px; not working
}

.main-nav,
.container {
position: relative;
}
.container {
background: transparent;
padding: 100px
}
.layout-with-border {
background: #eaeae8; //fixed for all product pages
border: 35px solid #dad4c9; //theme color light
}
.layout-without-order {
}

这是我的 JS:

      var  mn = $(".main-nav");
mns = "main-nav-scrolled";

var BorderWidth = 35;

$(window).scroll(function() {
if( $(this).scrollTop() > BorderWidth ) {
mn.addClass(mns);
} else {
mn.removeClass(mns);
}
});

抱歉,我是新手,怎么发这么多部分有点困惑。我为边框布局创建了一个助手:

    module ApplicationHelper
def layout
if params[:controller] == 'products' && params[:action] == 'show'
'layout-with-border'
elsif params[:controller] == 'volumes' && params[:action] == 'show'
'layout-with-border'
else
'layout-without-border'
end
end
end

最佳答案

您的代码非常接近您的需要。

故障是由于 .main-nav 中的 position: relative 更改为 position: fixed 造成的。

固定元素的宽度是根据视口(viewport)计算的,而不是父容器。

首先,将 body 上的边距清零(如果需要,取决于您的设计)。

为了说明,我在 .main-container 上添加了 35px 的蓝色边框。

然后,对于 .main-nav-scrolled,将左右偏移量都设置为 35px 以设置 nav block 的正确宽度,您不需要需要设置宽度值。

注意: .container 中的内容在滚动到触发点时向上跳转 50px。要阻止这种情况,您需要在修复 nav 时向 .container-main 添加 50px 的填充或向 .container 添加 50px 的上边距元素。我选择添加填充,请参阅下面的 jQuery 中的更改。

var mn = $(".container-main");
mns = "main-nav-scrolled";

var BorderWidth = 35;

$(window).scroll(function() {
if ($(this).scrollTop() > BorderWidth) {
mn.addClass(mns);
} else {
mn.removeClass(mns);
}
});
body {
margin: 0;
}
.container-main {
border: 35px solid lightblue;
}
.main-nav {
text-align: center;
margin-top: 0px;
background: yellow;
height: 50px;
}
.main-nav-scrolled .main-nav {
position: fixed;
top: 0;
left: 35px;
right: 35px;
z-index: 1;
}
.main-nav-scrolled.container-main {
padding-top: 50px;
}
.container {
position: relative;
background: beige;
padding: 100px;
height: 400px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container-main">
<nav class="main-nav">
<a class="navbar-brand" href="#">
<i class="fa fa-bars menu-icon">Icon</i>
</a>
</nav>
<div class="container">container content...</div>
</div>

关于javascript - 粘性导航栏有故障行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29898105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com