- 事件类型分类
- UI事件:用户与页面上的元素交互时触发
-
- Load/onload事件:可通过js代码或者在HMTL标签特性中添加事件
- unload/onunload事件:利用这个事件最多的情况是清除引用,以避免内存泄漏
- resize事件:通过window触发,当浏览器窗口被调整到一个新的高度或宽度时触发。
- scroll事件:文档被滚动期间被触发
2. 焦点事件:元素获得或者失去焦点
-
- focusin/focusout:元素获得或者失去焦点时候触发,冒泡
- focus/blur: 元素获得或者失去焦点时候触发,不冒泡
3. 鼠标事件,当用户通过鼠标在页面上执行操作时触发
-
- click:单击按钮或按下回车
- dbclick:双击按钮
- mousedown/enter/leave/move/out/over/up: 按下任意鼠标/ 光标首次移动到内部/ 光标移开/ 元素内部移动/ 从一个元素移到另一个元素时/ 从外部移到元素内部/ 释放鼠标时候出发
- 一般来说mouseover和mouseout用的比较多一些。
- clientX和clinetY返回光标在浏览器中的坐标。
1 var div=document.getElementById('div'); 2 div.onclick=function(event){ 3 console.log(event.clientX+"+"+event.clientY) 4 }
-
- pageX和pageY能告诉你事件是在页面中的什么位置发生的
block.onclick=function(event){ console.log(event.pageX+"+"+event.pageY); }
-
- screenX和screenY可以确定鼠标事件发生时鼠标指针相对于整个屏幕的坐标信息,电脑屏幕。
- 键盘按键:shitfKey, ctrlKey, altKey和metaKey。返回值均为布尔值
4. 滚轮事件,当使用鼠标滚轮(或类似设备)时触发
-
- mousewheel事件,通过event.wheelDelta显示滚轮的方向
5. 文本事件和键盘事件,当在文档中输入文本时触发.
-
- keydown和keyup事件。当用户按下键盘上的任意键时,会触发keydown,当释放的时候,会触发keyup.一般触发之后,会返回keycode
- keypress是指按下键盘上的字符键时触发,返回为charcode
1 var input=document.getElementById('input'); 2 input.onkeydown=function(event){ 3 console.log(event.keyCode) 4 }
-
- DOM3级
对于后面的事件介绍将省略一些代码(代码已传到github上),主要目的为了解相关概念,毕竟数量太多,不同浏览器支持的事件也有区别,所以先将有关的概念过一遍,然后等需要的时候再专门研究。
6. 变动(mutation)事件,当底层DOM 结构发生变化时触发。
-
- 在使用removeChild()或replaceChild()从DOM中删除节点时,首先会触发DOMNodeRemoved事件
-
在使用appendChild()、replaceChild()或insertBefore()向DOM中插入节点时,首先会触发DOMNodeInserted 事件
7. HTML5事件
-
- contextmenu 事件,用以表示何时应该显示上下文菜单,以便开发人员取消默认的上下文菜单而提供自定义的菜单
- beforeunload 事件,是为了让开发人员有可能在页面卸载前阻止这一操作
- DOMContentLoaded 事件,DOMContentLoaded 事件则在形成完整的DOM 树之后就会触发,不理会图像、JavaScript 文件、CSS 文件或其他资源是否已经下载完毕.
- readystatechange 事件,IE 为DOM文档中的某些部分提供了readystatechange 事件。
- pageshow 和pagehide 事件,Firefox 和Opera 有一个特性,名叫“往返缓存”(back-forward cache,或bfcache),可以在用户使用浏览器的“后退”和“前进”按钮时加快页面的转换速度。
- hashchange 事件,HTML5 新增了hashchange 事件,以便在URL 的参数列表(及URL 中“#”号后面的所有字符串)发生变化时通知开发人员、
8. 内存和性能
-
- 事件委托,事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。
1 //事件委托 2 var lists=document.getElementById('eventAll'); 3 EventUtil.addHandler(lists,"click",function(event){ 4 event=EventUtil.getEvent(event); 5 var target=EventUtil.getTarget(event); 6 var content=document.getElementById('change'); 7 8 switch(target.id){ 9 case "go": 10 location.href="www.baidu.com" 11 break; 12 case "change": 13 content.innerHTML="Changed"; 14 break; 15 case "sayHi": 16 alert("Hi"); 17 break; 18 } 19 });
-
- 移除事件处理程序,也可以提高性能。
- 比如,将一个按钮设置了onclick事件,如果确定该按钮不再需要,那么就可以手工移除事件处理程序
1 var btn=document.getElementById("myButton"); 2 btn.onclick=function(){ 3 ......................... 4 } 5 //确认btn不需要再使用之后,移除引用关系 6 btn.onclick=null;
- 模拟事件通过createEvent来实现
浙公网安备 33010602011771号