event事件對象

event: 事件對象警医,當(dāng)一個事件發(fā)生的時候,和當(dāng)前這個對象發(fā)生的這個事件有關(guān)的一些詳細(xì)信息都會被臨時保存到一個指定的地方-event對象,供我們在需要的時候調(diào)用滔迈。

事件對象必須在一個事件調(diào)用的函數(shù)里面使用才有內(nèi)容
事件函數(shù):事件調(diào)用的函數(shù)揩懒,一個函數(shù)是不是事件函數(shù)什乙,不在定義的時候決定,而是取決于誰調(diào)用這個函數(shù)已球。

      function f1(){
          alert(event);
      }
     f1();
     document.onclick=f1;
//給一個對象綁定一個事件處理函數(shù)的第一種形式

注意兼容:ie/chrome :event是一個內(nèi)置的全局變量
標(biāo)準(zhǔn)下的瀏覽器:事件對象是通過事件函數(shù)的第一個參數(shù)傳入的臣镣。(非標(biāo)準(zhǔn)瀏覽器ie 6 、7不支持智亮,非標(biāo)準(zhǔn)支持event)忆某;

如果一個函數(shù)是被事件調(diào)用的,那么阔蛉,這個函數(shù)定義的第一個參數(shù)就是事件對象弃舒。下列案例中a就是事件對象

      function f1(a){
          alert(a);
      }
     document.onclick=f1;

兼容寫法

      function f1(a){
          var a=a || event;
          for(var attr in a){
              console.log('屬性:'+attr+'值:'+a[attr]);
          }
      }
     document.onclick=f1;

clientX、clientY:當(dāng)一個事件發(fā)生的時候状原,鼠標(biāo)到頁面可視區(qū)域的距離

   var i=0;
   document.onmousemove= function (ev) {
       document.title=i++;
   };
   var div1=document.getElementById('div1');
   document.onmousemove= function (ev) {
       var ev=ev||event;
       div1.style.left=ev.clientX+'px';
       div1.style.top=ev.clientY+'px';
   };

事件流~~~~
一.事件冒泡
當(dāng)一個元素接收到事件的時候聋呢,會把他接收到的所有傳播給他的父級,一直到頂層window遭笋,事件冒泡機(jī)制坝冕。
阻止冒泡:當(dāng)前要阻止冒泡的事件函數(shù)中調(diào)用 ev.cancelBubble=true;

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
       div{
           padding: 40px;
       }
        #div1{
            background: pink;
        }
        #div2{
            background: yellow;
        }
        #div3{
            background: yellowgreen;
        }
    </style>
    <script>
        window.onload= function () {
            var div1=document.getElementById('div1');
            var div2=document.getElementById('div2');
            var div3=document.getElementById('div3');
            div1.onclick=function(ev){
                var ev=ev||event;
                ev.cancelBubble=true;
                alert(this.id);
            };
            div2.onclick=function(){
                alert(this.id);
            };
            div3.onclick=function(){
                alert(this.id);
            };
        };

    </script>
</head>
<body>
<div id="div1">
    <div id="div2">
        <div id="div3"></div>
    </div>
</div>
</body>
</html>

按鈕點(diǎn)擊的時候顯示,點(diǎn)擊任何地方消失

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        #div1{
            width: 100px;
            height: 200px;
            border: 1px solid red;
            display: none;
        }

    </style>
    <script>
         window.onload= function () {
             var div1=document.getElementById('div1');
             var btn=document.getElementById('btn');
             btn.onclick= function (ev) {
                 var ev=ev||event;
                 ev.cancelBubble=true;
                div1.style.display='block';
             };
             document.onclick= function () {
                 div1.style.display='none';
             };
         };

    </script>
</head>
<body>
<input type="button" value="按鈕" id="btn"/>
<div id="div1"></div>
</body>
</html>
        function fn1(){
            alert(1)
        }
        function fn2(){
            alert(2)
        }
        document.onclick=fn1;
        document.onclick=fn2;

上面的綁定函數(shù)的時候是有一些問題的
為了解決這個問題瓦呼,給一個對象同一個事件綁定多個不同的函數(shù)喂窟。

ie下:obj.attachEvent(事件名稱,事件函數(shù))央串;
1.沒有事件捕獲
2.事件名稱中沒有on
3.事件執(zhí)行順序 非標(biāo)準(zhǔn)->倒序
4.this指向window

        function fn1(){
            alert(1)
        }
        function fn2(){
            alert(2)
        }
        document.attachEvent('onclick',fn1);
        document.attachEvent('onclick',fn2);
//        document.attachEvent('onclick', function () {
//         fn1.call(document);
//     })

2.標(biāo)準(zhǔn)下 document.addEventListener(事件名稱磨澡,事件函數(shù),是否捕獲)
1.有捕獲
2.事件名稱中沒有on
3.事件執(zhí)行是正序
4.this指向該觸發(fā)事件的對象

//第三個參數(shù):是否捕獲(默認(rèn)是false) false:冒泡  true:是捕獲
      document.addEventListener('click', fn1,false);
      document.addEventListener('click', fn2,false);

call(),函數(shù)下的一個方法质和,call方法第一個參數(shù)可以改變函數(shù)執(zhí)行過程中的內(nèi)部this指向,call方法第二個參數(shù)開始就是原來函數(shù)的參數(shù)列表

      function a(){
          alert(this);
      }
//      a();
      a.call();   //a()==a.call()
//      a.call(1)
      function fn(a,b){
          alert(this);
          alert(a+b);
      }

      fn.call(1,10,20);
//     fn.call(null,10,20); 不改變原來的指向

封裝的函數(shù)addEventListener和attachEvent調(diào)兼容

<script>
    function fn1(){
        alert(this);
    }

    function fn2(){
        alert(2);
    }
  function getfn(obj,evname,fn){
     if(obj.addEventListener){
         return obj.addEventListener(evname,fn,false);
     }else{
         return obj.attachEvent('on'+evname, function () {
             fn.call(obj);
         })
     }
  }
  getfn(document,'click',fn1);
</script>

二.事件捕獲
在綁定事件中稳摄,標(biāo)準(zhǔn)下瀏覽器是有事件捕獲的,非標(biāo)準(zhǔn)無事件捕獲饲宿。

addEventListener(事件名稱厦酬,事件函數(shù)胆描,是否捕獲’)
第三個參數(shù):是否捕獲(默認(rèn)是false) false:冒泡 true:是捕獲
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        div{
            padding: 40px;
        }
        #div1{
            background: pink;
        }
        #div2{
            background: yellow;
        }
        #div3{
            background: yellowgreen;
        }
    </style>
    <script>
        window.onload= function () {
            var div1=document.getElementById('div1');
            var div2=document.getElementById('div2');
            var div3=document.getElementById('div3');
            function fn(){
                alert(this.id);
            }
//            div3.onclick=fn;
//            div2.onclick=fn;
//            div1.onclick=fn;

//            false=冒泡
//            告訴div1,如果有一個出去的事件觸發(fā)了你仗阅,你就去執(zhí)行這個函數(shù)
//              div1.addEventListener('click',fn,false);
//              div2.addEventListener('click',fn,false);
//              div3.addEventListener('click',fn,false);

            //true 事件捕獲
            //告訴div1昌讲,如果有一個進(jìn)去的事件觸發(fā)了你,你就去執(zhí)行這個函數(shù)
//            true和false就是監(jiān)聽是進(jìn)來的一項(xiàng)還是出去的一項(xiàng)
            div1.addEventListener('click',fn,true);
            div2.addEventListener('click',fn,true);
            div3.addEventListener('click',fn,true);
            
        };
    </script>
</head>
<body>
<div id="div1">
    <div id="div2">
        <div id="div3"></div>
    </div>
</div>
</body>
</html>

取消事件的綁定函數(shù)
1.事件綁定形式的取消

    function fn1(){
        alert(1);
    }
    function fn2(){
        alert(2);
    }
    document.onclick=fn1;
    document.onclick=null;

ie:detachEvent
標(biāo)準(zhǔn)下:removeEventListener

    function fn1(){
        alert(1);
    }
    function fn2(){
        alert(2);
    }

//    document.attachEvent('onclick',fn1);
//    document.attachEvent('onclick',fn2);
//    document.detachEvent('onclick',fn1);

    document.addEventListener('click',fn1,false);
    document.addEventListener('click',fn2,false);
    document.removeEventListener('click',fn1,false);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末减噪,一起剝皮案震驚了整個濱河市短绸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筹裕,老刑警劉巖醋闭,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異朝卒,居然都是意外死亡证逻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門扎运,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瑟曲,“玉大人,你說我怎么就攤上這事豪治《床Γ” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵负拟,是天一觀的道長烦衣。 經(jīng)常有香客問我,道長掩浙,這世上最難降的妖魔是什么花吟? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮厨姚,結(jié)果婚禮上衅澈,老公的妹妹穿的比我還像新娘。我一直安慰自己谬墙,他們只是感情好今布,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拭抬,像睡著了一般部默。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上造虎,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天傅蹂,我揣著相機(jī)與錄音,去河邊找鬼。 笑死份蝴,一個胖子當(dāng)著我的面吹牛犁功,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搞乏,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼波桩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了请敦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤储玫,失蹤者是張志新(化名)和其女友劉穎侍筛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撒穷,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匣椰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了端礼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽笑。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蛤奥,靈堂內(nèi)的尸體忽然破棺而出佳镜,到底是詐尸還是另有隱情,我是刑警寧澤凡桥,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布蟀伸,位于F島的核電站,受9級特大地震影響缅刽,放射性物質(zhì)發(fā)生泄漏啊掏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一衰猛、第九天 我趴在偏房一處隱蔽的房頂上張望迟蜜。 院中可真熱鬧,春花似錦啡省、人聲如沸娜睛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽微姊。三九已至,卻和暖如春分预,著一層夾襖步出監(jiān)牢的瞬間兢交,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工笼痹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留配喳,地道東北人酪穿。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像晴裹,于是被迫代替她去往敵國和親被济。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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

  • 在js中有一個專門的事件對象,來對事件進(jìn)行操作:event:當(dāng)事件發(fā)生時,與事件有關(guān)的信息存儲在一個臨時的地方-e...
    松鼠癥患者閱讀 1,158評論 0 0
  • 以下文章為轉(zhuǎn)載涧团,對理解JavaScript中的事件處理機(jī)制很有幫助只磷,淺顯易懂,特分享于此泌绣。 什么是事件钮追? 事件(E...
    jxyjxy閱讀 3,037評論 1 10
  • document.onclick獲取滿屏點(diǎn)擊的document.onclick = function () {al...
    Luyc_Han閱讀 172評論 0 0
  • 小Q,大學(xué)舍友阿迈,班級前三元媚,自卑敏感。每個人都有自卑的點(diǎn)苗沧,她的比較特別刊棕。從小就被遺棄,原因很簡單:身體不好待逞,各種疾病...
    蘿屋閱讀 350評論 2 2
  • 跟著洪水的腳印 我找到那勢將沉溺的樓宇甥角, 在半沒的危梯之下 水玄墨而深謐,如黑夜之不測 在隧洞透明的剖面上 我看見...
    李野航閱讀 195評論 0 1