激活下拉菜单时动态更改标题的位置
Change a header's position dynamically when activating drop down menu
我有一个下拉菜单,它位于设置为位置的标题内:固定。在移动设备上查看时,我希望标头保持固定,但是当菜单被激活时,jQuery 会动态地将标头的位置更改为相对位置。这工作正常(请参阅下面的代码(,但是我需要解决一些问题。如果再次单击菜单切换链接(关闭菜单(,则标头不会返回到其先前的"相对"状态。有没有办法做到这一点?我还注意到闪烁,所以假设您在页面向下滚动一半,然后单击菜单将其打开,页面有点跳跃并且没有滚动回菜单位于标题内的顶部。我更喜欢纯粹的CSS解决方案,但这似乎是不可能的。我可以设置规则,以便如果它小于 499 像素宽,标题将获得"相对"位置,但随后可用性失败,因为用户必须向上滚动到页面顶部才能访问下拉菜单。
任何帮助将不胜感激。
这是我的代码:
.HTML
<header role="banner" class="secondary">
<a href="#menu" class="menu-toggle"><em>Menu</em> <span aria-hidden="true"></span></a>
<nav id="nav" role="navigation">
<ul class="menu set">
<li class="subnav">
<a href="#">Link</a>
<ul class="sub-menu">
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul>
</li>
</ul>
</nav>
</header>
.CSS
header[role="banner"] {
width: 100%;
background: #fff;
display: block;
margin: 0 auto;
padding: 0;
box-shadow: 0 2px 4px rgba(0,0,0,0.25);
z-index: 10000;
}
@media all and (min-width: 500px) {
header[role="banner"] {
position: fixed;
top: 0;
left: 0;
clear: both;
height: auto;
display: block;
}
}
@media all and (max-width: 499px) {
header[role="banner"] {
position: fixed;
}
}
JAVASCRIPT
$(document).ready(function() {
$('body').addClass('js');
var $menu = $('#nav'),
$menulink = $('.menu-toggle'),
$menuTrigger = $('.subnav > a');
$menulink.click(function(e) {
e.preventDefault();
$menulink.toggleClass('active');
$menu.toggleClass('active');
});
var add_toggle_links = function() {
if ($('.menu-toggle').is(":visible")){
if ($(".toggle-link").length > 0){
}
else{
$('.subnav > a').before('<span class="toggle-link">Open</span>');
$('.toggle-link').click(function(e) {
var $this = $(this);
$this.toggleClass('active').siblings('ul').toggleClass('active');
});
}
}
else{
$('.toggle-link').empty();
}
}
add_toggle_links();
$(window).bind("resize", add_toggle_links);
});
$(document).ready(function() {
$('.menu-toggle').click(function() {
if ($( document ).width() < 499)
$('header[role="banner"]').css('position', 'relative');
});
});
所以你实际上没有任何 js 代码可以在 fixed
和 relative
之间切换标题的位置。
我会做的可能是toggleClass
在你的标题上。
$(document).ready(function() {
$('.menu-toggle').click(function() {
if ($( document ).width() < 499){
$('header[role="banner"]').toggleClass('active');
}
});
});
然后在你的 css 中
header[role="banner"] {
position: fixed;
}
header[role="banner"].active {
position: relative;
}
您获得的屏幕跳转可能是将位置从固定更改为相对,因为 relative 会将标题添加回正常的页面流。因此,要解决此问题,您还可以切换标题下方的任何内容的类,因此当处于活动状态时,它的边距顶部为 0,当处于非活动状态时,它的边距顶部等于标题的高度。
相关文章:
- 如何解析html以删除元素并只返回其位置的标题
- HTML固定标题-将位置th与td在同一级别上对齐
- 使用固定位置固定标题会导致内容在滚动过程中跳到标题下方
- 如何让 .stop 工作并确保标题在我单击时停止,而不是在我单击的位置停止
- 使用 Jquery 自定义按钮和滑块(大小、位置、标题大小)
- 粘性表标题位置绝对无重叠
- 在谷歌地图上添加多个带有标题和位置的标记,并在点击时更改图像
- 基于页面标题/位置的重定向
- 将标题属性添加到现有 HTML 的某个位置
- 滚动时修复网格视图标题的位置
- 激活下拉菜单时动态更改标题的位置
- 在打开(活动)移动下拉菜单时将标题的位置从固定更改为相对
- 将一个标题替换为固定位置,将另一个标题位置替换为固定
- 如何更改默认工具提示的位置和标题
- 如何使用“固定”标题使锚标记直接指向页面上的正确位置
- 固定的表格标题更改位置/不在镀铬中对齐
- WordPress-标题位置顶部,左&正确的
- 拒绝获取不安全的标题“位置”
- 在移动设备上滚动时保持标题位置固定
- 固定标题位置在滚动-如果其他不工作