【问题标题】:How to show a div element on mouse hover?如何在鼠标悬停时显示 div 元素?
【发布时间】:2019-11-01 10:43:35
【问题描述】:

当列表元素悬停时,我需要显示div,有点像下拉菜单。

我已经有办法使用 jQuery 来做到这一点,这正是我想要的,但问题是当我将鼠标从列表(li 元素)移开时,div 消失了。我希望能够将鼠标从列表元素移动到 div 并能够与 div 中的元素进行交互。

这将通过点击功能解决,但我不想使用点击,因为 div 上的元素将包含锚链接,当点击时会将用户带到页面下方,因此您可以看到点击功能如何显示并保留 div 不是一个好主意,除非我能找到一种方法在单击其内容(锚链接)时关闭 div。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
  .nav-item-dropdown {
    position: absolute;
    /* other styles ... */
  }
</style>

<div class="nav-wrap">
  <ul>
    <li id="nav-item1" class="nav-item-wrap">Services</li>
    <li id="nav-item2" class="nav-item-wrap">Projects</li>
  </ul>
</div>

<div class="nav-item-dropdown nav-item1-dropdown">
  <!-- Drop-down nav contents for services (title and image) wrapped by anchor link goes here -->
</div>

<script>
  $(document).ready(function() {
    jQuery('#nav-item1').hover(function() {
      $('.nav-item1-dropdown').toggle();
    });
    jQuery('#nav-item2').hover(function() {
      $('.nav-item2-dropdown').toggle();
    });
  });
</script>

我希望能够将鼠标从列表元素 (.nav-item-wrap) 移动到 div (.nav-item-dropdown) 并能够与 div 中的元素进行交互。当我将鼠标从触发它的列表元素移开时,我不希望 div 消失。

【问题讨论】:

    标签: javascript jquery jquery-hover


    【解决方案1】:

    .toggle() 方法只是切换元素的可见性。在您的代码中,他们做得很好。在您的情况下,而不是切换使用 .show().hide() 如下所示。您需要额外的class 来在加载时隐藏div

    $(document).ready(function() {
      jQuery('#nav-item1').hover(function() {
        $('.nav-item1-dropdown').show();
        $('.nav-item2-dropdown').hide();
      });
      jQuery('#nav-item2').hover(function() {
        $('.nav-item2-dropdown').show();
        $('.nav-item1-dropdown').hide();
      });
    });
    .nav-item-dropdown {
      position: absolute;
      /* other styles ... */
    }
    
    .yourClass {
      display: none
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="nav-wrap">
      <ul>
        <li id="nav-item1" class="nav-item-wrap">Services</li>
        <li id="nav-item2" class="nav-item-wrap">Projects</li>
      </ul>
    </div>
    
    <div class="nav-item-dropdown nav-item1-dropdown yourClass">
      div1
      <!-- Drop-down nav contents for services (title and image) wrapped by anchor link goes here -->
    </div>
    <div class="nav-item-dropdown nav-item2-dropdown yourClass">
      div2
      <!-- Drop-down nav contents for services (title and image) wrapped by anchor link goes here -->
    </div>

    【讨论】:

    • 感谢您的回复。你有什么工作,但我希望当我将鼠标从 div 移开时 div 消失(被隐藏)。就像现在一样,即使向下滚动页面,它也保持可见。我需要能够将鼠标放在 div 上并与其内容进行交互,但鼠标移出时 div 会消失。感谢您的帮助。
    • 在这种情况下,当鼠标移出时处理 mouseleave()。另一种选择是鼠标滚轮事件。
    【解决方案2】:

    试试这个:

     $(document).ready(function(){
          jQuery('#nav-item1').mouseover(function() {
             $('.nav-item1-dropdown').show();
          }); 
          jQuery('#nav-item2').mouseover(function() {
             $('.nav-item2-dropdown').show();
          });
       });
    

    【讨论】:

    • 感谢您的回复。你有什么工作但我希望当我将鼠标从 div 移开时 div 消失(被隐藏)。就像现在一样,即使向下滚动页面,它也保持可见。我需要能够将鼠标放在 div 上并与其内容进行交互,但鼠标移出时 div 会消失。感谢您的帮助。
    【解决方案3】:

    我认为你可以使用这样的东西来显示和隐藏 div

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    <div class="nav-wrap">
      <ul>
        <li id="nav-item1" class="nav-item-wrap">Services</li>
        <li id="nav-item2" class="nav-item-wrap">Projects</li>
      </ul>
    </div>
    
    <div class="nav-item-dropdown nav-item1-dropdown" style="display:none">
      <p>your action goes here</p>
    </div>
    
    <script>
      $(document).ready(function() {
        jQuery('.nav-wrap').hover(function() {
          $('.nav-item1-dropdown').show();
        });
        $('.nav-item1-dropdown').hide(); //use it wherever you need to hide it
      });
    </script>

    【讨论】:

    • 感谢您的回复。你有什么工作,但我希望当我将鼠标从 div 移开时 div 消失(被隐藏)。就像现在一样,即使向下滚动页面,它也保持可见。我需要能够将鼠标放在 div 上并与其内容进行交互,但鼠标移出时 div 会消失。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多