【发布时间】:2023-03-13 20:40:01
【问题描述】:
我的主导航栏上有一条滑动线,因此将线悬停动画/滑动到您从当前位置(应该是当前页面)悬停的项目。
示例:https://codepen.io/moy/pen/Yjqrqo
我遇到的问题是,当菜单项上没有 current_menu_item 类时它会中断。
80% 的时间会有一个“已选择”菜单项,但在某些情况下,当您在条款、隐私、联系(页脚链接)页面上没有可关联的主要导航项时。
理想情况下,当没有选定项目时,我希望线条在悬停时淡入,然后从那里滑动。然后,如果您不单击任何内容并再次离开菜单,则该行将淡出。但我愿意接受建议。
$(function() {
var $el, leftPos, newWidth, $mainNav = $(".site-nav__list");
$mainNav.append("<div class='site-nav__line'></div>");
var $magicLine = $(".site-nav__line");
$magicLine
.width($(".current-menu-item").width())
.css("left", $(".current-menu-item a").position().left)
.data("origLeft", $magicLine.position().left)
.data("origWidth", $magicLine.width());
$(".site-nav__list li a").hover(function() {
$el = $(this);
leftPos = $el.position().left;
newWidth = $el.parent().width();
$magicLine.stop().animate({
left: leftPos,
width: newWidth
});
}, function() {
$magicLine.stop().animate({
left: $magicLine.data("origLeft"),
width: $magicLine.data("origWidth")
});
});
});
/* MIXIN */
@mixin clearfix() {
&:before,
&:after {
content: "";
display: table;
}
&:after {
clear: both;
}
}
/* Body */
body {
background: #f9f9f9;
margin: 0;
padding: 5px 0 0;
}
/* Header */
.page-head {
background: white;
border-top: 2px solid #ddd;
box-sizing: border-box;
@include clearfix;
padding: 0 30px;
position: relative;
width: 100%;
}
.page-head__logo {
background-image: none;
float: left;
padding: 0;
text-shadow: none;
width: 200px;
}
/* Nav */
.site-nav {
display: block;
float: right;
text-align: center;
width: auto;
}
.site-nav__list {
list-style: none;
margin: 0;
padding: 0;
position: relative;
top: auto;
left: auto;
width: auto;
}
.site-nav__list li {
background: none;
display: inline-block;
margin: 0;
padding-left: 0;
text-transform: uppercase;
&.current-menu-item {}
}
.site-nav__list a {
box-sizing: border-box;
display: block;
font-weight: 900;
padding: 30px 15px;
transition: color .15s;
text-shadow: none;
&:hover {
color: red;
}
}
/* Underline */
.site-nav__line {
background: red;
content: "";
display: block;
height: 2px;
position: absolute;
top: -2px;
left: 0;
width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header class="page-head">
<a href="#" class="page-head__logo">Logo Here </a>
<nav class="site-nav">
<ul class="site-nav__list">
<li class="site-nav__item current-menu-item"><a href="#" class="site-nav__link">Home</a></li>
<li class="site-nav__item"><a href="#" class="site-nav__link">About</a></li>
<li class="site-nav__item"><a href="#" class="site-nav__link">Looooonger Title</a></li>
<li class="site-nav__item"><a href="#" class="site-nav__link">Company</a></li>
<li class="site-nav__item"><a href="#" class="site-nav__link">About</a></li>
<li class="site-nav__item"><a href="#" class="site-nav__link">Login</a></li>
<li class="site-nav__item"><a href="#" class="site-nav__link amp">Apply</a></li>
</ul>
</nav>
</header>
【问题讨论】:
-
你的问题是什么,我无法理解你的问题
-
我发布的 CodePen 大部分都有效。问题是没有添加
current-menu-item类。在这种情况下,我需要隐藏这条线。然后,一旦将菜单项悬停在该行上就会淡入。然后,如果将鼠标悬停在其他菜单项上,它应该会滑动到其他菜单项。如果您离开菜单,它应该会再次淡出。
标签: javascript jquery html css sass