您现在的位置是:知识 >>正文

jQuery宽屏网站下拉导航菜单代码

知识5883人已围观

简介 下拉菜单这玩意儿,做宽屏网站时最容易翻车。屏幕越宽,hover路径越长,鼠标稍微抖一下菜单就缩回去了,用户能气得砸键盘。jQuery在这块儿有个老本事——用mouseenter和mouseleave ...

下拉菜单这玩意儿,宽屏做宽屏网站时最容易翻车。网站屏幕越宽,下拉hover路径越长,导航代码鼠标稍微抖一下菜单就缩回去了,菜单用户能气得砸键盘。宽屏jQuery在这块儿有个老本事——用mouseenter和mouseleave替代mouseover/mouseout,网站前者不会因为子元素冒泡而误触发,下拉后者会。导航代码这区别就是菜单菜单稳定性的命门。

先看HTML骨架。宽屏导航栏用ul嵌套ul,网站外层li加个类名has-sub,下拉内层ul默认display:none。导航代码宽屏下最忌讳用display:block直接切换,菜单因为瞬间出现会切断hover的视觉连续性,用户会感觉“菜单是跳出来的”。

 <nav id="mainNav"> <ul> <li><a href="#">首页</a></li> <li class="has-sub"> <a href="#">产品中心</a> <ul class="dropdown"> <li><a href="#">智能硬件</a></li> <li><a href="#">软件服务</a></li> </ul> </li> </ul> </nav> 

CSS部分要处理两个关键点:一是下拉层绝对定位后要设min-width:100%,防止子项文字折行把宽度撑碎;二是加个transition-delay。这招挺贼——给下拉菜单设transition: opacity 0.2s ease 0.15s,鼠标移出时延迟0.15秒再隐藏,给用户留出“后悔时间”。宽屏上鼠标从父项斜着滑向子项时,经常有0.1秒的悬空期,这延迟正好补上。

jQuery代码别写复杂了。核心逻辑就三件事:

 $('#mainNav .has-sub').on('mouseenter', function() {  var $sub = $(this).children('.dropdown'); $sub.stop(true, true).fadeIn(150); $(this).addClass('active'); }); $('#mainNav .has-sub').on('mouseleave', function() {  var $sub = $(this).children('.dropdown'); $sub.stop(true, true).delay(150).fadeOut(100); $(this).removeClass('active'); }); 

注意那个stop(true, true),必须带。不带的话,鼠标快速在多个菜单间滑动,动画队列会堆积,菜单会像抽风一样反复闪。第二个参数true强制跳到动画最终状态,避免半透明卡死的bug。

还有个细节很多人忽略——下拉菜单里的链接点击后,菜单不会自动收回去。宽屏用户习惯点完菜单立刻看到内容,如果菜单还挂着,新页面加载时会闪一下。补个点击事件:

 $('.dropdown a').on('click', function() {  $(this).closest('.has-sub').removeClass('active'); $(this).closest('.dropdown').hide(); }); 

最后说个实战案例。之前给某设备厂商做官网,导航栏有“解决方案”这个大分类,下面挂了12个子项。最初用纯CSS的:hover,结果在4K屏上,鼠标从父项挪到最右侧子项要跨过200多像素的空白区,菜单中途就消失了。改成jQuery的延迟隐藏后,用户投诉直接清零。但延迟别设太长,超过0.2秒会让人觉得界面迟钝,0.15秒是个甜点值。

宽屏导航的坑远不止这些。如果页面有横向滚动条,下拉菜单定位会飘。记得给.dropdown加position:relative的父容器,并且用left:0而不是right:0,因为右侧子项文字长时容易溢出屏幕。用jQuery的outerWidth()动态判断一下,如果子菜单右边界超出视口,就改成靠右对齐。这种边角处理,才真正考验代码的健壮性。

Tags:

相关文章

  • 90后男子相亲被骗2039元

    知识

    李强把手机屏幕怼到我眼前时,我正嚼着半根油条。聊天记录里那个姑娘说“哥哥再转2000我就跟你回家”,他真转了,连砍价都没砍。 这哥们儿32岁,在苏州电子厂拧了八年螺丝,相过十七次亲,每次都被女方以“没 ...

    【知识】

    阅读更多
  • option渗透

    知识

    OPTION请求打到10.10.10.5的80端口,返回了一个302。跳转地址是http://10.10.10.5:8080/。我盯着Burp里的响应包看了两秒,把请求方法从GET改成OPTIONS, ...

    【知识】

    阅读更多
  • 漏洞打补丁

    知识

    凌晨两点,安全团队的值班手机响了。一个跑了三年的老系统,突然在某个接口上返回了不该返回的数据。查日志、复现、定位,前后不到四十分钟,问题出在一段看起来毫无破绽的权限校验代码上——它默认所有请求都来自可 ...

    【知识】

    阅读更多


友情链接