天天看点

JS事件JS事件事件周期event对象常见事件类型

JS事件

事件是可以被JavaScript侦测到的行为,通俗的讲就是当用户与Web页面进行某些交互时,解释器就会创建响应的event对象以描述的信息

常见的事件

  • 用户点击的页面上的某项内容
  • 鼠标经过特定的元素
  • 用户按下键盘上的某个按键
  • 用户滚动或改变窗口大小
  • 页面元素加载完成或加载失败

事件句柄

事件句柄(又称事件处理函数、事件监听函数),指用于响应某个事件而调用的函数。每一个事件对应一个句柄,在程序执行时,将相应的函数或语句指定给事件句柄,则在该事件发生时,浏览器便执行指定的函数或语句。

元素.addEventListener(‘事件’,函数);

JS事件JS事件事件周期event对象常见事件类型

事件定义

JS事件JS事件事件周期event对象常见事件类型
JS事件JS事件事件周期event对象常见事件类型
JS事件JS事件事件周期event对象常见事件类型
JS事件JS事件事件周期event对象常见事件类型
JS事件JS事件事件周期event对象常见事件类型
JS事件JS事件事件周期event对象常见事件类型

DOM事件流

JS事件JS事件事件周期event对象常见事件类型

添加事件addEventListener()

JS事件JS事件事件周期event对象常见事件类型

移除事件removeEventListener()

JS事件JS事件事件周期event对象常见事件类型

IE事件流

IE8及以下

添加事件attachEven()

JS事件JS事件事件周期event对象常见事件类型

移除事件detachEvent()

JS事件JS事件事件周期event对象常见事件类型

IE事件流浏览器兼容

<body>
    <button id="mybtn">点击我</button>

    <script type="text/javascript">
        //兼容所有浏览器
        //addEventListener  attachEvent
        var EventUtil = {
            addHandler:function(element,type,handler);{
                //绑定事件
                //chrom、firefox、IE9等 addEventListener
                //IE8及IE8以下的浏览器 attachEvent
                if(element.addEventListener){
                    element.addEventListener(type,handler,false);
                }else if(element,attachEvent){
                    element.attachEvent("on"+type,handler);
                }else{
                    element["on"+type] = null;
                }
                
            }, 
            removeHandler:function(element,type,handler){
                //绑定事件
                //chrom、firefox、IE9等 removeEventListener
                //IE8及IE8以下的浏览器 detachEvent
                if(element.removeEventListener){
                    element.removeEventListener(type,handler,false);
                }else if(element,detachEvent){
                    element.datachEvent("on"+type,handler);
                }else{
                    element["on"+type] = null;
                }
            }
        }
    </script>
</body>
           

事件周期

JS事件JS事件事件周期event对象常见事件类型
<body>
    <div id="parent">
        <div id="child" class="child">儿子事件</div>
    </div>
    <ul id="ul">
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>

    <script type="text/javascript">
        //事件冒泡
        // document.getElementById("parent").addEventListener("click",function(e){
        //     alert("parent事件触发"+this.id);
        // })
        // document.getElementById("child").addEventListener("click",function(e){
        //     alert("child事件触发"+this.id);
        // })

        //
        //父 添加了事件
        //   子 添加了事件
        //    
        //    直系亲属树结构
        //    html
        //    body
        //    parent    添加了事件
        //    child    添加了事件
        //    
        //事件冒泡:直系亲属树结构中,点击某个元素,由于冒泡作用,亲属树上的元素凡是添加事件的,都会被触发
        

        //
        //事件捕获
        //直系亲属结构
        //    html
        //    body
        //    parent    添加了事件
        //    child    添加了事件
        //    
        // document.getElementById("parent").addEventListener("click",function(e){
        //     alert("parent事件触发"+this.id);
        // },true)
        // document.getElementById("child").addEventListener("click",function(e){
        //     alert("child事件触发"+this.id);
        // },true)



        //事件委托    (原理就是事件冒泡)
        //保证只添加一次事件
        var ul = document.getElementById("ul");
        ul.addEventListener("click",function(event){
            if(event.target.id == "one"){
                alert(1);
            }else if(event.target.id == "two"){
                alert(2);
            }else{
                alert(3);
            }
        },false);
    </script>
</body>
           

event对象

IE9及以上,firefox,chorm浏览器的event对象

JS事件JS事件事件周期event对象常见事件类型
JS事件JS事件事件周期event对象常见事件类型

点击儿子,事件在父亲上面

event.target 点击谁谁就是targrt,事件源

event.currentTarget 事件绑定在谁身上,就是指向谁

event.preventDefault() 阻止默认行为

event.stopPropagation() 取消事件捕获或者冒泡

event. clientY 、event. pageY 、event. screenY(客户端,页面,屏幕)

clientY 指浏览器顶部底边到鼠标的位置 (不包括滚动轴)

pageY 指浏览器页面顶部底边到鼠标的位置 (包括滚动轴)

screenY 指电脑屏幕顶部到鼠标位置 (与浏览器缩放无关)

JS事件JS事件事件周期event对象常见事件类型

IE8及以下的浏览器

event.type 事件类型

event.returnValue = false; 阻止默认行为同preventDefault

event.cancelBubble = true 取消事件冒泡同stopPropagation

srcElement 同target

event对象浏览器兼容

JS事件JS事件事件周期event对象常见事件类型

常见事件类型

JS事件JS事件事件周期event对象常见事件类型

兼容

<script type="text/javascript">
         var EventUtil = {
            addHandler:function(element,type,handler);{
                //绑定事件
                //chrom、firefox、IE9等 addEventListener
                //IE8及IE8以下的浏览器 attachEvent
                if(element.addEventListener){
                    element.addEventListener(type,handler,false);
                }else if(element,attachEvent){
                    element.attachEvent("on"+type,handler);
                }else{
                    element["on"+type] = null;
                }  
            }, 
            removeHandler:function(element,type,handler){
                //绑定事件
                //chrom、firefox、IE9等 removeEventListener
                //IE8及IE8以下的浏览器 detachEvent
                if(element.removeEventListener){
                    element.removeEventListener(type,handler,false);
                }else if(element,detachEvent){
                    element.datachEvent("on"+type,handler);
                }else{
                    element["on"+type] = null;
                }
            },
            getTarget:function(event){
            	return event.target || event.srcElement;
            },
            preventDefault:function(event){
            	if(event.preventDefault){
            		event.preventDefault();
            	}else{
            		event.returnValue = false;
            	}
            },
            stopPropagation:function(event){
            	if (event.stopPropagation) {
            		event.stopPropagation();
            	}else{
            		event.cancelBubble = true;
            	}
            }
        };
           

常用事件

//UI事件
        //1、load事件  当页面完全加载后在window上面触发
        // EventUtil.addHandler(window, "load", function(e){
        // 	alert("Loaded!");
        // });
        
        //img标签加载完毕
        // var image = document.createElement("img");
        // EventUtil.addHandler(image, "load", function(e){
        // 	alert("图片加载完毕");
        // });
        // image.src = "1.png";

        //图片预加载
        // var image = new Image();
        // EventUtil.addHandler(image, "load", function(e){
        // 	alert("Image loaded!");
        // });
        // image.src = "smile.gif";
        
        //js动态加载完毕
        // var script = document.createElement("script");
        // EventUtil.addHandler(script, "load", function(event){
        // 	alert("js Loaded");
        // });
        // script.src = "jquery.js";
        // document.body.appendChild(script);
        //相当于  <script src="jquery.js"><//script>
        
        //css动态加载完毕
        // var link = document.createElement("link");
        // link.type = "text/css";
        // link.rel = "stylesheet";
        // EventUtil.addHandler(link, "load", function(event){
        // 	alert("css loaded");
        // });
        // link.href = "example.css";
        // document.getElemnetsByTagName("head")[0].appendChild(link);
        
        //2、unload事件   用户从一个页面切换的另一个页面
        
        //3、resize事件   窗口大小发生变化时触发
        //4、scroll事件   主要针对新旧浏览器
        
        //焦点事件     
        //1、 blur  元素失去焦点时触发
        //2、 focus  不支持冒泡,元素获取焦点时触发
        //3、 focusin  支持冒泡,元素获取焦点时触发,支持事件浏览器是IE5.5+,Safari5.1+,chrome等
        //4、 focusout  同blur,元素失去焦点时触发,支持事件浏览器是IE5.5+,Safari5.1+,chrome等
        //5、 DOMFocusIn 同focus,元素获取焦点时触发
        //6、 DOMFocusOut  同blur,元素失去焦点时触发
        
        //鼠标事件
        //1、 click  单击事件
        //2、dbclick  双击事件
        //3、mousedown  鼠标按下时触发的事件
        //4、mouseup  鼠标松开时触发的事件
        //mousedown + mouseup = click
        //mousenove   鼠标在元素内移动是执行
        //mouseout   鼠标离开元素或其子元素的时候执行
        //mouseover  鼠标进入元素或其子元素的时候执行
        
        //mouseenter   //只能进入目标元素才触发
        //mouseleave   //只能离开目标元素才触发
        
           

焦点事件

1、 blur  元素失去焦点时触发
    2、 focus  不支持冒泡,元素获取焦点时触发
    3、 focusin  支持冒泡,元素获取焦点时触发,支持事件浏览器是IE5.5+,Safari5.1+,chrome等
    4、 focusout  同blur,元素失去焦点时触发,支持事件浏览器是IE5.5+,Safari5.1+,chrome等
    5、 DOMFocusIn 同focus,元素获取焦点时触发
    6、 DOMFocusOut  同blur,元素失去焦点时触发
           

鼠标事件

1、 click  单击事件
    2、dbclick  双击事件
    3、mousedown  鼠标按下时触发的事件
    4、mouseup  鼠标松开时触发的事件
    mousedown + mouseup = click
    mousenove   鼠标在元素内移动是执行
    mouseout   鼠标离开元素或其子元素的时候执行
    mouseover  鼠标进入元素或其子元素的时候执行
    
    mouseenter   //只能进入目标元素才触发
    mouseleave   //只能离开目标元素才触发
           
JS事件JS事件事件周期event对象常见事件类型
JS事件JS事件事件周期event对象常见事件类型

keydown事件:按键被按下时触发,支持keyCode

任意按键皆可触发

JS事件JS事件事件周期event对象常见事件类型

keyup事件:按键被抬起时触发,支持keyCode

JS事件JS事件事件周期event对象常见事件类型

keypress事件:按键被按下时触发,支持charCode(字符码),keyCode(键码)不稳定

字符触发

JS事件JS事件事件周期event对象常见事件类型

textInput事件

JS事件JS事件事件周期event对象常见事件类型

DOMNodeInserted事件:添加被触发

JS事件JS事件事件周期event对象常见事件类型

DOMNodeRemoved事件:删除被触发

JS事件JS事件事件周期event对象常见事件类型

DOMNodeInsertedIntoDocument事件:添加之前被被触动

JS事件JS事件事件周期event对象常见事件类型

DOMNodeRemovedFromDocument事件:删除之前被触发

JS事件JS事件事件周期event对象常见事件类型

DOMSubtreeModified事件:任何变化都会被触发

JS事件JS事件事件周期event对象常见事件类型

DOMContentLoaded事件:在DOM树之后就触发,不理会图像、JavaScript文件、css文件或其他资源是否已经下载

DOMContentLoaded事件的速度一定快于laod事件

JS事件JS事件事件周期event对象常见事件类型

readystatechange事件:情绪化,限制IE,很难预料

JS事件JS事件事件周期event对象常见事件类型

hashchange事件

JS事件JS事件事件周期event对象常见事件类型

移动端事件类型

touchstart:手指触摸屏幕

touchmove:手指在屏幕上滑动

touchend:手指从屏幕上移开

**touchcancel:**当系统停止跟踪触摸时触发

JS事件JS事件事件周期event对象常见事件类型

多手指操作屏幕时

JS事件JS事件事件周期event对象常见事件类型

继续阅读