事件捕获和冒泡

事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target) ------事件传递的顺序是-从父级到子级

事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。 -----------事件传递的顺序是-从子级到父级

    functionaddEvent(element,type,fn){

    if(element.addEventListener) {

    //如果第三个值为ture,则会在冒泡阶段触发

    element.addEventListener(type,fn,false);

    //如果第三个值为ture,则会在捕获阶段触发

   element.addEventListener(type,fn,true);

      }

   else if(attachEvent){

  element.attachEvent("on"+type,fn);

    }

      else{

    element["on"+type]=fn;

  }

  }

  functionremoveEvent(element,type,fn){

  if(element.addEventListener) {

  element.removeEventListener(type,fn,false);

}

else if(attachEvent){

element.detachEvent("on"+type,fn);

}

   else{

        element["on"+type]=null;

  }

    }

//********************绑定/移除事件******************************

/*********************************

*********取消冒泡

********参数

***********ev:要取消冒泡的事件对象

************************************/

    functionstopBubble(e){

       if(e&&e.stopPropagation){

      e.stopPropagation();

      }

  else{

  e.cancleBubble();

  }

}

//这时候element.addEventListener(type,fn,false);触发的是冒泡事件 --效果是每点击一个box只有该box被打印

事件传递的顺序是-从父级到子级

如果没加varevObj=window.event||ev;evObj.cancelBubble=true;

点击xm 时,会打印点击了xm点击了item点击了box

但是加上了取消冒泡事件后取消了冒泡后就不会再冒泡,父级就不会打印,从谁上加上取消冒泡它的父级之后就不会打印了

        addEvent(box,"click",function(){
        console.log("点击了box");
        varevObj=window.event||ev;
        evObj.cancelBubble=true;
      });

    addEvent(item,"click",function(ev){
    console.log("点击了item");
    varevObj=window.event||ev;
    evObj.cancelBubble=true;
  });
     addEvent(xm,"click",function(ev){
    console.log("点击了xm");
    //取消冒泡   取消了冒泡后就不会再冒泡,父级就不会打印
  varevObj=window.event||ev;
  evObj.cancelBubble=true;
});

取消冒泡事件

varevObj=window.event||ev;

1、evObj.cancelBubble=true;

2、evObj.stopPropagation();

//这时候element.addEventListener(type,fn,true);——触发的是捕获事件

事件传递的顺序是-从子级到父级

如果没加varevObj=window.event||ev;evObj.cancelBubble=true;

点击xm 时,会打印点击了box点击了item点击了xm

但是加上了取消冒泡事件后会组织捕获,子级就不会打印,从谁上加上取消冒泡它的子级之后就不会打印了

  addEvent(box,"click",function(){
    console.log("点击了box");
    varevObj=window.event||ev;
    // evObj.cancelBubble=true;
    evObj.stopPropagation();
  });
addEvent(item,"click",function(ev){
console.log("点击了item");
// var evObj=window.event||ev;
// evObj.cancelBubble=true;
});
  addEvent(xm,"click",function(ev){
console.log("点击了xm");

  //取消冒泡--可以阻止捕获   取消了冒泡后就不会再冒泡,父级就不会打印

// var evObj=window.event||ev;

 // evObj.cancelBubble=true;

你可能感兴趣的:(事件捕获和冒泡)