在鼠标移出后保持子菜单处于活动状态
在鼠标移出后保持子菜单处于活动状态
当用户将鼠标悬停在我的水平菜单上时,我如何保持子菜单打开,直到悬停在另一个菜单项上?以下是源代码:\nHTML\n
\nCSS\n
#nav { width:100%; margin:0; padding:12px 0 4px 0; height:30px; position:relative; } #nav li { float:left; list-style:none; display:inline } #nav a { text-decoration:none; } #nav li ul li a { margin:0 } #nav .active a, #nav li:hover>a { background:#ac2024; color:#fff; } #nav li a:hover, #nav ul a:hover { background:#ac2024; color:#fff } #nav ul { position:absolute; left:0; height:27px; width:100%; display:none; } #nav li:hover>ul { display: inline; } #nav ul a { width:100% } #nav:after { content:"."; display:inline; clear:both; visibility:hidden; height:0 } #nav { display:inline-block }
\n如果使用CSS无法实现,如何使用jQuery来实现?谢谢。
这个问题的出现原因是无法通过CSS单独实现。可以通过在li项目上添加'hover-class'类来解决,使用jQuery来实现。当鼠标悬停在新菜单项上时,添加'hover-class'类到新项目,并从旧项目上移除。在JavaScript中跟踪最后一个悬停的项目,并根据这个数据来操作视图。希望能有人能用纯CSS解决这个问题。以下是解决方案:
$(document).ready(function(){ var lastHoveredItem = null; $("li").hover(function(){ if(lastHoveredItem){ $(lastHoveredItem).removeClass("hover-class"); } $(this).addClass("hover-class"); lastHoveredItem = this; }); });
问题出现的原因:
这个问题是因为在移动设备上无法使用hover事件,而该代码中使用了hover事件来控制子菜单的显示和隐藏。因此,在移动设备上无法保持子菜单的激活状态。
解决方法:
为了在移动设备上也能实现子菜单的激活状态,需要基于点击事件来实现。可以通过添加点击事件的代码来解决这个问题。
以下是代码示例:
$("#hover1").on("click", function () { $("#visible1").addClass("result_hover"); $("#visible2").removeClass("result_hover"); }); $("#hover2").on("click", function () { $("#visible2").addClass("result_hover"); $("#visible1").removeClass("result_hover"); });
需要注意的是,在移动设备上,由于无法使用hover事件,点击事件将会替代hover事件来控制子菜单的显示和隐藏。因此,在移动设备上点击父菜单将会显示对应的子菜单,再次点击父菜单将会隐藏子菜单。而在桌面设备上,仍然可以通过鼠标的悬停来实现子菜单的显示和隐藏。