vue短文:如何在Vue.js中檢測在元素外的點(diǎn)擊?(vue判斷點(diǎn)擊了哪個按鈕)
vue短文:如何在Vue.js中檢測在元素外的點(diǎn)擊?(vue判斷點(diǎn)擊了哪個按鈕)
轉(zhuǎn)載說明:原創(chuàng)不易,未經(jīng)授權(quán),謝絕任何形式的轉(zhuǎn)載
有時候,我們想要在Vue.js中檢測元素外的點(diǎn)擊。在本文中,我們將探討如何使用Vue.js檢測元素外的點(diǎn)擊。
使用Vue.js檢測元素外的點(diǎn)擊
我們可以通過創(chuàng)建自定義指令來檢測Vue.js中元素外的點(diǎn)擊。比如,我們可以這樣編寫:
<template> <!-- 創(chuàng)建一個寬度和高度為 500px 的 DIV,ID 為 "app" --> <div id="app" style="width: 500px; height: 500px"> <!-- 該 DIV 使用了自定義指令 v-click-outside,用來監(jiān)聽點(diǎn)擊元素外部的事件 --> <div v-click-outside="onClickOutside">hello world</div> </div></template><script> // 導(dǎo)入 Vue 庫 import Vue from "vue"; // 創(chuàng)建一個自定義指令 "click-outside" Vue.directive("click-outside", { // 當(dāng)指令綁定到元素時,會立即調(diào)用 bind 函數(shù) bind(el, binding, vnode) { // 創(chuàng)建一個函數(shù)來處理點(diǎn)擊事件 el.clickOutsideEvent = (event) => { // 如果點(diǎn)擊的不是元素本身,也不是其內(nèi)部的任何元素,那么就觸發(fā)綁定的函數(shù) if (!(el === event.target || el.contains(event.target))) { // 在 Vue 實(shí)例上執(zhí)行綁定的函數(shù) vnode.context[binding.expression](event); } }; // 在 body 元素上添加 click 事件監(jiān)聽器 document.body.addEventListener("click", el.clickOutsideEvent); }, // 當(dāng)指令與元素解除綁定時,會立即調(diào)用 unbind 函數(shù) unbind(el) { // 移除在 body 元素上的 click 事件監(jiān)聽器 document.body.removeEventListener("click", el.clickOutsideEvent); }, }); // 導(dǎo)出 Vue 實(shí)例 export default { name: "App", // 組件名 methods: { // 自定義一個方法來處理點(diǎn)擊元素外部的事件 onClickOutside() { console.log("clicked outside"); // 控制臺輸出信息 "clicked outside" }, }, };</script>
使用 Vue.directive 方法來添加自定義指令,該方法使用指令名稱和一個對象作為參數(shù),該對象具有 bind 和 unbind 方法以在 bind 方法中添加 el 方法。
在 clickOutsideEvent 方法中,我們檢查 el 是否不是 event.target 并且它不包含 event.target。
如果都為 true,則添加 vnode.context[binding.expression](event); 來運(yùn)行我們設(shè)置為 v-click-outside 指令值的方法。
然后,我們調(diào)用 document.body.addEventListener 來添加一個點(diǎn)擊事件監(jiān)聽器以運(yùn)行 clickOutsideEvent。
在 unbind 方法中,我們使用 removeEventListener 來刪除事件監(jiān)聽器。
然后,在模板中,我們添加 v-click-outside 并將其值設(shè)置為 onClickOutside,以在單擊外部時運(yùn)行該方法。
當(dāng)我們單擊外部時,應(yīng)該看到“clicked outside”被記錄。
結(jié)束
我們可以通過創(chuàng)建自定義指令來檢測 Vue.js 中元素外的點(diǎn)擊。這段 Vue.js 代碼中的自定義指令 "v-click-outside" 主要用于處理點(diǎn)擊元素外部的事件。這種功能在很多應(yīng)用場景中都非常有用,以下是一些具體的示例:
- 下拉菜單(Dropdown)或模態(tài)窗口(Modal): 當(dāng)用戶點(diǎn)擊下拉菜單或模態(tài)窗口的外部區(qū)域,我們通常期望下拉菜單或模態(tài)窗口會關(guān)閉。這就需要檢測用戶是否點(diǎn)擊了元素的外部,如果是,那么就觸發(fā)一個函數(shù)來關(guān)閉下拉菜單或模態(tài)窗口。
- 上下文菜單(Context Menu): 在右鍵打開的上下文菜單中,當(dāng)用戶點(diǎn)擊菜單外的其他地方時,通常需要關(guān)閉這個菜單。同樣可以使用這個自定義指令來監(jiān)聽點(diǎn)擊事件,并在點(diǎn)擊事件發(fā)生在菜單外部時,關(guān)閉上下文菜單。
- 工具提示(Tooltip): 工具提示也有類似的需求。當(dāng)工具提示展示時,如果用戶點(diǎn)擊了工具提示以外的其他地方,我們通常希望工具提示會消失。
- 表單驗(yàn)證(Form Validation): 在某些場景下,你可能希望用戶在完成輸入并且點(diǎn)擊輸入框外部時,進(jìn)行表單驗(yàn)證。你可以利用這個指令來實(shí)現(xiàn)這種效果。
- 搜索自動完成(Search Autocomplete): 在搜索框輸入時,會出現(xiàn)一個自動完成的下拉菜單。當(dāng)用戶在選中某個搜索建議或者點(diǎn)擊搜索框以外的地方時,我們通常需要關(guān)閉這個自動完成的菜單。
在上述所有場景中,通過 "v-click-outside" 這個自定義指令,你可以非常簡單地處理點(diǎn)擊元素外部的事件,進(jìn)而實(shí)現(xiàn)你的交互需求。
由于文章內(nèi)容篇幅有限,今天的內(nèi)容就分享到這里,文章結(jié)尾,我想提醒您,文章的創(chuàng)作不易,如果您喜歡我的分享,請別忘了點(diǎn)贊和轉(zhuǎn)發(fā),讓更多有需要的人看到。同時,如果您想獲取更多前端技術(shù)的知識,歡迎關(guān)注我,您的支持將是我分享最大的動力。我會持續(xù)輸出更多內(nèi)容,敬請期待。