【问题标题】:jQuery drop-down menu issues, placed arrows on menu links but menu fades away when the arrows are hovered overjQuery下拉菜单问题,在菜单链接上放置箭头,但当箭头悬停时菜单消失
【发布时间】:2016-03-24 09:29:56
【问题描述】:

我已经使用 jQuery 在我的网站上实现了一个下拉菜单,它运行良好,但我想在具有子菜单的链接上放置一个箭头。问题是,一旦您将鼠标悬停在所述箭头上,因为您“技术上”不再悬停在下拉元素上,下拉菜单就会消失并再次出现。我该如何解决这个问题?

HTML:

<nav id="site-navigation" class="main-navigation top-bar" data-topbar role="navigation" style="float:right;" data-topbar>
 <section class="top-bar-section">
  <?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) ); ?>
 </section>
  <div class="arrow-left-1"></div>
  <div class="arrow-left-2"></div>
  <div class="arrow-left-3"></div>
  <div class="arrow-left-4"></div>
  <div class="arrow-left-5"></div>
</nav>

CSS:

.arrow-left-1, .arrow-left-2, .arrow-left-3, .arrow-left-4, .arrow-left-5 {
  width: 0; 
  height: 0; 
  border-top: 5px solid transparent;
  border-bottom: 5px solid transparent;
  border-left: 5px solid #95020a;
  position: absolute;
  display: none;
  z-index: 900;
}

.arrow-left-1 {
  left: 58%;
  top: 138%;
}

jQuery:

$('#menu-item-1837' ).hover(
    function(){
        $(this).children('.sub-menu').fadeIn('medium');
        $('.arrow-left-1').show();
        $('.arrow-left-2').show();
        $('.arrow-left-3').show();
        $('.arrow-left-4').show();
        $('.arrow-left-5').show();
    },
    function(){
        $(this).children('.sub-menu').fadeOut('medium');
        $('.arrow-left-1').hide();
        $('.arrow-left-2').hide();
        $('.arrow-left-3').hide();
        $('.arrow-left-4').hide();
        $('.arrow-left-5').hide();
    }
);

【问题讨论】:

标签: jquery html css wordpress


【解决方案1】:

您可以使用 :after:before 选择器将箭头添加为“内容”,而不是为每个箭头创建一个新的 div。

http://www.w3schools.com/cssref/sel_after.asp

编辑:根据您使用 WordPress 的代码 - 因此无需添加 Javascript/jQuery 即可将元素添加到您的子菜单。

查看 WordPress 创建的代码并使用提供的元素添加 CSS 箭头。

ul.sub-menu li.menu-item-has-children:after {
content:'>';
color:#fff;
}

这只是一个小示例,但可以使用它来自定义您的元素。 希望这会有所帮助

【讨论】:

  • 我不太确定这将如何避免悬停问题?你能详细说明一下吗?
  • 哦,抱歉 - 仍然习惯这一点 - 我认为您只是为人们指出正确的方向以实际帮助他们找出答案,而不仅仅是给他们直接复制和粘贴的答案。
  • 这是正确的方法,但是 OP 在他的代码中相当混乱,你真的应该提供一个关于做什么的答案,而不仅仅是使用什么。
  • 我从来没有要求直接复制和粘贴答案?我只是在问这将如何改变任何事情,因为它仍然会将项目添加为元素?它被称为理论。
  • 你不给他们复制和粘贴答案,但想象你不知道如何处理任何新功能,有人说这是你需要的,但仅此而已,但这对你有帮助吗?它没有,因此你的答案是非常可改进的! :)
【解决方案2】:

删除硬编码的箭头并将:after 伪元素添加到您的类menu-item-has-children

您可以相应地设置箭头的样式。

.menu-item-has-children::after { 
    content: "";    
    border-top: 5px solid transparent;
    border-bottom: 5px solid transparent;
    border-left: 5px solid #95020a;
    float: right;
}

要选择悬停的类,请像这样选择:

.menu-item-has-children:hover::after {
    border-left-color: white;
}

您可以看到一个小的工作示例here

【讨论】:

  • 它来了!他们出现了,现在只是完善他们的地位的一个例子。它似乎也不影响完美的 jQuery 下拉菜单。队友的欢呼声。 (:
  • 看起来正是您所需要的!我的小提琴固定了高度,但这应该是最小的问题。
  • Margin-top: -25px 为我排序,正是我需要的!现在我只需要做到这一点,当您从下拉菜单移动到子项目时,箭头会停留在下拉菜单上。但是由于您的详尽解释,我相信我现在了解选择器之前和之后的工作方式,并且我自己对此充满信心!再次感谢。 (:
  • 完全没问题!它应该留在那里,因为类不会被删除;因此::after 元素应该保留,它只是没有:hover CSS 属性,因为您现在不再悬停父列表。
  • 应该像下面这样工作吗?由于 after 元素仅在您奇怪地移回父列表时才返回: ul.sub-menu li.menu-item-has-children-has-children:hover:before { content: "";边框顶部:5px 纯透明;边框底部:5px 纯透明;左边框:5px 实心#95020a;浮动:对; }
【解决方案3】:

我认为您已经找到了问题的解决方案,因为它似乎在您的网站上运行良好。如果没有,请告诉我们。

【讨论】:

  • 它不适合我吗? :(
  • 这里仍然没有运气,当您将鼠标悬停在下拉菜单上的箭头上时,当光标不再悬停在箭头上时它就会出错
  • 好吧,你的代码肯定有一些兼容性问题,因为我使用的是最新版本的 Chrome 并且子菜单不会消失,即使是片刻。
  • 现在也在 IE Edge 上进行了测试...最新版本...如果您遇到此问题,请尝试使用 Javascript 与 jquery 相同...对我来说,我没有看到任何问题在代码或 CSS 中...我认为您刚刚删除了箭头...
  • @AruBasu 我现在已经解决了这个问题并评价了最佳答案,为寻找无论如何队友而欢呼。您可能在我进行故障排除时正在检查该页面,因此您正在查看我删除箭头 div 的时间。
猜你喜欢
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多