JS基礎複習(二)一分鐘教你手寫一個通用的事件綁定函數(支持普通函數和事件代理函數)

一分鐘教你手寫一個通用的事件綁定函數(支持普通函數和事件代理函數)

一、寫在開頭
最近一直在搞小程序,有點膩了,順便複習了一下js,剛好可以寫一個比較通用的綁定事件,見笑了各位。

二、發現問題
封裝了一個綁定事件的函數,兼顧了普通函數和事件代理(多了一些對被代理元素的判斷)

三、解決問題
因爲該事件比較簡單,我就把具體的解釋直接寫在代碼的註釋中,如下:

<!DOCTYPE html>
<html>
<head>
	<title>通用事件綁定函數</title>
</head>
<body>
<script type="text/javascript">
	function bindEvent(elem,type,selector,fn){
		if(fn==null){//先判斷是普通的函數還是代理的函數
			fn=selector,
			selector=null
		}//普通函數不存在被代理的元素,而且只有三個元素,所以第四個參數fn必然爲null,原本的函數被傳到selector,故調換一下
		elem.addEventListener(type,event=>{//代理函數可以直接進入這一步,綁定事件
			const target=event.target//獲取當前執行這個事件的元素
			if(selector){//代理函數需要走這個分支做判斷,如果當前執行事件的元素確實是我們被代理的元素則可以執行函數
				if(target.matches(selector)){
					fn.call(target,event)
				}
			}else{//普通函數直接調用函數即可
				fn.call(target,event)
			}
		})//call只是爲了修改this的指向,指向當前執行事件的元素
	}
</script>
</body>
</html>

好了,目前先到這,我是O5,希望能幫助到大家,共勉!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章