国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript Event(事件)的傳播與冒泡

2019-11-19 17:48:29
字體:
來源:轉載
供稿:網友

特性說明和原理圖:

  • 標準瀏覽器和Ie9+瀏覽器都支持事件的冒泡和捕獲,而IE8-瀏覽器只支持冒泡
  • 標準和Ie9+瀏覽器用stopPropagation()或cancelBubble阻止事件傳播,而ie8-用e.cancelBubble屬性來阻冒泡,注意ie9不支持cancelBubble屬性(設置后不生效),但chrome、safari、opera、firefox都支持cancelBubble屬性。
  • Ie8-用attachEvent為dom元素添加一個事件,但必須在事件名前加上on,此類事件只能在元素的冒泡階段。
  • stopPropagatin()方法用于阻止事件的傳播,如果設置在捕獲階段,則目標和冒泡階段不會被執行;
  • cancelBubble屬性只能阻止冒泡階段,對捕獲和目標階段的事件不能阻止
  • preventDefault()和window.event.returnValue用于標準瀏覽器和ie9+,都可以阻止默認事件。ie8-可以用returnValue,preventDefault()。

示例代碼(ie8-示例不提供)

html代碼

<body class="body" >  <div class="log"></div> <input type="text" id="inTxt" name="intxt" /><div class="wrap"> <div class="cont">  <button type="button" class="button" id="btn">按鈕</button>  <select name="stopType" id="stopType">    <option value="1">StopPropagation</option>    <option value="2">cancelBubble</option>  </select>  <button type="button" class="button" id="btnReject">cont阻止捕獲或冒泡</button> </div></div></body>

層級關系:body->wrap->cont->button,可以對照上面的原理

Js代碼

$(function(){    var $log = $('.log'),       $wrap = $('.wrap'),      $cont = $('.cont'),      $btn = document.getElementById('btn'),      $stopType = $('#stopType'),      $body = $('body'),      $inTxt = $('#inTxt'),      $btnReject = $('#btnReject');    var ePhase = ["","捕獲","目標","冒泡"]    var setBorderColor = function( $dom, color, time,event){      $dom = $($dom);      $log.html($log.html() + $dom.attr('class') + '[' + ePhase[event.eventPhase] + ']' + '<br/>')      var timeIndex = window.setTimeout(function(){         $dom.css({        'borderColor': color,        'borderWidth': '4px'      });      }, time);    }      //捕獲    $body[0].addEventListener('click',function(event){       $log.html($log.html() + "-------------------<br>");      setBorderColor($body,'#0866ff ',0,event);    },true);      $wrap[0].addEventListener('click',function(event){      setBorderColor($wrap,'yellow',2000,event);     },true);    $cont[0].addEventListener('click',function(event){      event = event || window.event;      if( $stopType.val() == '1' ){        event.stopPropagation();      }else{        event.cancelBubble = true;      }      setBorderColor($cont,'green',1000,event);      },true);     $btn.addEventListener('click', function(event){       setBorderColor($btn,'red',0,event);    },true);    $btnReject[0].addEventListener('click',function(event){       setBorderColor($btnReject,'gray ',0,event);    },true);    //冒泡    $body[0].addEventListener('click',function(event){      setBorderColor($body,'#0866ff ',0,event);    },false);     $wrap[0].addEventListener('click',function(event){      setBorderColor($wrap,'yellow',2000,event);     },false);     $cont[0].addEventListener('click',function(event){      setBorderColor($cont,'green',1000,event);      },false);     $btn.addEventListener('click', function(event){       setBorderColor($btn,'red',0,event);    },false);    $btnReject[0].addEventListener('click',function(event){       setBorderColor($btnReject,'gray ',0,event);    },false);    //阻止默認事件    $inTxt.keypress(function(event){      //event.preventDefault();       window.event.returnValue = false;      $body.append( String.fromCharCode( event.keyCode ));    });  });
  1. 實現一個完整的event流的Demo
  2. 在cont的捕獲事件處有阻止事件傳播的代碼
  3. 阻止默認事件只用于驗證

效果圖

應用場景

  • 捕獲階段的事件應用場景較少,一般情況下都應用在目標和冒泡階段。
  • 現階段w3c的標準事件已普遍受支持,如果不兼容ie8-瀏覽器可以廢棄一些兼容性代碼。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万全县| 延安市| 奉贤区| 克什克腾旗| 华池县| 新宁县| 牙克石市| 湘阴县| 崇仁县| 青河县| 武夷山市| 青龙| 牙克石市| 东方市| 黑河市| 文昌市| 嘉祥县| 正宁县| 绵阳市| 鹤壁市| 淮滨县| 孟津县| 郴州市| 突泉县| 广河县| 陆川县| 梅河口市| 沧源| 应城市| 岢岚县| 丹巴县| 柳河县| 湘阴县| 忻城县| 六枝特区| 巍山| 翁源县| 子长县| 万宁市| 渑池县| 开封县|