我不太了解很多JS。虽然我已经做了自己的搜索,但我找不到答案。所以我在这里问,希望你能帮助我。
我正在尝试创建一个基于div标签的导航菜单(如http://www.adobe.com/),并使用jQuery为“悬停时出现/消失”创建一个函数。
简单Div结构:
<div id='menu'>
<div> Level 1 a
<div> Level 2 a </div>
<div> Level 2 b </div>
</div>
<div> Level 1 b
<div> Level 2 c </div>
<div> Level 2 d </div>
</div>
</div>
我了解它需要使用$('#menu').hover()
函数。我的问题是,如果只使用一个id“菜单”,我可以用什么样的功能来确定哪个实际的菜单列表正在徘徊?
像:
$("#menu").hover( // Div Menu is being hovered
function () {
// $el = Determine which menu inside of Div Menu is actually being hovered
// $el.show();
},
function () {
$el..hide();
}
);
或许我的结构完全错误,应该用另一种方法来做到这一点?请帮忙。
答案 0 :(得分:3)
$("#menu").hover( // Div Menu is being hovered
function (event) {
$el = $(event.target);
$el.show();
},
function (event) {
$el = $(event.target);
$el.hide();
}
);
答案 1 :(得分:1)
实际上,没有hover
事件。在两个不同的模型中有many different mouse events,它们在从内部元素触发时是不同的。幸运的是,jQuery的hover
方法(实际上是mouseenter
和mouseleave
)对此进行了抽象,并且仅在父元素悬停时触发处理程序。
这意味着您必须将处理程序绑定到菜单树中的每个元素:
$("#menu div").hover(
function (event) {
console.log(event);
$(this).children().show();
},
function (event) {
$(this).children().hide();
}
);
答案 2 :(得分:1)
是的,您可以使用您编写的代码来确定何时悬停div。然后触发显示下拉菜单的功能。当您定义导航栏的CSS时,您应该设置在开头不必显示的部分来显示:hidden;在div中,所以它是隐藏的。然后通过jquery将代码注入到css中以更改属性显示。我举个例子。假设你创建了一个名为“hidden”的div,并在css和其他可能的样式中设置它: #hidden { 显示:隐藏 }
然后,当您悬停鼠标时,您希望显示ID为“hidden”的部分。 您可以使用:
$("#hidden").hover.css('display', 'block')
所以隐藏的部分会出现。 无论如何,即使只使用css而不使用jquery,你也可以创建一个下拉菜单。 我在这里举个例子: 假设你在html文件中有这个标记
<ul id="nav">
<li>
<a href="#">Home</a>
</li>
<li>
<a href="#">About</a>
<ul>
<li><a href="#">The product</a></li>
<li><a href="#">Meet the team</a></li>
</ul>
</li>
<li>
<a href="#">Services</a>
<ul>
<li><a href="#">Sevice one</a></li>
<li><a href="#">Sevice two</a></li>
<li><a href="#">Sevice three</a></li>
<li><a href="#">Sevice four</a></li>
</ul>
</li>
<li>
<a href="#">Product</a>
<ul>
<li><a href="#">Small product (one)</a></li>
<li><a href="#">Small product (two)</a></li>
<li><a href="#">Small product (three)</a></li>
<li><a href="#">Small product (four)</a></li>
<li><a href="#">Big product (five)</a></li>
<li><a href="#">Big product (six)</a></li>
<li><a href="#">Big product (seven)</a></li>
<li><a href="#">Big product (eight)</a></li>
<li><a href="#">Enourmous product (nine)</a></li>
<li><a href="#">Enourmous product (ten)</a></li>
<li><a href="#">Enourmous product (eleven)</a></li>
</ul>
</li>
<li>
<a href="#">Contact</a>
<ul>
<li><a href="#">Out-of-hours</a></li>
<li><a href="#">Directions</a></li>
</ul>
</li>
</ul>
正如你在这里看到的那样,标记只是一系列嵌套的“ul”。没有详细的ID /类,没有div,只有丰富的语义代码。
#nav ul包含一系列li,任何需要下拉列表然后包含另一个ul。请注意,下拉列表ul上没有类 - 这是因为我们使用级联来设置这些样式,使我们的标记更加清晰。
现在的CSS:
#nav{
list-style:none;
font-weight:bold;
margin-bottom:10px;
/* Clear floats */
float:left;
width:100%;
/* Bring the nav above everything else--uncomment if needed.
position:relative;
z-index:5;
*/
}
#nav li{
float:left;
margin-right:10px;
position:relative;
}
#nav a{
display:block;
padding:5px;
color:#fff;
background:#333;
text-decoration:none;
}
#nav a:hover{
color:#fff;
background:#6b0c36;
text-decoration:underline;
}
/*--- DROPDOWN ---*/
#nav ul{
background:#fff; /* Adding a background makes the dropdown work properly in IE7+. Make this as close to your page's background as possible (i.e. white page == white background). */
background:rgba(255,255,255,0); /* But! Let's make the background fully transparent where we can, we don't actually want to see it if we can help it... */
list-style:none;
position:absolute;
left:-9999px; /* Hide off-screen when not needed (this is more accessible than display:none;) */
}
#nav ul li{
padding-top:1px; /* Introducing a padding between the li and the a give the illusion spaced items */
float:none;
}
#nav ul a{
white-space:nowrap; /* Stop text wrapping and creating multi-line dropdown items */
}
#nav li:hover ul{ /* Display the dropdown on hover */
left:0; /* Bring back on-screen when needed */
}
#nav li:hover a{ /* These create persistent hover states, meaning the top-most link stays 'hovered' even when your cursor has moved down the list. */
background:#6b0c36;
text-decoration:underline;
}
#nav li:hover ul a{ /* The persistent hover state does however create a global style for links even before they're hovered. Here we undo these effects. */
text-decoration:none;
}
#nav li:hover ul li a:hover{ /* Here we define the most explicit hover states--what happens when you hover each individual link. */
background:#333;
}
因此,通过使用嵌套的无序列表和一些CSS,您可以创建一个有效的下拉菜单。根据我的说法,这是最好的解决方案。因为你可以更容易地做出更好的事情。
有关详细信息以及下拉菜单的完整说明和演示,请转到:http://csswizardry.com/2011/02/creating-a-pure-css-dropdown-menu/
当然,您可以根据需要设置颜色和样式。
答案 3 :(得分:1)
如果您想在亚马逊上选择这样的弹出式垂直菜单,请查看此示例。这很简单,只是html和css,没有jquery。它看起来很像。
HTML:
<ul class="nav">
<li>
<a href="#">
<strong>MP3s & Cloud Player</strong> 18 million songs, play anywhere
</a>
</li>
<li>
<a href="#">
<strong>MP3s & Cloud Player</strong> 18 million songs, play anywhere
</a>
<ul>
<li>
<a href="#">
<strong>Your Cloud Drive</strong> Anythign digital, securely stored, available anywhere
</a>
</li>
<li>
<a href="#">
<strong>Learn more about cloud</strong> </a>
</li>
</ul>
<span class="cover"></span>
</li>
<li>
<a href="#">
<strong>Kindle</strong>
</a>
</li>
</ul>
CSS:
ul.nav{
font-size: 10px;
font-family: Verdana, Helvetica;
width: 200px;
background: #edf7ff;
}
ul.nav li{
padding: 5px 4px;
border: 1px solid #85abc9;
margin-bottom: -1px;
position: relative;
background: url(http://www.qualitymetric.com/Portals/0/images/orange_arrow.png) no- repeat 185px center;
}
ul.nav > li:hover{
background: #fff;
border: 1px solid #999;
z-index:1;
box-shadow: 0px 1px 0px #999;
-moz-box-shadow: 0px 1px 0px #999;
}
ul.nav > li:hover > span{
width: 5px;
height: 100%;
background: #fff;
position: absolute;
top: 0px;
bottom: 0px;
right: 15px;
z-index: 10;
}
ul.nav li a{
color: #666;
text-decoration: none;
}
ul.nav li a strong{
font-size: 11px;
color: #333;
font-weight: bold;
display: block;
}
/* dropdown */
ul.nav li ul{
width: 200px;
padding-left: 12px;
background: #fff;
border: 1px solid #999;
position: absolute;
border-radius: 4px;
-moz-border-radius: 4px;
box-shadow: 1px 1px 0px #999;
-moz-box-shadow: 1px 1px 0px #999;
top: -1px;
left: 180px;
z-index: 9;
display: none;
}
ul.nav li:hover > ul{
display: block;
}
ul.nav li ul li{
border: none;
padding-left: 12px;
background: url(http://www.qualitymetric.com/Portals/0/images/orange_arrow.png) no- repeat 0px 6px;
}
ul.nav li ul li a strong{
font-weight: normal;
color: #034995;
}
在这里查看代码和演示:http://jsfiddle.net/blackpla9ue/KHLgm/8/ 您可以根据需要编辑和添加内容。