我想创建一个菜单栏,在其中悬停时,项目旁边应该出现一个相关的额外菜单,当鼠标指针熄灭时,它应该消失。
例如,当您将鼠标指针放在此页面顶部的用户名上时,您会看到一个包含活动、权限、注销等的菜单。
我想实现这样的菜单。
切换额外菜单元素(例如 div)的可见性(或更改显示)属性是显而易见的。
但我的问题是我怎么能检测到鼠标指针悬停在额外的菜单上,它不应该消失,直到鼠标指针消失!
我不想使用 JQuery。
我想创建一个菜单栏,在其中悬停时,项目旁边应该出现一个相关的额外菜单,当鼠标指针熄灭时,它应该消失。
例如,当您将鼠标指针放在此页面顶部的用户名上时,您会看到一个包含活动、权限、注销等的菜单。
我想实现这样的菜单。
切换额外菜单元素(例如 div)的可见性(或更改显示)属性是显而易见的。
但我的问题是我怎么能检测到鼠标指针悬停在额外的菜单上,它不应该消失,直到鼠标指针消失!
我不想使用 JQuery。
小提琴:http: //jsfiddle.net/gvee/jrFse/
<ul>
<li>Item 1
<ul>
<li>Subitem 1</li>
<li>Subitem 2</li>
</ul>
</li>
<li>Item2</li>
<li>Item 3
<ul>
<li>Subitem 1</li>
</ul>
</li>
</ul>
ul
{
list-style-type: none;
}
ul li
{
padding: 5px;
margin: 3px;
border: 1px solid black;
}
ul li:hover
{
background-color: lime;
}
li ul
{
display: none;
}
li:hover ul
{
display: block;
}
li ul li:hover
{
background-color: red;
}
注意:还有一些样式留给你做,这只是为了说明原理。
CSS 有属性
element:hover{}
如需更美观的菜单,请使用 javascript
此外,如果您想在父元素悬停时更改子元素的样式,您可以使用
parentElement:hover childElement{}
所以这个想法可能是在其中获取一个外部 div(parentElement) 和一个标签以及另一个 div(childElement)。在 parentElement 悬停时,修改 childElement 的 display 属性,如上面的代码片段所示。
您可以使用以下设置弹出菜单。你想做的就是以你想要的方式重组它。您可以在这里进行演示。
HTML
<div>
<input type="button" ID="lnkModel" OnClick="DisplayModal();" Text="OK" />
</div>
<div id="overlay"></div>
<div id="modalMsg" style="width: 200px; height: 100px; border-color: Black; border-style: solid;
color: Red;" class="HideModal">
This is modalpopup window
<input type="button" ID="lnkOk" OnClick="return RemoveModal();" Text="OK" />
</div>
CSS
.ShowModal
{
top: 200px;
left: 250px;
z-index: 1000;
position: absolute;
background-color: White;
display: block;
}
.HideModal
{
display: none;
}
.OverlayEffect
{
background-color: black;
filter: alpha(opacity=70);
opacity: 0.7;
width: 100%;
height: 100%;
z-index: 400;
position: absolute;
top: 0;
left: 0;
}
JavaScript
function DisplayModal()
{
alert("Hai");
document.getElementById("overlay").style.height = document.body.clientHeight + 'px';
document.getElementById("overlay").className = "OverlayEffect";
document.getElementById("modalMsg").className = "ShowModal";
}
function RemoveModal()
{
document.getElementById("modalMsg").className = "HideModal";
document.getElementById("overlay").className = "";
return false;
}
更新
根据这个问题,您可以使用这种方式触发悬停
<div onmouseover="document.getElementById('input').style.backgroundColor='Blue';">
<input id="input">
</div>
检查此问题以了解有关 css 和 js 悬停事件之间区别的更多信息。上面提到的css hover 与 javascript mouseover问题)。
您必须使用 Javascript 来更改要使其可见的元素的 CSS 属性。
element.style.visibility='visible'
将使您的元素可见,但它也为元素保留空间,这不应该是一个问题,因为我假设该元素将具有更高的 z-index。
对于鼠标交互,请在此处查找 Javascript“onmouseover”事件: http ://www.w3schools.com/jsref/event_onmouseover.asp
谢谢大家的帮助和想法。
我想我已经解决了这个问题:
首先,我创建了一个具有固定宽度和高度属性的简单对象:
<div id="menu" style="width:200px; height:50px; overflow:visible;">
</div>
然后我添加了另一个 INSIDE菜单 DIV !
这里我使用相对位置来使用 z-index 属性。(绝对位置也可以。)
left 属性让我的子菜单出现在正确的位置。
显示属性设置为无;在 javascript 代码中更改它会显示 DIV。
<div id="menu" style="width:200px; height:50px; overflow:visible;">
<div id="sub-menu" style="width:200px; height:300px; position:relative; left:200px; display:none">
... items in sub-menu
</div>
</div>
之后,我为 MouseOver 和 MouseOut 添加了两个 javascript 函数:
<div id="menu" style="width:200px; height:50px; overflow:visible;" onmouseover="javascript: MouseOver();" onmouseout="javascript: MouseOut();">
<div id="sub-menu" style="width:200px; height:300px; position:relative; left:200px; display:none">
... items in sub-menu
</div>
</div>
Javascript:
function MouseOver(){
document.getElementById("sub-menu").style.display = "inline-block";
}
function MouseOut(){
document.getElementById("sub-menu").style.display = "none";
}
这样当鼠标指针经过菜单DIV时,出现子菜单DIV,当鼠标指针经过子菜单DIV时,它也仍然在菜单DIV上,所以不会调用MouseOut函数!
诀窍只是在主菜单 DIV 内添加子菜单 DIV,并为其使用相对位置!更改显示属性很明显;)
原谅我不好的解释。谢谢。
我建议将 jQuery 用于此类事情,但这是您悬停问题的解决方案:
将动画附加到菜单的鼠标事件和用户名上。
var elem = getelementbyid("yourTrigger");
var elem2 = getelementbyid("yourElementToShow");
elem.onmouseover = function(e) {
elem2.style.display = "block";
};
elem.onmouseout = function(e) {
elem2.style.display = "none";
};
elem2.onmouseover = function(e) {
elem2.style.display = "block";
};
elem2.onmouseout = function(e) {
elem2.style.display = "none";
};