事件
一、浏览器的默认行为
浏览器的默认行为,如何阻止?
就是浏览器自己触发的事件。比如:a链接的跳转,form提交时的跳转,鼠标右键菜单。
oncontextmenu 鼠标右键事件
当触发鼠标的右键事件时,会弹出右键菜单,这就是默认事件情况之一
如何阻止默认事件?
var a = document. querySelector ( "a" ) ;
a. onclick = function ( event ) {
var e = event || window. event;
return false ;
}
案例:自定义右键菜单
二、鼠标拖拽效果
拖拽分解:按下鼠标 ----> 移动鼠标 ----> 松开鼠标
1.给目标元素添加onmousedown事件,拖拽的前提是在目标元素按下鼠标左键
2.当onmousedown发生以后,此刻给document添加onmousemove事件,意味着此刻鼠标在网页的移动都将改变目标元素的位置
3.在onmousemove事件中,设定目标元素的left和top,
4.当onmousedown发生以后,此刻给document添加onmouseup事件,意味着此刻鼠标在网页的任意位置松开鼠标,都会放弃拖拽的效果
在onmouseup事件中,取消document的onmousemove事件即可。
三、事件监听
事件触发阶段主要由于事件流:DOM0 级事件处理阶段和DOM2 级事件处理;
DOM0 级事件处理,是一种赋值方式,是被所有浏览器所支持的,简单易懂容易操作;
元素. onclick = function ( ) { }
DOM2 级事件处理是所有DOM 节点中的方法,可以重复绑定,但是浏览器兼容存在问题;
非IE 下: ( 这里的事件名不带on) , 第三个参数表示是在捕获阶段还是冒泡阶段。可以重复绑定事件,执行顺序按照绑定顺序来执行。
oDiv. addEventListener ( 'click' , fn, false ) ;
oDiv. removeEventListener ( 'click' , fn , false ) ;
IE 下:
只有冒泡阶段, 所以没有第三个参数;(这里的事件名需要加on)
oDiv. attachEvent ( ) ;
oDiv. detachEvent ( ) ; 删除
冒泡:从下往上(从里往外)
捕获:从上往下(从外往内)
function addevent ( ele, type, callback ) {
if ( ele. addEventListener) {
ele. addEventListener ( type, callback, false ) ;
} else if ( ele. attachEvent) {
ele. attachEvent ( 'on' + type, callback) ; 只支持冒泡
}
}
四、事件委托机制
事件委托(委派)指将事件统一绑定给元素的共同祖先元素,这样当后代元素上的事件触发时,会一直冒泡到祖先元素从而通过祖先元素的响应函数来处理事件。
事件委托是利用了冒泡,通过委托可以减少事件绑定的次数,提高程序的性能。
target - event中的target表示触发事件的对象
oul. onclick = function ( eve ) {
var e = eve || window. event;
var target = e. target || e. srcElement;
if ( target. nodeName == "LI" ) {
console. log ( target. innerHTML) ;
}
}
优势:
1. 节省性能
2. 可以给页面上暂时不存在的元素绑定事件