如何在用 "onmouseover" 显示它并将鼠标放在它上面后保持 div 可见
How to keep div visible after showing it with "onmouseover" and putting mouse over it
我正在尝试做一个菜单,当鼠标悬停在按钮上时菜单会展开(就像在附加的 jsfiddle 中一样)
HTML:
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12" id="menu">
<ul>
<li>
<div id="hover" onmouseover="document.getElementById('stuff').style.opacity = 1.0;" onmouseout="setTimeout(function(){document.getElementById('stuff').style.opacity = 0.0;}, 3000);">
<a href="">Button</a>
</div>
</li>
</ul>
</div>
<div class="col-lg-9 col-md-9 col-sm-6 col-xs-12" id="main">
<div id="stuff">stuff</div>
</div>
</div>
</div>
CSS:
#stuff {
height: 600px;
width: 100px;
background-color: red;
opacity: 0.0;
-webkit-transition: all 500ms ease-in-out;
-moz-transition: all 500ms ease-in-out;
-ms-transition: all 500ms ease-in-out;
-o-transition: all 500ms ease-in-out;
transition: all 500ms ease-in-out;
}
https://jsfiddle.net/bfkxmghd/2/
菜单显示正常,我使用 setTimeOut 将其关闭延迟 3 秒,但是如果我将鼠标移到 stuff
div 上,我怎样才能让它保持打开状态?我尝试使用 onmouseover="document.getElementById('stuff').style.opacity = 1.0;
,但在这种情况下,即使没有先将鼠标放在 hover
div 上,它也会出现。
您可以使用 jquery .mouseenter 或 .mouseover 和 .mouseleave 函数实现此代码,此处是代码
我已经在 codepen http://codepen.io/muratkh/pen/dNqxXM
上测试过了
$(document).ready(function() {
$('#hover').mouseover(function() {
$('#stuff').css("opacity",1);
});
$('#hover').mouseleave(function() {
$('#stuff').css('opacity',0);
})
});
css同
html
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12" id="menu">
<ul>
<li>
<div id="hover">
<a href="">Button</a>
<div class="col-lg-9 col-md-9 col-sm-6 col-xs-12" id="main">
<div id="stuff">stuff</div>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
只需在您保存的超时时间调用 clearTimeout
。不需要 jQuery.
var timeout
function showMenu () {
clearTimeout(timeout)
document.getElementById('stuff').style.opacity = 1.0;
timeout = setTimeout(function(){document.getElementById('stuff').style.opacity = 0.0;}, 3000);
}
function hideMenu () {
clearTimeout(timeout)
document.getElementById('stuff').style.opacity = 0.0;
}
function keepMenu () {
clearTimeout(timeout)
}
var hover = document.getElementById('hover')
hover.onmouseover = showMenu
var stuff = document.getElementById('stuff')
stuff.onmouseover = keepMenu
stuff.onmouseout = hideMenu
#stuff {
height: 600px;
width: 100px;
background-color: red;
opacity: 0.0;
-webkit-transition: all 500ms ease-in-out;
-moz-transition: all 500ms ease-in-out;
-ms-transition: all 500ms ease-in-out;
-o-transition: all 500ms ease-in-out;
transition: all 500ms ease-in-out;
}
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12" id="menu">
<ul>
<li>
<div id="hover">
<a href="">Button</a>
</div>
</li>
</ul>
</div>
<div class="col-lg-9 col-md-9 col-sm-6 col-xs-12" id="main">
<div id="stuff">stuff</div>
</div>
</div>
</div>
如果您可以将子菜单移动到同级位置或嵌套位置,您只需 CSS 即可达到相同的效果。
CSS 目标 :hover
允许您仅在悬停时应用 CSS。如果您的子菜单在您悬停的元素旁边,您可以使用 +
到 select 作为兄弟元素。要使 #stuff
菜单保持打开状态,您只需确保对其应用相同的悬停规则即可。
示例:
您可以保存对超时函数的引用,然后使用 clearTimout 取消它。
onmouseout="stuffTimeoutID = setTimeout(function(){document.getElementById('stuff').style.opacity = 0.0;}, 3000);"
然后
<div id="stuff" onmouseover="clearTimeout(stuffTimeoutID)">
我正在尝试做一个菜单,当鼠标悬停在按钮上时菜单会展开(就像在附加的 jsfiddle 中一样)
HTML:
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12" id="menu">
<ul>
<li>
<div id="hover" onmouseover="document.getElementById('stuff').style.opacity = 1.0;" onmouseout="setTimeout(function(){document.getElementById('stuff').style.opacity = 0.0;}, 3000);">
<a href="">Button</a>
</div>
</li>
</ul>
</div>
<div class="col-lg-9 col-md-9 col-sm-6 col-xs-12" id="main">
<div id="stuff">stuff</div>
</div>
</div>
</div>
CSS:
#stuff {
height: 600px;
width: 100px;
background-color: red;
opacity: 0.0;
-webkit-transition: all 500ms ease-in-out;
-moz-transition: all 500ms ease-in-out;
-ms-transition: all 500ms ease-in-out;
-o-transition: all 500ms ease-in-out;
transition: all 500ms ease-in-out;
}
https://jsfiddle.net/bfkxmghd/2/
菜单显示正常,我使用 setTimeOut 将其关闭延迟 3 秒,但是如果我将鼠标移到 stuff
div 上,我怎样才能让它保持打开状态?我尝试使用 onmouseover="document.getElementById('stuff').style.opacity = 1.0;
,但在这种情况下,即使没有先将鼠标放在 hover
div 上,它也会出现。
您可以使用 jquery .mouseenter 或 .mouseover 和 .mouseleave 函数实现此代码,此处是代码 我已经在 codepen http://codepen.io/muratkh/pen/dNqxXM
上测试过了$(document).ready(function() {
$('#hover').mouseover(function() {
$('#stuff').css("opacity",1);
});
$('#hover').mouseleave(function() {
$('#stuff').css('opacity',0);
})
});
css同
html
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12" id="menu">
<ul>
<li>
<div id="hover">
<a href="">Button</a>
<div class="col-lg-9 col-md-9 col-sm-6 col-xs-12" id="main">
<div id="stuff">stuff</div>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
只需在您保存的超时时间调用 clearTimeout
。不需要 jQuery.
var timeout
function showMenu () {
clearTimeout(timeout)
document.getElementById('stuff').style.opacity = 1.0;
timeout = setTimeout(function(){document.getElementById('stuff').style.opacity = 0.0;}, 3000);
}
function hideMenu () {
clearTimeout(timeout)
document.getElementById('stuff').style.opacity = 0.0;
}
function keepMenu () {
clearTimeout(timeout)
}
var hover = document.getElementById('hover')
hover.onmouseover = showMenu
var stuff = document.getElementById('stuff')
stuff.onmouseover = keepMenu
stuff.onmouseout = hideMenu
#stuff {
height: 600px;
width: 100px;
background-color: red;
opacity: 0.0;
-webkit-transition: all 500ms ease-in-out;
-moz-transition: all 500ms ease-in-out;
-ms-transition: all 500ms ease-in-out;
-o-transition: all 500ms ease-in-out;
transition: all 500ms ease-in-out;
}
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12" id="menu">
<ul>
<li>
<div id="hover">
<a href="">Button</a>
</div>
</li>
</ul>
</div>
<div class="col-lg-9 col-md-9 col-sm-6 col-xs-12" id="main">
<div id="stuff">stuff</div>
</div>
</div>
</div>
如果您可以将子菜单移动到同级位置或嵌套位置,您只需 CSS 即可达到相同的效果。
CSS 目标 :hover
允许您仅在悬停时应用 CSS。如果您的子菜单在您悬停的元素旁边,您可以使用 +
到 select 作为兄弟元素。要使 #stuff
菜单保持打开状态,您只需确保对其应用相同的悬停规则即可。
示例:
您可以保存对超时函数的引用,然后使用 clearTimout 取消它。
onmouseout="stuffTimeoutID = setTimeout(function(){document.getElementById('stuff').style.opacity = 0.0;}, 3000);"
然后
<div id="stuff" onmouseover="clearTimeout(stuffTimeoutID)">