JavaScript——除指定區域外點選任何地方隱藏DIV
效果實現:
點選按鈕選單出現: 點選選單外則收起選單:
開啟選單效果:給"新建“新增onclick屬性,使選單display="block"顯現
關閉選單效果:使選單display="none"隱藏
全部程式碼(程式碼之後有詳解):
document.addEventListener("click",clickHidden);//所有元件新增點選事件 var mn=document.getElementById('menu');//獲取選單節點,選單id為menu function clickHidden(eve) { if( eve.target.id!="menu" )//點選的如果不是選單,選單隱藏。如果是選單,選單顯現 mn.style.display="none"; }
我們如何判斷是否點選了選單之外的地方呢?
這裡我們想到一個辦法,給窗體所有元件新增事件,當點選時,使選單display="none"。當點選的是選單時,便使選單display="block"
這裡我們使用到的方法是addEventListener()
語法
element.addEventListener(event, function, useCapture)
引數 | 描述 |
event | 必須。字串,指定事件名。
注意: 不要使用 "on" 字首。 例如,使用 "click" ,而不是使用 "onclick"。
提示: 所有 HTML DOM 事件,可以檢視我們完整的 HTML DOM Event 物件參考手冊。HTML DOM Event物件參考手冊 |
function | 必須。指定要事件觸發時執行的函式。
當事件物件會作為第一個引數傳入函式。 事件物件的型別取決於特定的事件。例如, "click" 事件屬於 MouseEvent(滑鼠事件) 物件。 |
useCapture | 可選。布林值,指定事件是否在捕獲或冒泡階段執行。 可能值:
|
我們需要監聽全頁面的單擊事件,所以我們的物件是document
document.addEventListener("click",clickHidden);
這裡我們注意有個問題:
當你給一個div設定了點選方法,這個div中還有其他元素。
那麼實際點選的時候,並沒有點選到目的div,因此無法觸發點選事件。
解決方法:
方法一:直接將點選事件繫結到可能點選到的最上層元素。
方法二:css調節z-index
首先要考慮的是更外層的元素遮擋了靠裡層的元素。比如外層遮擋為一個div(.card)被遮擋的是一個input框為(.input-space)
這時就要把遮擋它的元素的css中的z-index調的比他要低,假設:外層遮擋的類名為:card,被遮擋的input的類名為:input-space。
.card{
z-index:1;
}
.input-space{
z-index:2;
}
方法三:寫完之後看input框能不能選到(點選事件生不生效)。如果還是選不到(點選事件不生效),就在這個基礎上為card再加一層css, pointer-events:none,此css以為滑鼠事件對當前元素無效。
.card{
pointer-events: none;
}