【问题标题】:jQuery slideDown snap after page reload页面重新加载后的jQuery slideDown snap
【发布时间】:2021-11-12 06:57:34
【问题描述】:

我已经问过这个问题,但没有得到任何答案,所以我会再试一次。

我使用 jQuery 在 WordPress 上构建了一个导航菜单,以便在子菜单上显示向下/向上滑动动画。我在子菜单上使用 flexbox,这似乎是导致问题的原因。当我将其更改为阻止时,它可以正常工作,但设计不是我想要的。

问题以及如何重新创建它:第一次刷新页面(或在 jsfiddle 上运行代码)并将鼠标悬停在菜单上时,子菜单将向下滑动到它应该停止的高度并弹回之后。 之后,所有其他子菜单都可以正常工作。只是我想修复那个弹回,因为它看起来不太好。

有谁知道为什么会发生这种情况和/或如何解决它?

您可以自己测试问题的 jsfiddle 链接:https://jsfiddle.net/u2zs38oL/

以及下面 jsfiddle 的代码:

HTML:

<header>
    <nav class="main-navigation" id="desktop-navigation">
        <div class="container-fluid">
            <div class="menu-menu-1-container">
                <ul id="menu-menu-2" class="d-flex justify-content-center">
                    <li
                        class="has-mega-menu menu-item menu-item-type-taxonomy menu-item-object-product_cat menu-item-has-children menu-item-92">
                        <a href="#">Test</a>
                        <ul class="sub-menu">
                            <li
                                class="mega-menu-column menu-item menu-item-type-taxonomy menu-item-object-product_cat menu-item-has-children menu-item-93">
                                <a
                                    href="#">Test</a>
                                <ul class="sub-menu">
                                    <li
                                        class="menu-item menu-item-type-taxonomy menu-item-object-product_cat menu-item-94">
                                        <a
                                            href="#/">Test</a></li>
                                </ul>
                            </li>
                            <li
                                class="mega-menu-column menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-149">
                                <a href="#">Test</a>
                                <ul class="sub-menu">
                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-150">
                                        <a href="#">Test</a></li>
                                </ul>
                            </li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
</header>

CSS:

header .main-navigation {
  display: block;
  margin-left: 1rem!important;
  margin-right: 1rem!important;
  text-transform: uppercase;
}

header .main-navigation > div {
  background: #000;
  position: relative;
}

header .menu-menu-1-container {
  height: 50px;
  white-space: initial;
}

header #menu-menu-2 {
  list-style: none;
  margin: 0;
  flex-direction: row;
}

header #menu-menu-2 > .menu-item {
  padding: 0 20px;
  height: 50px;
  border-bottom: 3px solid;
  border-color: #000;
  display: flex;
  align-items: center;
  justify-content: center;

}

header #menu-menu-2 .menu-item:hover {
  border-color: red;
  transition: 0.1s ease-in-out;
}

header #menu-menu-2 > li:hover > a {
  color: red;
}

header .has-mega-menu > .sub-menu {
  position: absolute;
  background: #fff;
  top: 50px;
  left: 0;
  width: 100%;
  display: none;
  box-shadow: 0 5px 10px rgb(0 0 0 / 10%);
}



header #menu-menu-2 li, header #menu-menu-2 ul {
  list-style: none;
  padding: 0;
}

header #menu-menu-2 li a {
  text-decoration: none;
}

header #menu-menu-2 > li > a {
  color: #fff;
}


header .has-mega-menu a {
  color: #000;
}

header .mega-menu-column {
  margin-left: 10px;
  margin-top: 25px;
  margin-bottom: 25px;
  padding: 0 15px!important;
}

header .mega-menu-column > a {
  position: relative;
  font-weight: 600;
  letter-spacing: 1px;
  padding-bottom: 10px;
  pointer-events: none;
}

header .mega-menu-column > a::before {
  content: "";
  position: absolute;
  height: 1px;
  width: 14px;
  bottom: 0;
  background-color: #000;
  opacity: 0.2;
}

header .mega-menu-column ul {
  margin-top: 20px;
}

header .mega-menu-column ul li {
  padding: 5px 0!important;
}

header .mega-menu-column ul a {
  color: grey;
  font-weight: 400;
  line-height: 25px;
  transition: all 0.3s ease-in-out;
  text-transform: capitalize;
  display: block;
}

header .mega-menu-column ul li a:hover {
  -webkit-transition: -webkit-transform 0.3s ease-in-out;
  -moz-transition: -moz-transform 0.3s ease-in-out;
  -ms-transition: -ms-transform 0.3s ease-in-out;
  -o-transition: -o-transform 0.3s ease-in-out;
  transition: transform 0.3s ease-in-out;
  -webkit-transform: translateX(5px);
  -moz-transform: translateX(5px);
  -ms-transform: translateX(5px);
  -o-transform: translateX(5px);
  transform: translateX(5px);
  color: #000;
  border-bottom: 1px solid red;
}

.d-flex {
  display: flex;
}

.justify-content-center {
  justify-content: center;
}

jQuery:

jQuery(document).ready(function() {
    
    jQuery('.main-navigation .has-mega-menu').hover(function() {
        jQuery(this).has('.sub-menu').children('.sub-menu').stop().slideDown({start: function() { 
            jQuery(this).css('display', 'flex');
          }, duration: 250
        });
        jQuery(this).children('.sub-menu').css('z-index', '3')
    }, function() {
        jQuery(this).has('.sub-menu').children('.sub-menu').stop().slideUp(250);
        jQuery(this).children('.sub-menu').css('z-index', '2')
    });
});

【问题讨论】:

    标签: javascript html jquery css drop-down-menu


    【解决方案1】:

    我找到了解决这个问题的方法(至少对我而言)。所以我发现如果在页面重新加载时,隐藏和显示的子菜单具有 display flex 而不是 none,那么捕捉似乎没有问题。但显然我不想从打开菜单开始。

    所以我所做的是将子菜单设置为 flex 并使用 z-index 隐藏菜单,直到 jQuery 加载完毕,然后使用 jQuery 隐藏(设置不显示)子菜单。然后,当悬停在菜单项上时,会切换 slideDown 并向该对象添加更高的 z-index。

    小提琴可以在这里找到:https://jsfiddle.net/e319ydkm/

    我对原始代码所做的更改:

    header .has-mega-menu > .sub-menu {
      display: none -> flex;
      z-index: -1;
    }
    .hide-under {
      background: #fff;
      z-index: 1;
      height: 1000px;
    }
    
    jQuery('.main-navigation .has-mega-menu > .sub-menu').hide();
    

    这当然不是一个完美的解决方案,我无法真正弄清楚是什么原因造成的,除了它是由 flexbox 引起的(可能)。我不会将此回复标记为答案,因为这不是真正的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2014-01-07
      • 2013-05-22
      相关资源
      最近更新 更多