DOM对象、事件种类、Event事件、预加载


 CSS样式
     pointer-events: none;  不接收点击事件

DOM对象.addEventListener("事件类型",事件触发后的回调函数,是否捕获阶段触发(默认是false)/配置对象);

配置对象 {once:true} 仅接受一次事件

捕获阶段 目标阶段 冒泡阶段

? 外 内

? | |

? 内 外

e.stopPropagation(); 停止继续冒泡触发

事件触发时,会遇到两种,1、事件侦听的对象,2、事件最终触发的目标对象

如果监听的DOM没有子元素,那么事件侦听的对象,和最终触发的目标对象是一致
但是如果监听的DOM有子元素,而恰巧点击到这个子元素上,侦听的对象就是外面的父元素,目标点击的对象就是子元素

事件侦听的对象  e.currentTarget   this
 事件最终触发的目标对象   
 e.target  e.srcElement(IE)

当容器内有多个子元素需要侦听事件时,我们只需要给父元素侦听事件,通过e.target判断被点击

到的实际目标对象,这种方法我们叫事件委托,把子元素的事件委托给父元素

 e.preventDefault(); 去除默认事件行为(比如取消右键菜单,提交表单跳转...
右键菜单的设定主要是通过contextmenu事件来激活
 e.stopImmediatePropagation();如果一个DOM对象针对同一事件类型,侦听多次,执行不同
      的事件函数,在某个事件函数中使用该方法,可以阻止后续的事件方法执行,事件谁先侦听,谁先执行

  DOM对象.removeEventListener("事件类型",要删除的侦听事件执行的函数)

事件种类

 document.onclick=function(){
            // 删除事件
            document.onclick=null;
        }
//添加事件  document.addEventListener("click",clickHandler);
 //兼容ie8以下       document.attachEvent("onclick",clickHandler);

        function clickHandler(){
   //移除事件         document.removeEventListener("click",clickHandler);
   //兼容ie8的移出事件         document.detachEvent("onclick",clickHandler);
        }

  1、onclick会造成回调地狱
      2、addEventListener允许捕获阶段触发,但是onclick不允许捕获阶段触发
      3、onclick仅允许执行最后一次赋值的函数,事件只能独立执行一个函数,addEventListener可以执行多个函数
      4、addEventListener支持自定义事件的侦听和抛发,on没有自定义事件侦听
      5、on支持所有浏览器,addEventListener支持IE8以上
      6、on代码写起来简单容易理解编写,addEventListener适用于函数式编程

Event事件

 change  主要针对表单,当表单或者表单元素发生改变,在失焦后触发该事件
   所有的表单都必须要写name,checkbox和radio都必须要写value
   可以针对表单form和其表单的元素侦听
 error  错误
 load   加载完成

预加载

        // 预加载
        var arr=[]
        for(var i=2;i<7;i++){
            var img=new Image();
            img.src="./img/"+i+".jpg";
            img.addEventListener("load",loadHandler);
        }

        function loadHandler(e){
            arr.push(this);
            if(arr.length===5){
                // console.log(arr)
                arr.forEach(function(item){
                    console.log(item.src);
                })
            }
        }
// 预加载
        var n=2;
        var arr=[];
        function loadImage(){
            var img=new Image();
            img.addEventListener("load",loadHandler);
            img.src="./img/"+n+".jpg";
        }

        function loadHandler(e){
            this.removeEventListener("load",loadHandler)
            arr.push(this);
            n++;
            if(n>6){
                loadFinishHandler();
                return;
            }
            loadImage();
        }

        function loadFinishHandler(){
            arr.forEach(function(item){
                console.log(item.src)
            })
        }

        loadImage();

 注意:offsetWidth clientWidth scrollWidth 获取的前提条件1、必须放在body中,2、必须要有宽高
针对表单
  reset  重置  侦听重置表单事件
  submit 提交  侦听提交表单事件
针对window
  resize 重设大小  window的窗口发生改变大小时,触发
select  选择 针对input文本框或者textarea文本域使用,当选择其中文字时触发
scroll  滚动条 当滚动条滚动时触发 任何具备有滚动条的都可以触发,窗口的只能使用document或者window

相关