我有一个带有两个div和一些UL的导航。我想隐藏第二列,使其仅在悬停时显示。此外,它应该只显示UL,属性“data-category-id”与“data-parent-category-id”相同。由于某些原因,这超出了我的能力,我需要使用jQuery来制作。一些平滑的动画也会很好。
这是我已经创建的一段代码,但它显然有一些问题。由于某种原因,当我鼠标输入应该使第二列出现的元素时,它一直显示和隐藏。
const itemLevelOne = $('.cs-navigation__item--level_1');
const itemLevelTwo = $('.cs-navigation__item--level_2');
const menuLevelThree = $('.cs-navigation__column___third');
itemLevelTwo.hide();
menuLevelThree.hide();
itemLevelOne.mouseenter(function () {
var attr = $(this).attr('data-category-id');
if (typeof attr !== 'undefined' && attr !== false) {
itemLevelTwo.each(function () {
if ($(this).attr('data-parent-category-id') === attr) {
$(this).show('200');
menuLevelThree.show('200');
} else {
$(this).hide('200');
menuLevelThree.hide('200');
}
});
}
});
我还创建了一个codepen与一些HTML代码,所以它是很相似的,我在我的网站上。第二列应该只出现当你在“埃尔悬停”和“埃尔悬停2”。在任何其他情况下,它应该隐藏。
https://codepen.io/bordini/pen/GRXgNEo
希望有一些善良的灵魂能够帮助我解决这个问题。非常感谢!
1条答案
按热度按时间9gm1akwq1#
您的问题是您将级别2的
<UL>
封装在<DIV>
中,cs-navigation__column___third
类(HTML第24行),因此它是menuLevelThree
的一部分。您将menuLevelThree
保存在级别2的每个项目的事件处理程序中,show()
和hide()
-ing,这就是整个级别2菜单 Flink 的原因。也许你把三级分区放错地方了
我注解掉了事件处理程序中的
menuLevelThree
操作,并更改了对.show()
的第一个调用,使其最初可见,现在显示二级菜单,现在还需要实现mouseleave
事件处理程序来隐藏二级菜单。哦,如果你愿意使用jQuery-UI,你可以考虑https://jqueryui.com/menu/小部件--这样你就不需要手动处理菜单项的显示和隐藏了。但是我认为你需要分层地构建你的菜单结构(第2层是顶层的子层,第3层是第2层的子层)。