最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一起深入理解js中的事件對象

 更新時間:2021年02月06日 15:17:16   作者:皮卡丘和羊?qū)氊?#128516;  
這篇文章主要給大家介紹了關(guān)于js中事件對象的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我們知道在JS中常用的事件有:

  • 頁面事件:load;
  • 焦點事件:focus,blur;
  • 鼠標(biāo)事件:click,mouseout,mouseover,mousemove等;
  • 鍵盤事件:keydown,keyup,keypress;
  • form表單事件:reset,submit;
  • 內(nèi)容變化事件:change,input

那JS中“事件對象”,到底是個什么東西?

首先,什么是事件呢?

首先說JS就是為了實現(xiàn)一些動態(tài)的操作,而用戶會有時候想去實現(xiàn)一些功能,如提交表單,鼠標(biāo)點擊等,就要在瀏覽器中觸發(fā)這個事件,然后瀏覽器會感知(或者說捕獲)到用戶的這個行為,就會去響應(yīng)處理這個事件。這個就稱之為事件。

那么說,產(chǎn)生事件對象的原因是什么?

事件的觸發(fā),大部分情況下是用戶想去操作的一種行為,也就是說,我們并不能確定用戶什么時間觸發(fā);而且,由于事件的傳播機制,我們甚至不能確定事件具體觸發(fā)在哪個節(jié)點;這是一件令人很頭疼的事情;

為了解決這個問題,在事件發(fā)生以后,系統(tǒng)會調(diào)用我們寫好的事件處理程序(一段代碼)來解決。

由此,引出了什么是事件對象?

系統(tǒng)會在調(diào)用處理程序時,把有關(guān)事件發(fā)生的一切信息,封裝成一個對象,作為參數(shù),傳送給監(jiān)聽函數(shù)(事件處理程序)。那么說這個對象,稱之為事件對象。

根據(jù)事件類型的不同,事件對象中包含的信息也有所不同;如點擊事件中,包含鼠標(biāo)點擊的橫縱坐標(biāo)位置,鍵盤事件中,包含鍵盤的鍵值等;

<body>
 <div id="div">
 <p>pppp</p>
 </div>
 <input type="text" value="" id="i">
</body>
<script>
var d = document.getElementById('div');
//鼠標(biāo)事件
d.addEventListener('click',function(e){
 console.log(e);
});
var i = document.getElementById('i');
//鍵盤事件
i.addEventListener('keydown',k);
function k(e){
 console.log(e);
}
</script>

現(xiàn)在了解了事件對象的含義后,我們來看看事件對象中都有哪些屬性和方法?

(1) 普通屬性:

event.bubbles: 返回一個布爾值,表示當(dāng)前事件是否會冒泡;

event.eventPhase:返回一個整數(shù)值,表示事件流在傳播階段的位置

0:事件目前沒有發(fā)生。
1:事件目前處于捕獲階段。
2:事件到達目標(biāo)節(jié)點。
3:事件處于冒泡階段。

event.type: 返回一個字符串,表示事件類型,大小寫敏感;

event.timeStamp: 返回一個毫秒時間戳,表示事件發(fā)生的時間;

clientX、clientY : 獲取鼠標(biāo)事件觸發(fā)的X,Y坐標(biāo)

事件對象

(2) 事件代理/委托屬性:

event.target:對事件觸發(fā)的引用,返回觸發(fā)事件發(fā)生的那個節(jié)點。(重點)

event.currentTarget:返回事件當(dāng)前所在的節(jié)點,即正在執(zhí)行的監(jiān)聽函數(shù)所綁定的那個節(jié)點。(了解即可)

 var d = document.getElementById('d');
 d.onclick = function(e){
 //返回事件節(jié)點
 console.log(e.currentTarget);
 //返回觸發(fā)節(jié)點
 console.log(e.target);
 }

事件代理(事件委托)的含義:由于事件會在冒泡階段向上傳播到父節(jié)點,因此可以把子節(jié)點的監(jiān)聽函數(shù)定義在父節(jié)點上,由父節(jié)點的監(jiān)聽函數(shù)統(tǒng)一處理多個子元素的事件。這個方法叫做事件的代理也叫事件代理或者事件委托。

<head>
 <title></title>
 <meta charset="UTF-8">
 <style>
 div{padding: 40px}
 #div3{width: 300px;height: 300px;border: 1px solid red;}
 #div2{width: 200px;height: 200px;border: 1px solid red;}
 #div1{width: 100px;height: 100px;border: 1px solid red}
 </style>
</head>
<body>
 <div id="div3">div3
 <div id="div2">div2
  <div id="div1">div1</div>
 </div>
 </div>
</body>
<script>
 var d = document.getElementById('div3');
 d.onclick = function(e){
 e.target.style.background = 'red';
 }
</script>

根據(jù)上面的代碼可以得到三個div的位置大概如下:點擊每個div,每個div的整體就會變成紅色。主要是通過e.target返回了點擊觸發(fā)的該節(jié)點。

(3)阻止瀏覽器默認(rèn)行為和阻止事件傳播的方法event.preventDefault():該方法 阻止瀏覽器會執(zhí)行當(dāng)前事件的默認(rèn)行為,比如點擊鏈接后,瀏覽器跳轉(zhuǎn)到指定頁面;或者按一下空格鍵,頁面向下滾動一段距離。event.stopPropagation():該方法 阻止事件在DOM結(jié)構(gòu)中繼續(xù)傳播,防止再觸發(fā)定義在別的節(jié)點上的監(jiān)聽函數(shù)。

<body>
 <div id="div2">2
 <div id="div1">1
  <a id="a" href="百度2下">我的皎月聞越想聞</a>
 </div>
 </div>
</body>
<script>
 var d2 = document.getElementById('div2');
 var d1 = document.getElementById('div1');
 var a = document.getElementById('a');
 d2.onclick = function(e){
 alert('d2');
 }
 d1.onclick = function(e){
 alert('d1');
 }
 a.onclick = function(e){
 //阻止事件傳播
 e.stopPropagation();
 alert('a');
 //阻止瀏覽器默認(rèn)行為
 e.preventDefault();
 }
</script> 

使用事件對象,實現(xiàn)一個簡單的小案例:跟著鼠標(biāo)飛的div(通過修改事件對象的XY值)

<body>
 <div id="div2">2
 <div id="div1">1
  <a id="a" href="百度2下">我的皎月聞越想聞</a>
 </div>
 </div>
</body>
<script>
 var d2 = document.getElementById('div2');
 var d1 = document.getElementById('div1');
 var a = document.getElementById('a');
 d2.onclick = function(e){
 alert('d2');
 }
 d1.onclick = function(e){
 alert('d1');
 }
 a.onclick = function(e){
 //阻止事件傳播
 e.stopPropagation();
 alert('a');
 //阻止瀏覽器默認(rèn)行為
 e.preventDefault();
 }
</script> 

點擊前(不動)

點擊后(跟著鼠標(biāo)走)

總結(jié)

到此這篇關(guān)于js中事件對象的文章就介紹到這了,更多相關(guān)js事件對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何利用原生JS實時監(jiān)聽input框輸入值

    如何利用原生JS實時監(jiān)聽input框輸入值

    這篇文章主要介紹了如何利用原生JS實時監(jiān)聽input框輸入值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 彈出最簡單的模式化遮罩層的js代碼

    彈出最簡單的模式化遮罩層的js代碼

    彈出模式化遮罩層的方法有很多,在本文為大家介紹下使用js實現(xiàn)最簡單的模式化遮罩層,具體如下,感興趣的朋友不要錯過
    2013-12-12
  • 15款最好的Bootstrap在線編輯器

    15款最好的Bootstrap在線編輯器

    這篇文章主要為大家詳細(xì)介紹了15款最好的Bootstrap在線編輯器,15款在線編輯工具希望幫助大家更好的進行開發(fā),感興趣的小伙伴們可以參考一下
    2016-08-08
  • 如何在webpack項目中調(diào)試loader插件

    如何在webpack項目中調(diào)試loader插件

    最近在學(xué)習(xí)webpack,本文主要介紹了loader插件的調(diào)試方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • 用JS實現(xiàn)的一個include函數(shù)

    用JS實現(xiàn)的一個include函數(shù)

    用JS實現(xiàn)的一個include函數(shù)...
    2007-07-07
  • JavaScript欄目列表隱藏/顯示簡單實現(xiàn)

    JavaScript欄目列表隱藏/顯示簡單實現(xiàn)

    隱藏側(cè)邊欄,并將圖片換成右箭頭圖片;顯示側(cè)邊欄,并將圖片換成左箭頭,這樣的效果想必大家都很熟悉吧,接下來實現(xiàn)下,感興趣的朋友可以參考下哈
    2013-04-04
  • 使用JS調(diào)用工控機(Windows)虛擬鍵盤

    使用JS調(diào)用工控機(Windows)虛擬鍵盤

    在工控機觸摸屏中,通過瀏覽器web端進行表單輸入,當(dāng)聚焦表單輸入框并不會出現(xiàn)虛擬鍵盤進行輸入,本文介紹將給大家介紹如何通過js調(diào)用工控機(Windows)虛擬鍵盤,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • js獲取對象、數(shù)組的實際長度,元素實際個數(shù)的實現(xiàn)代碼

    js獲取對象、數(shù)組的實際長度,元素實際個數(shù)的實現(xiàn)代碼

    下面小編就為大家?guī)硪黄猨s獲取對象、數(shù)組的實際長度,元素實際個數(shù)的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享 給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 網(wǎng)上應(yīng)用的一個不錯common.js腳本

    網(wǎng)上應(yīng)用的一個不錯common.js腳本

    網(wǎng)上應(yīng)用的一個不錯common.js腳本...
    2007-08-08
  • JavaScript中的Promise詳解

    JavaScript中的Promise詳解

    現(xiàn)在網(wǎng)上有非常多的Promise文章,但都是給你一堆代碼,或者某些核心代碼,讓你看完之后感覺,嗯,很厲害,但還是不知所云,不知其所以然。那么本文真正從一個小白開始帶你深入淺出,一步一步實現(xiàn)自己的 Promise,這種自己造輪子的過程一定是進步最快的過程,快上車開始吧
    2022-11-11

最新評論

剑阁县| 上饶县| 金堂县| 高州市| 仁布县| 仲巴县| 平罗县| 且末县| 报价| 柳林县| 永吉县| 法库县| 阿鲁科尔沁旗| 剑河县| 平果县| 武山县| 冀州市| 泽库县| 耿马| 哈尔滨市| 台安县| 墨江| 弥勒县| 金乡县| 沙洋县| 南岸区| 金沙县| 九江县| 高邑县| 宣汉县| 安达市| 喜德县| 长兴县| 搜索| 岳阳县| 鄂托克前旗| 和硕县| 监利县| 武陟县| 东台市| 绵阳市|