亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

原生JS事件詳解

2024-04-27 15:06:47
字體:
來源:轉載
供稿:網友

什么是事件

事件三要素(事件源、事件、監聽器) 事件源:在哪個元素上發生的,p、a、div、form表單 事件:到底發生了什么事件,click、mouSEOver、load、submit、focus 監聽器:如何應對事件的發生,如何回應發生的事件,通常以函數的形式來出現

你未必理解的事件概念 事件實際上應該稱之為事件模型,事件本身只是一個單純的行為。 事件不是以 on 開頭的那個名稱,如onclick不是事件,click才是事件。onclick引用的是一個元素對象的屬性,它指向click事件類型綁定的實際處理函數。

通過鼠標、鍵盤對瀏覽器頁面所做的動作就是事件。 事件一旦發生需要有事件處理,該處理稱為“事件驅動”,事件驅動通常由函數擔任 onclick:鼠標點擊 onmouseover:鼠標移入 onmouseout:鼠標移出 onkeyup:鍵盤按下并抬起 onkeydown:鍵盤按下 onchange:內容改變 onblur:失去焦點 onfocus:獲得焦點 onsubmit:表單提交 …

在DOM中,有如下幾種方式: DOM 0級,以屬性的方式直接寫在行內。一般不推薦。 DOM 1級,給元素添加屬性,屬性的值就是一個具體的函數。用的比較多,好處就是兼容所有的瀏覽器,寫起來簡單。它的功能相對要弱一些,不利于團隊開發。 下面介紹下DOM2級操作

設置事件

1) 主流瀏覽器方式(包括IE9以上 版本瀏覽器): itnode.addEventListener(事件類型,事件處理[,事件流]); //設置 itnode.removeEventListener(事件類型,事件處理[,事件流]); //取消

2) IE瀏覽器方式(IE6/7/8): itnode.attachEvent(事件類型,事件處理); //設置 itnode.detachEvent(事件類型,事件處理); //取消

事件類型:就是我們可以設置的具體事件,例如onclick/onmouseover等 主流瀏覽器方式沒有”on標志”,例如addEventListener(‘click’,…); IE瀏覽器方式有”on”標志,例如attachEvent(‘onclick’)

事件處理:事件驅動,可以是一個有名/匿名 函數 例如addEventListener(‘click’,function(){}/有名函數);

事件流:true捕捉型、[false冒泡型]

事件取消(removeEventListener/detachEvent)操作具體要求: ① 事件處理 必須是有名函數,不可以是匿名函數。 ② 事件取消的參數與綁定的參數完全一致(數量/內容)

特點: ① 可以為同一個對象設置多個同類型事件。 ② 事件取消也非常靈活。 ③ 對事件流也有很好的處理控制。

<h2>事件設置</h2><script>//追加事件 var dv=document.getElementsByTagName('h2')[0]; dv.addEventListener('click',function(){ //事件處理過程 dv.style.backgroundColor='lightblue'; }); dv.addEventListener('click',over); function over(){ console.log("單擊事件觸發了"); }//事件取消 dv.removeEventListener('click',over); //原來的動作不再觸發</script>

效果圖(圖中下面網址是水印): 事件增加和刪除

事件流

多個彼此嵌套元素,他們擁有相同的事件,最內部元素事件被觸發后,外邊多個元素的同類型事件也會被觸發,多個元素他們同類型事件同時執行的效果稱為“事件流”. 圖解: 事件流圖解 事件流分為兩種類型: 冒泡型:事件從內部往外部依次執行。false 捕捉型:事件從外部往內部依次執行。ture //addEventListener(類型,處理,事件流true捕捉/[false冒泡]);

<h2>事件流效果</h2><div> <p> <span>Today is very good</span> </p></div><script>var dv=document.getElementsByTagName('div')[0];var p=document.getElementsByTagName('p')[0];var sp=document.getElementsByTagName('span')[0];dv.addEventListener('click',function(){ console.log('I am div');},true);p.addEventListener('click',function(){ console.log('I am p');},true);sp.addEventListener('click',function(){ console.log('I am sp');},true);</script>

效果圖: 事件流效果圖

如果上面代碼后面第三個參數不是true,是默認或者false是這如下結果: 冒泡型事件流

事件對象

事件對象,每個事件(包括鼠標、鍵盤事件)觸發執行的過程中,都有對應的事件對象,通過事件對象可以獲得鼠標相對頁面的坐標信息、通過事件對象也可以感知什么鍵子被 觸發執行、通過事件對象還可以阻止事件流產生、阻止瀏覽器默認動作。

獲得事件對象

①主流瀏覽器(IE9以上版本瀏覽器): 事件處理函數的第一個形參就是 事件對象 例如: node.onclick = function(evt){evt就是事件對象} addEventListener(類型,function(evt){}/函數名字); function 函數名稱(evt){} //evt就是事件對象

② IE(6/7/8)瀏覽器 node.onclick = function(){window.event事件對象} //全局變量event就是事件對象

全局變量直接上級對象是window。可以通過window訪問全局變量信息。 window.document.getElementById();

事件對象作用

1) 獲得鼠標的坐標信息 event.clientX/clientY; //相對dom區域坐標 event.pageX/pageY; //相對dom區域坐標,給考慮滾動條距離 event.screenX/screenY; //相對屏幕坐標

<div>Today is very good</div><script>var dv=document.getElementsByTagName('div')[0];dv.onclick=function(evt){ //相對于dom區域坐標 console.log(evt.clientX+"---"+evt.clientY); //相對于dom區域坐標,計算滾動條 console.log(evt.pageX+"---"+evt.pageY); //相對于屏幕坐標 console.log(evt.screenX+"---"+evt.screenY);}</script>

阻止事件流

event.stopPRopagation(); //主流瀏覽器window.event.cancelBubble = true; // IE(678)瀏覽器 冒泡型、捕捉型都可以進行阻止,為了阻止比較有意義,只考慮冒泡型即可。

<h2>事件流效果</h2><div> <p> <span>Today is very good</span> </p></div><script>var dv=document.getElementsByTagName('div')[0];var p=document.getElementsByTagName('p')[0];var sp=document.getElementsByTagName('span')[0];dv.addEventListener('click',function(evt){ console.log('I am div'); evt.stopPropagation(); //阻止事件流});p.addEventListener('click',function(){ console.log('I am p'); evt.stopPropagation(); //阻止事件流});sp.addEventListener('click',function(){ console.log('I am sp'); evt.stopPropagation(); //阻止事件流});</script>

效果圖: 阻止事件流

感知被觸發鍵盤鍵子信息

event.keyCode 獲得鍵盤對應的鍵值碼信息 通過事件觸發時候獲得的keyCode數值碼信息可以對應鍵盤的鍵子信息。

<h2>事件對象作用</h2><input type="text" id="username"><script>//感知被觸發鍵子信息var it = document.getElementById('username');it.addEventListener('keydown',function(evt){ //alert(evt); //[object KeyboardEvent] var num=evt.keyCode; //獲得被觸發鍵子的"數值碼" console.log(num);});</script>

阻止瀏覽器默認動作

瀏覽器默認動作,注冊form表單頁面,提交表單的時候,瀏覽器的頁面會根據action屬性值進行跳轉,這個動作稱為“瀏覽器默認動作”。

form表單提交的時候,需要對各個表單域進行驗證,如果驗證失敗則禁止瀏覽器跳轉。

event.preventDefault(); //主流瀏覽器(dom1和dom2級事件都起作用) event.returnValue = false; //IE(678)瀏覽器 return false; //dom1級事件設置起作用

<form method='post' action='./1.php'> 密碼:<input type="passWord" name="pwd"><br /> <input type="submit" value="注冊"></form><script>var fm=document.getElementsByTagName('form')[0];fm.addEventListener('submit',function(evt){ alert('密碼不對!'); evt.preventDefault();});</script>

加載事件onload

js代碼執行時候,需要html&CSS的支持,就讓html代碼先執行(先進入內存),js代碼后執行 js代碼在最后執行的過程就是“加載過程”,通常通過“加載事件”實現加載過程

加載事件onload可以保證js代碼后于html&css執行,其要在最后執行。 具體設置:

<body onload=”加載函數()”>window.onload = 匿名/有名 函數; //推薦

備注

如果使用dom1級操作要注意如下2點:

<h2 id='h'>today is good</h2><script> var obj=document.getElementById("h"); function f1(){ console.log("事件被觸發了!"); } //這里函數傳地址不帶括號就寫函數名字 h.onclick=f1; </script><!--這里函數傳地址帶括號帶引號--><h2 id='h' onclick="f1()">today is good</h2><script> var obj=document.getElementById("h"); function f1(){ console.log("事件被觸發了!"); } </script>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国内亚洲在观看18黄| 懂色aⅴ精品一区二区三区蜜月| 国产精品美女www爽爽爽视频| 久久久av网站| 久久精品国产成人精品| 色偷偷综合社区| 国产精品视频xxxx| 精品色蜜蜜精品视频在线观看| 欧美大学生性色视频| 亚洲国产精品电影| 欧美成人在线免费视频| 91久久精品国产| 国产在线观看91精品一区| 中文字幕日韩av综合精品| 日韩欧美国产网站| 国产精品入口日韩视频大尺度| 欧美激情国产高清| 中文字幕在线成人| 日韩麻豆第一页| 91禁外国网站| 欧美国产在线电影| 久久天天躁狠狠躁夜夜av| 色中色综合影院手机版在线观看| 日韩av免费在线播放| 久久精品99久久久久久久久| 欧美色视频日本高清在线观看| 91精品国产综合久久香蕉最新版| 一区二区欧美在线| 亚洲日韩欧美视频一区| 欧美极度另类性三渗透| 日韩在线观看免费全| 91国产精品电影| 国产精品视频精品| 7777精品久久久久久| 久精品免费视频| 亚洲jizzjizz日本少妇| 精品亚洲一区二区三区| 亚洲美女在线视频| 欧美在线性爱视频| 成人免费网站在线| 欧美丝袜美女中出在线| 国产亚洲欧洲黄色| 操日韩av在线电影| 日韩av影视综合网| 国产在线视频2019最新视频| 欧美激情精品久久久久久大尺度| 欧美在线亚洲在线| 日韩av手机在线| 久久精品视频中文字幕| 国产成人91久久精品| 最近的2019中文字幕免费一页| 欧美壮男野外gaytube| 日韩电视剧在线观看免费网站| 国产偷亚洲偷欧美偷精品| 欧美精品第一页在线播放| 高清亚洲成在人网站天堂| 亚洲欧美资源在线| 成人免费直播live| 欧美在线视频网| 亚洲小视频在线观看| 日韩av电影在线播放| 欧美日韩国产黄| 亚洲人成电影网站色xx| 国产精品久久中文| 亚洲国产日韩欧美在线图片| 午夜精品久久久久久99热| 久久久免费精品| 91免费电影网站| 国产日韩欧美影视| 久久躁日日躁aaaaxxxx| 久久中文久久字幕| 欧美www视频在线观看| 久久久久免费视频| 亚洲精品久久久久中文字幕二区| 日韩激情在线视频| 欧美激情视频免费观看| 日韩欧美一区视频| 超碰97人人做人人爱少妇| 色综合久久悠悠| 久久久久久综合网天天| 亚洲自拍偷拍色图| 亚洲午夜av电影| 精品人伦一区二区三区蜜桃网站| 97精品久久久| 日韩久久精品电影| 最新亚洲国产精品| 国产精品一区久久| 欧美成人高清视频| 欧美亚洲伦理www| 日本sm极度另类视频| 国产精品成人av在线| 欧美精品videosex性欧美| 亚洲美女久久久| 欧美又大又粗又长| 欧美肥老妇视频| 日韩激情第一页| 欧美尤物巨大精品爽| 欧美一区二区大胆人体摄影专业网站| 日本欧美黄网站| 精品福利一区二区| 久久99久久99精品中文字幕| 亚洲精品美女免费| 亚洲久久久久久久久久久| 日韩一级裸体免费视频| 欧美亚洲在线播放| 欧美在线视频免费观看| 亚洲国产欧美在线成人app| 中文字幕一区二区三区电影| 欧美高清视频免费观看| 亚洲2020天天堂在线观看| 国产97在线观看| 一本色道久久综合狠狠躁篇怎么玩| 日韩欧美亚洲一二三区| 亚洲人成电影在线播放| 91九色单男在线观看| 一区国产精品视频| 久久久久久久一区二区三区| 亚洲国产中文字幕在线观看| 97国产真实伦对白精彩视频8| 色哟哟亚洲精品一区二区| 久久久久久久久亚洲| 亚洲国产精品va在线| 亚洲大胆人体av| 亚洲国产一区二区三区四区| 亚洲成人av中文字幕| 久久影视电视剧免费网站清宫辞电视| 国产午夜精品全部视频在线播放| 国产日韩精品电影| 欧美激情欧美激情在线五月| 欧美黄色免费网站| 91国产高清在线| 欧美另类极品videosbest最新版本| 九九久久综合网站| 欧美情侣性视频| 日韩中文在线不卡| 国产欧美欧洲在线观看| 欧洲午夜精品久久久| 久久精品国产96久久久香蕉| 久久夜精品香蕉| 欧美日韩亚洲91| 97在线视频免费播放| 久久久久久美女| 欧美人与性动交| 亚洲全黄一级网站| 成人激情电影一区二区| 久久久久久久网站| 亚洲色图欧美制服丝袜另类第一页| 国产精品 欧美在线| 久久人91精品久久久久久不卡| 国产一区二区黄| 久久6精品影院| 亚洲人成77777在线观看网| 成人福利网站在线观看| 欧美www在线| 久热精品视频在线观看一区| 欧美日韩亚洲精品一区二区三区| 欧美激情久久久久久| 欧美成人免费大片| 亚洲国产精品久久久久久| 久久久精品免费| 欧美成年人视频网站欧美| 国产精品成人一区二区| 成人在线小视频| 国产精品扒开腿做爽爽爽的视频|