1. 跨浏览器事件对象
var Eventutil = { addHandler: function (element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false) } else if (element.attachEvent) { element.attachEvent('on' + type, handler) //ie } else { element['on' + type] = handler //极少 } }, getEvent: function (event) { return event ? event : window.event // :ie }, getTarget: function (event) { return event.target || event.srcElement // ||ie }, preventDefault: function (event) { //禁止默认事件 if (event.preventDefault) { event.preventDefault() } else { event.returnValue = false //ie } }, stopPropagation: function (event) { //阻止事件冒泡 if (event.stopPropagation) { event.stopPropagation() } else { event.cancelBubble = true //ie } }, removeHandler: function (element, type, handler) { if (element.removeEventListener) { element.removeEventListener(type, handler, false) } else if (element.detachEvent) { element.detachEvent('on' + type, handler) // ie } else { element['on' + type] = null //极少 } }, geRelatedTarget: function (event) { //绑定在mouseover等上,返回是从哪个元素移入该元素的 if (event.relatedTarget) { return event.relatedTarget } else if (event.toElement) { //ie return event.toElement } else if (event.fromElement) { //ie return event.fromElement } else { return null } }, getButton: function (event) { //绑定在mousedown或mouseup上,返回按下或释放的鼠标键 if (document.implementation.hasFeature("MouseEvents", "2.0")) { return event.button; } else { //ie switch (event.button) { case 0: case 1: case 3: case 5: case 7: return 0; //左键 case 2: case 6: return 2; //右键 case 4: return 1; //中键 } } }, getWheelDelta: function (event) { //绑定mousewheel事件 if (event.wheelDelta) { return event.wheelDelta; //向下滚动时是-120的倍数 } else { return -event.detail * 40; //fx向下滚动时是3的倍数 } }}
2.事件类型
(1)load:在window上添加,当页面完全加载完毕后触发(图像,js文件,css文件等); 在image元素或Image对象上添加,当图像加载完成后触发(只要添加了src属性,不论是否加入到dom树中就会开始加载);在script或link元素上添加,加载完毕后触发(添加src属性,并且加入到文档中,才会开始下载)
3.鼠标事件的各种位置坐标
clientX/Y 事件在视口中的位置(浏览器大小-浏览器工具栏)
pageX/Y 事件在页面中的位置(clientX/Y + 滚动距离) 滚动距离:document.documentElement.scrollTop/Left
screenX/Y 事件在整个电脑屏幕中的位置
3.鼠标事件时按下特定键位
event.shiftKey/ctrlKey/altKey/metaKey 按下这些键时,鼠标的事件对象中的这些属性会返回true,从而判断按下键位加鼠标点击(meta在win下是windows键,mac下是cmd键)
4.触摸设备的特别情景
(1)不支持dblclick事件,因为双击会使浏览器放大
(2)轻击可单击元素(单击有默认操作的元素或已经绑定点击事件的元素)时会触发mousemove,如果此操作导致内容变化,将不再有其他事件发生。如果屏幕没有因此变化,则会依次触发mousedown、mouseup、click事件。轻击不可单击元素不会触发任何事件。
(3)mouse事件也会触发mouseover和mouseout
(4)两个手指放在屏幕上且页面随手指移动而滚动时会触发mousewheel和scroll事件。
5.变动事件