作者:beitianmolang | 来源:互联网 | 2022-06-20 20:27
我们利用 Vue.js 的自定义指令能力,来实现一个自定义下拉菜单功能。描述如下:
- 点击按钮,弹出下拉菜单。
- 点击下拉菜单之外的区域,关闭下拉菜单。
1基础版
html:
2 ESC 关闭
现在让我们做个优化,即在按下键盘的 ESC 键时,也能关闭下拉菜单。
js:
bind: function (el, binding, vnode) {
function clickHandler(e) {
if (el.contains(e.target) && e.keyCode !== 27) {
return false;
}
...
}
...
document.addEventListener('keyup', clickHandler, false);//绑定键盘事件
},
unbind: function (el, binding, vnode) {
...
document.removeEventListener('keyup', el.vueOutsideClick);//解绑
...
}
在 bind 函数中,强化了判断,如果点击区域在所在指令元素内部并且没有按下 ESC 键时,才直接返回。即按下 ESC 键时,会执行后续操作(执行表达式中的函数)。
在 unbind 函数中,也解绑了 keyup 事件。
效果:
3 ESC 为可选项
我们可以把 ESC 作为可选项,而这可以通过修饰符来实现。
js:
bind: function (el, binding, vnode) {
//定义点击函数
function clickHandler(e) {
//是否开启开关
var escSwitch = (binding.modifiers && binding.modifiers.esc);
if (el.contains(e.target)) {//如果点击区域在所在指令元素内部时
if (escSwitch && e.keyCode === 27) {//带有了 esc 修饰符,则让程序往下执行
} else {//直接返回
return false;
}
}
if (binding.expression) {//如果定义了表达式,则执行表达式中的函数
binding.value(e);
}
}
...
}
我们通过 binding.modifiers 来判断自定义指令是否设置了 esc 修饰符,然后以此为基础,来编写后续逻辑。
html:
本文示例代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ...
[详细]
蜡笔小新 2024-11-22 18:00:41
-
探讨了在HTML表单中使用元素代替进行表单提交的方法。 ...
[详细]
蜡笔小新 2024-11-22 17:48:42
-
-
探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ...
[详细]
蜡笔小新 2024-11-22 09:26:11
-
在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ...
[详细]
蜡笔小新 2024-11-21 19:57:43
-
本文介绍了如何利用jQuery实现对网页上多个div元素的显示与隐藏控制,包括基本的toggle方法及更复杂的显示隐藏逻辑。 ...
[详细]
蜡笔小新 2024-11-21 19:38:53
-
本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ...
[详细]
蜡笔小新 2024-11-21 18:50:46
-
本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ...
[详细]
蜡笔小新 2024-11-21 18:11:20
-
本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ...
[详细]
蜡笔小新 2024-11-20 14:13:38
-
本实验旨在对比Telnet和SSH两种安全通信协议的服务差异,并通过搭建服务器和使用Wireshark抓包工具进行详细分析。 ...
[详细]
蜡笔小新 2024-11-18 14:10:59
-
本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ...
[详细]
蜡笔小新 2024-11-17 20:50:03
-
在开发板的启动选项中看到如下两行:7:LoadBootLoadercodethenwritetoFlashviaSerial.9:LoadBootLoadercodethenwri ...
[详细]
蜡笔小新 2024-11-17 08:51:52
-
本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ...
[详细]
蜡笔小新 2024-11-13 15:40:34
-
当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ...
[详细]
蜡笔小新 2024-11-22 14:17:44
-
本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ...
[详细]
蜡笔小新 2024-11-22 13:03:49
-
Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ...
[详细]
蜡笔小新 2024-11-19 09:56:22
-
beitianmolang
这个家伙很懒,什么也没留下!