js关闭下拉菜单的优雅方式

正文开始

传统做法: 1.全局绑定鼠标点击事件,向上查找对象,如果点击的对象中不包含当前对象则关闭。例子:某editor编辑器 2. 全局队列写入当前菜单 点击body时 一次遍历关闭。 优雅一点: 利用btn或input的focus和blur事件。以下简称这个对焦的按钮为btn。 下拉菜单监听鼠标经过和移出动作,记录状态为临时变量:mouseIsHover; 展开下拉菜单时 给btn对焦; btn丢焦时判断鼠标是否在下拉菜单里面(mouseIsHover),在菜单里(mouseIsHover==true)则执行强制恢复btn的对焦,便于下次监听到blur事件, 不在菜单里(mouseIsHover==false)则执行500毫秒后关闭菜单,因为点击链接或其他dom时会有一定响应延时。 参考代码 ~~~ obj._rlMenu = $('
'); $('body').append(obj._rlMenu); var mouseIsHover = false; obj._rlMenu.on({ 'mouseenter': function () { mouseIsHover = true; }, 'mouseleave': function () { mouseIsHover = false; }, }) riliInput.on({ 'blur': function () { if(!mouseIsHover) { setTimeout(function () { obj._rlMenu.hide(); }, 100); } else { //每次选择 要给按钮对焦 这样鼠标点击外部就可以触发关闭下拉层 riliInput.focus(); } }, }); ~~~

正文结束

js 正则替换返回值做回调函数 jquery.scrollify.1.0.9.js 屏幕会抖动的问题 与使用方法