js中的event對象的使用

最近發(fā)現(xiàn)身邊的一些技術(shù)人員,對于事件對象,不了解其原理,只知道基本的使用,所以我在此整理了事件對象的知識點(diǎn).

1 事件對象的作用

主要是用于存儲事件的相關(guān)信息,事件對象由用戶產(chǎn)生的(用戶觸發(fā)鼠標(biāo)事件,鍵盤事件等)
事件存儲數(shù)據(jù)有,按的那個鍵盤,觸發(fā)的哪個事件,當(dāng)前點(diǎn)擊光標(biāo)所在位置等等.還有其他很多信息,但是大家平撤废海基本都用不上.
事件對象也可以阻止事件流翅敌,阻止瀏覽器默認(rèn)動作等,這個在我們的工作中使用的還是比較多的.

2裕菠、獲取事件對象

因?yàn)榧嫒莸膯栴},不同瀏覽器獲取事件對象的方法也不一樣,這點(diǎn)大家使用的時候要注意.(兼容是前端最讓人頭疼的地方)

ie6、7、8獲取事件對象的方法(現(xiàn)在基本沒有,知道就好)

節(jié)點(diǎn)對象.事件類型 = function() {
    console.log(window.event);
}

注意哈,event對象在函數(shù)體內(nèi)才有

主流瀏覽器的獲取方法

節(jié)點(diǎn)對象.事件類型 = function(evt) {
    console.log(evt); //相當(dāng)于 window.event
}

直接在事件后面寫回調(diào)函數(shù),觸發(fā)事件的時候,系統(tǒng)會自動的給回調(diào)函數(shù)穿遞event對象.我們使用參數(shù)接收,就可以直接獲取了.
后面是兼容的寫法,工作中都是這么寫的.大家記住這個就行了.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div id="div1" style="width: 100px; height: 100px; background:  red;"></div>
<script type="text/javascript">
div1.onclick = function(evt) {
    var evtObj = evt ? evt : window.event;
    console.log(evtObj);
}
</script>
</body>
</html>

3著恩、事件對象的使用場景
1)判斷是否回車表單提交

我們通過綁定鍵盤事件onkeydown,進(jìn)而獲取event對象,再通過event得到當(dāng)前點(diǎn)擊的鍵盤上的鍵盤碼,通過鍵盤碼判斷是否點(diǎn)擊了回車.
使用到的知識點(diǎn):
表單對象.submit() 提交表單
表單對象.onsubmit = function() {} 監(jiān)聽表單是否提交

上代碼,大家來看.


圖片.png

好多人搞不清楚,submint和onsubmit,下面詳細(xì)說一下
submit是js去提交表單,onsubmit是監(jiān)聽表單是否提交;
通過js的submit方法提交表單喉誊,不會觸發(fā)onsubmit事件邀摆,原因:一個由用于觸發(fā),另個是由程序觸發(fā)的伍茄;

2)阻止瀏覽器默認(rèn)動作
Event對象的在我們的使用中,另一個重大作用就是阻止默認(rèn)動作.比如像要使用a標(biāo)簽的樣式,但是不想要跳轉(zhuǎn)功能.

DOM1級事件                           return false栋盹;
DOM1級事件或者DOM2級事件    evt.preventDefault();
圖片.png
圖片.png

圖片.png

2)事件對象中記錄的鼠標(biāo)位置
我們工作中很多的時候要制作各種特效,比方元素跟隨鼠標(biāo)的移動等,這個時候都要獲取鼠標(biāo)的各種坐標(biāo).其實(shí)這些呢,大家不用去記單詞,主要知道有這個屬性就行,用的時候查一查.

evt.screenX 相對于屏幕的左上角為原點(diǎn)
evt.screenY 
evt.clientX 相對于瀏覽器的客戶端左上角為原點(diǎn)(不計(jì)算滾動條位置)
evt.clientY 
evt.pageX   相對于瀏覽器的客戶端左上角為原點(diǎn)(計(jì)算滾動條的位置)
evt.pageY   
evt.offsetX 以自己的左上角為原點(diǎn)
evt.offsetY 
圖片.png

這里來個小案例,就是點(diǎn)擊添加星星

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<script type="text/javascript">
//1. 給屏幕添加點(diǎn)擊事件 onclick
document.onclick = function(evt) {
    var evtObj = evt ? evt : window.event;
    //2. 在頁面追加星星
    //2.1 創(chuàng)建img標(biāo)簽
    var imgObj = document.createElement('img');
    //2.2 給img標(biāo)簽設(shè)置src屬性
    imgObj.setAttribute('src', 'star.gif');

    //獲取對象默認(rèn)寬度
    //console.log(imgObj.width);
    //2.3 設(shè)置對象寬度
    imgObj.width = imgObj.width * Math.random();

    //2.4設(shè)置定位
    imgObj.style.position = 'absolute';
    imgObj.style.top = evtObj.clientY + 'px';
    imgObj.style.left = evtObj.clientX + 'px';

    //理論核心DOM(1)得一層一層獲取,但是獲取body可以直接獲取
    document.body.appendChild(imgObj);
}
</script>
</body>
</html>

3)阻止事件流

關(guān)于事件流這塊的,大家看一看,在嵌套元素的時候,使用的比較多.
ie6敷矫、7例获、8:event.cancelBubble=true;
主流瀏覽器:evt.stopPropagation();

圖片.png
!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    #div1 {width: 800px; height: 800px; background: red;}
    #div2 {width: 400px; height: 400px; background: blue;}
    #div3 {width: 200px; height: 200px; background: green;}
    </style>
</head>
<body>
<div id="div1">
    <div id="div2">
        <div id="div3">
            
        </div>
    </div>  
</div>
<script type="text/javascript">
div1.addEventListener('click', function(evt){
    var evtObj = evt ? evt : window.event;
    alert(1);
    evtObj.stopPropagation();
});


div2.addEventListener('click', function(evt){
    var evtObj = evt ? evt : window.event;
    alert(1);
    evtObj.stopPropagation();
});


div3.addEventListener('click', function(evt){
    var evtObj = evt ? evt : window.event;
    alert(1);
    evtObj.stopPropagation();
});
</script>
</body>
</html>

寫在最后
以上就是關(guān)于event對象的總結(jié),大家如果有什么問題,歡迎在下方留言討論.看完之后順手已贊,你是最帥的,哈哈!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市曹仗,隨后出現(xiàn)的幾起案子榨汤,更是在濱河造成了極大的恐慌,老刑警劉巖怎茫,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件收壕,死亡現(xiàn)場離奇詭異,居然都是意外死亡轨蛤,警方通過查閱死者的電腦和手機(jī)蜜宪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俱萍,“玉大人端壳,你說我怎么就攤上這事∏鼓ⅲ” “怎么了损谦?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岳颇。 經(jīng)常有香客問我照捡,道長,這世上最難降的妖魔是什么话侧? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任栗精,我火速辦了婚禮,結(jié)果婚禮上瞻鹏,老公的妹妹穿的比我還像新娘悲立。我一直安慰自己,他們只是感情好新博,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布薪夕。 她就那樣靜靜地躺著,像睡著了一般赫悄。 火紅的嫁衣襯著肌膚如雪原献。 梳的紋絲不亂的頭發(fā)上馏慨,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音姑隅,去河邊找鬼写隶。 笑死,一個胖子當(dāng)著我的面吹牛讲仰,可吹牛的內(nèi)容都是我干的慕趴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼叮盘,長吁一口氣:“原來是場噩夢啊……” “哼秩贰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柔吼,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤毒费,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后愈魏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觅玻,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年培漏,在試婚紗的時候發(fā)現(xiàn)自己被綠了溪厘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡牌柄,死狀恐怖畸悬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情珊佣,我是刑警寧澤蹋宦,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站咒锻,受9級特大地震影響冷冗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惑艇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一蒿辙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滨巴,春花似錦思灌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秽荤,卻和暖如春甜奄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窃款。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工课兄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晨继。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓烟阐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親紊扬。 傳聞我的和親對象是個殘疾皇子蜒茄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的檀葛。 ??事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,473評論 1 11
  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,595評論 2 10
  • 本篇博客源地址 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件ele.click()ele.click(ha...
    ZombieBrandg閱讀 669評論 0 1
  • 事件流 Click Me 冒泡型事件:事件按照從最特定的事件目標(biāo)到最不特定的事件目標(biāo)的順序觸發(fā)腹缩。觸發(fā)的順序是:di...
    醋留香閱讀 789評論 0 1
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,318評論 0 8