将鼠标悬停在一个 div 上以显示另一个 div

Hover on one div to display another div

破解了一整天,还是找不到简单的解决方法。

我有一个class

  .displaynone{
      display:none;
    }

我正在尝试

  1. 将鼠标悬停在#hoversubheader1 上并通过删除#subheader1 上的 .displaynone 来显示#subheader1。
  2. 当我将鼠标从#hoversubheader1 移动到#subheader1 时,不允许#subheader1 消失
  3. 当我的鼠标既不在#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>