【问题标题】:JQuery Hover Toggle Issue When Page Loads页面加载时 JQuery 悬停切换问题
【发布时间】:2020-04-15 10:27:35
【问题描述】:
$("#menu-main li").hover(function(){
    $(this).find(".sub-menu").animate({
        height: "toggle",
        opacity: "toggle"
    }, "fast");
});

我正在使用它来切换悬停菜单。

我的问题是,如果页面加载时鼠标悬停在#main-menu li 上,则切换会向后切换,因为它会在鼠标离开时切换,而在再次悬停时关闭。

代码:

$(document).ready(function() {

    $("#menu-main li").hover(function(){
        $(this).find(".sub-menu").animate({
            height: "toggle",
            opacity: "toggle"
        }, "fast");
    });

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="menu-main">
  <li><a href="#">Home</a>
    <ul class="sub-menu" style="display: none;">
      <li><a href="#">News</a></li>
      <li><a href="#">News</a></li>
      <li><a href="#">News</a></li>	
      <li><a href="#">News</a></li>
    </ul>
  </li>
</ul>

我可以通过按“运行代码 sn-p”并快速将鼠标悬停在“主页”li 将加载的位置来重新创建。

【问题讨论】:

  • 请提供minimal, complete, and verifiable example,包括必要的 CSS 和 HTML。这将使那些试图帮助您的人更轻松,并增加您快速找到问题解决方案的机会。
  • 提供完整代码

标签: jquery


【解决方案1】:

我会完全避免使用 JavaScript(尤其是增加库的开销)来完成类似的事情,以避免首先出现此类问题。所以这是一个纯 CSS 的解决方案:

#menu-main .sub-menu {
  overflow: hidden;
  max-height: 0;
  opacity: 0;
  transition: max-height 500ms cubic-bezier(0, 1, 0, 1), opacity 500ms;
}

#menu-main>li:hover .sub-menu {
  max-height: 100vh;
  opacity: 1;
  transition: max-height 1000ms ease-in-out, opacity 500ms;
}
Hover menu items to show submenus:
<ul id="menu-main">
  <li>Foo
    <ul class="sub-menu">
      <li>Lorem</li>
      <li>Ipsum</li>
      <li>Dolor</li>
    </ul>
  </li>
  <li>Bar
    <ul class="sub-menu">
      <li>Lorem</li>
      <li>Ipsum</li>
      <li>Dolor</li>
    </ul>
  </li>
  <li>Baz
    <ul class="sub-menu">
      <li>Lorem</li>
      <li>Ipsum</li>
      <li>Dolor</li>
    </ul>
  </li>
</ul>

动画延迟修复取自 this answer

【讨论】:

  • 这太棒了,谢谢。我的印象是你不能在不知道绝对高度的情况下使用 css 来滑动切换。但是您的解决方案解决了这个问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多