- 绑定事件处理函数
ele.onxxx=function(){}
兼容性好,一个元素的同一个事件上只能绑定一个处理程序,基本等同于写在html行间
程序this指向dom元素本身
解除事件处理程序:
ele.οnclick=false/’’/null
obj.addEventListener(type,fn,false);
IE9以下不兼容,可以为一个事件绑定多个处理程序,重复函数绑定多次执行一次
程序this指向dom元素本身
解除事件处理程序:
ele.removeEventListener(type,fn,false);
obj.attachEvent(‘on’+type,fn);
IE独有。一个事件可以绑定多个处理程序,重复函数绑定多次执行多次
程序this指向window,解决办法
解除事件处理程序:
ele.datachEvent(‘on’+type,fn)
注:若绑定匿名函数则无法解除事件处理程序
- 事件处理模型
冒泡:结构上嵌套关系的元素,自子元素冒泡向父元素。
捕获:自父元素冒泡向子元素,触发捕获(false➡true)
IE没有捕获事件,先捕获,后冒泡,事件执行本身不受影响
focus,blur,change,submit,reset,select不存在冒泡事件
- 阻止事件冒泡
event.stopPropagation();
w3c标准,但是不支持ie9以下版本
event.cancleBubble=true;
ie独有
- 取消默认事件
句柄式绑定时:return false;
w3c标准:event.preventDefault();
兼容ie:event.returnValue=false;
行间写:viod(false);
- 事件对象
兼容ie :event=e||window.event
- 时间源对象
兼容ie和火狐 :target=event.target||event.srcElement;
- 事件委托
优点:性能好,灵活;
- 鼠标事件
(只监听左键)click=mousedown(可以监听右键)+mouseup(可以监听右键)
mouseenter(mouseover)鼠标移入,mouseleave(mouseout)鼠标移出
document.mousedown 可以解决鼠标频次太快的问题
mousemove 监听移动
移动端:touchstart touchmove touchend
ie上的事件捕获:div.setCapture
解除捕获:div.releaseCapture
event.button:0/1/2可以判断鼠标左右键
- 键盘类事件
onkeypress!=onkeydown+onkeyup
keypress:监听字符类事件,区分大小写,返回ASCII码。charcode
keydown:所有键盘类事件,字符类监控不准确,不区分大小写,监听控制类事件,which对应键盘每一个按键。
- 文本类操作事件
input:内容变化会触发事件
change:聚焦和失去焦点内容变化触发
onfocus:聚焦时事件
onblur:失去焦点时事件
- 窗体操作类事件
scroll:滚动条滚动触发
获取滚动条当前位置
利用这个可以再ie中实现fixed定位。
load:window.onload,等待render渲染完成再加载。