将鼠标悬停在一个 div 上以显示另一个 div
Hover on one div to display another div
破解了一整天,还是找不到简单的解决方法。
我有一个class
.displaynone{
display:none;
}
我正在尝试
- 将鼠标悬停在#hoversubheader1 上并通过删除#subheader1 上的 .displaynone 来显示#subheader1。
- 当我将鼠标从#hoversubheader1 移动到#subheader1 时,不允许#subheader1 消失
- 当我的鼠标既不在#subheader1 也不在#hoversubheader1 时,将class 添加回#subheader1。
尚未完成第 2 步和第 3 步。
我知道你会希望我嵌套元素,但我有理由不这样做。实际上,这两个 div 被一些 'space' 分隔开,所以我自然可能需要一个 setTimeout 或其他与时间相关的函数,但我也不确定我是否在正确的轨道上。
如果有人可以提供帮助,我会很开心。
标记
<div class="ui basic vertical segment" id="header">
<div class="ui container">
<div class="ui text menu">
<a class="item">
Item
</a>
</div>
<div class="ui text menu displaynone" id="subheader">
<a class="right item" id="hoversubheader1">
subheadertitle1
</a>
<a class="item" id="hoversubheader2">
subheadertitle2
</a>
</div><!--end of subheadermenu-->
<div class="ui text menu displaynone" id="subheader1">
<a class="right item">
detail
</a>
<a class="item">
detail
</a>
</div><!--end of subheadermenu-->
<div class="ui text menu displaynone" id="subheader2">
<a class="right item">
detail
</a>
<a class="item">
detail
</a>
</div><!--end of subheadermenu-->
</div><!--end of container-->
</div><!--end of segment-->
JS
(function($) {
"use strict"; // Start of use strict
//header hover brings out subheader bar
$("#header").hover(
function () {
$("#subheader").removeClass("displaynone");
},
function () {
$("#subheader").addClass("displaynone");
}
);
//hovering on each subheadertitle should display each subheader1, subheader2 etc
$('#hoversubheader1,#subheader1').mouseenter(function(){
$('#subheader1').removeClass("displaynone");
}).mouseleave(function(){
$("#subheader1").addClass("displaynone");
});
$('#hoversubheader2,#subheader2').mouseenter(function(){
$('#subheader2').removeClass("displaynone");
}).mouseleave(function(){
$("#subheader2").addClass("displaynone");
});
}(jQuery)); // End of use strict
CSS
#header{
background-color: white;
opacity: 0.97;
position: fixed;
width: 100%;
z-index: 99;
padding:0;
padding-bottom:0;
-webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
}
#header > .ui.container > .ui.text.menu{
margin-bottom:0;
}
#subheader,
#subheader1,
#subheader2{
padding:0;
margin:0;
}
#subheader1,
#subheader2{
height:200px;
}
#subheader > .ui.text.menu,
#subheader1 > .ui.text.menu,
#subheader2 > .ui.text.menu{
margin:0;
}
#subheader.displaynone,
#subheader1.displaynone,
#subheader2.displaynone{
display:none;
}
<!DOCTYPE html>
<html>
<head>
<style>
.general {
height: 100px;
width: 100px;
border: solid 1px black;
}
.divClass {
display: inline;
}
.divClassB {
display: none;
}
</style>
<script src="script.js"></script>
<script>
var flag = false;
function MouseOver(obj) {
if (obj.id == "DivA" || obj.id == "DivB") {
flag = true;
document.getElementById('DivB').style.display = 'inline';
}
showhide(flag);
}
function MouseOut(obj) {
if (obj.id == "DivA" || obj.id == "DivB")
flag = false;
setTimeout(function() {
showhide(flag);
}, 3000);
}
function showhide(flag) {
if (flag) {
document.getElementById('DivB').style.display = 'inline';
} else
document.getElementById('DivB').style.display = 'none'
}
</script>
</head>
<body>
<h1>Hello Plunker!</h1>
<div class="general divClass" id="DivA" onmouseout="MouseOut(this)" onmouseover="MouseOver(this)">
Div A
</div>
<div>
This is for space
</div>
<div id="DivB" class="general divClassB" onmouseout="MouseOut(this)" onmouseover="MouseOver(this)">
Div B
</div>
</body>
</html>
破解了一整天,还是找不到简单的解决方法。
我有一个class
.displaynone{
display:none;
}
我正在尝试
- 将鼠标悬停在#hoversubheader1 上并通过删除#subheader1 上的 .displaynone 来显示#subheader1。
- 当我将鼠标从#hoversubheader1 移动到#subheader1 时,不允许#subheader1 消失
- 当我的鼠标既不在#subheader1 也不在#hoversubheader1 时,将class 添加回#subheader1。
尚未完成第 2 步和第 3 步。
我知道你会希望我嵌套元素,但我有理由不这样做。实际上,这两个 div 被一些 'space' 分隔开,所以我自然可能需要一个 setTimeout 或其他与时间相关的函数,但我也不确定我是否在正确的轨道上。
如果有人可以提供帮助,我会很开心。
标记
<div class="ui basic vertical segment" id="header">
<div class="ui container">
<div class="ui text menu">
<a class="item">
Item
</a>
</div>
<div class="ui text menu displaynone" id="subheader">
<a class="right item" id="hoversubheader1">
subheadertitle1
</a>
<a class="item" id="hoversubheader2">
subheadertitle2
</a>
</div><!--end of subheadermenu-->
<div class="ui text menu displaynone" id="subheader1">
<a class="right item">
detail
</a>
<a class="item">
detail
</a>
</div><!--end of subheadermenu-->
<div class="ui text menu displaynone" id="subheader2">
<a class="right item">
detail
</a>
<a class="item">
detail
</a>
</div><!--end of subheadermenu-->
</div><!--end of container-->
</div><!--end of segment-->
JS
(function($) {
"use strict"; // Start of use strict
//header hover brings out subheader bar
$("#header").hover(
function () {
$("#subheader").removeClass("displaynone");
},
function () {
$("#subheader").addClass("displaynone");
}
);
//hovering on each subheadertitle should display each subheader1, subheader2 etc
$('#hoversubheader1,#subheader1').mouseenter(function(){
$('#subheader1').removeClass("displaynone");
}).mouseleave(function(){
$("#subheader1").addClass("displaynone");
});
$('#hoversubheader2,#subheader2').mouseenter(function(){
$('#subheader2').removeClass("displaynone");
}).mouseleave(function(){
$("#subheader2").addClass("displaynone");
});
}(jQuery)); // End of use strict
CSS
#header{
background-color: white;
opacity: 0.97;
position: fixed;
width: 100%;
z-index: 99;
padding:0;
padding-bottom:0;
-webkit-transition: all 250ms ease-in-out;
-moz-transition: all 250ms ease-in-out;
-o-transition: all 250ms ease-in-out;
transition: all 250ms ease-in-out;
}
#header > .ui.container > .ui.text.menu{
margin-bottom:0;
}
#subheader,
#subheader1,
#subheader2{
padding:0;
margin:0;
}
#subheader1,
#subheader2{
height:200px;
}
#subheader > .ui.text.menu,
#subheader1 > .ui.text.menu,
#subheader2 > .ui.text.menu{
margin:0;
}
#subheader.displaynone,
#subheader1.displaynone,
#subheader2.displaynone{
display:none;
}
<!DOCTYPE html>
<html>
<head>
<style>
.general {
height: 100px;
width: 100px;
border: solid 1px black;
}
.divClass {
display: inline;
}
.divClassB {
display: none;
}
</style>
<script src="script.js"></script>
<script>
var flag = false;
function MouseOver(obj) {
if (obj.id == "DivA" || obj.id == "DivB") {
flag = true;
document.getElementById('DivB').style.display = 'inline';
}
showhide(flag);
}
function MouseOut(obj) {
if (obj.id == "DivA" || obj.id == "DivB")
flag = false;
setTimeout(function() {
showhide(flag);
}, 3000);
}
function showhide(flag) {
if (flag) {
document.getElementById('DivB').style.display = 'inline';
} else
document.getElementById('DivB').style.display = 'none'
}
</script>
</head>
<body>
<h1>Hello Plunker!</h1>
<div class="general divClass" id="DivA" onmouseout="MouseOut(this)" onmouseover="MouseOver(this)">
Div A
</div>
<div>
This is for space
</div>
<div id="DivB" class="general divClassB" onmouseout="MouseOut(this)" onmouseover="MouseOver(this)">
Div B
</div>
</body>
</html>