事件对象
onmousemove:鼠标移动事件
事件对象:
当事件响应函数被触发时,浏览器会生成一个和事件本身相关联的对象,传递给回调函数,这个对象包含了事件的一切信息,比如鼠标的坐标,按键值的值等等。这个对象被称为事件对象 事件对象由系统自动产生 clientX、clientY 获取鼠标指针的水平坐标和垂直坐标
var x, y;
window. onload = function ( ) {
var div = document. getElementById ( "box" ) ;
div. onmousemove = function ( e ) {
x = e. clientX;
y = e. clientY;
console. log ( x, y) ;
} ;
} ;
事件冒泡
事件冒泡就是事件的向上传导机制,当后代的事件被触发后,其祖先元素的相同事件也会被触发 可以通过:事件对象.canceBubble = true (cance:通过 bubble:气泡) 开发中事件冒泡大多情况都有用
window. onload = function ( ) {
var sp = document. getElementById ( "sp" ) ;
sp. onclick = function ( e ) {
this . style. color = "red" ;
console. log ( "span被点击" ) ;
e. cancelBubble = true ;
} ;
var box = document. getElementById ( "box" ) ;
box. onclick = function ( ) {
console. log ( "div被点击" ) ;
} ;
} ;
事件委托
将事件统一绑定为祖先元素,当后代元素上的事件被触发时,会一直冒泡到祖先元素上,从而通过祖先元素的回调函数来处理事件 事件委托是利用了事件的冒泡机制,委托可以减少事件的绑定次数,提高程序的性能
window. onload = function ( ) {
var all = document. getElementsByTagName ( 'a' ) ;
var ul = $ ( 'add' ) ;
$ ( 'btn' ) . onclick = function ( ) {
var li = document. createElement ( 'li' ) ;
li. innerHTML = '<a href="javascript:;" class="link">连接四</a>' ;
ul. append ( li) ;
} ;
ul. onclick = function ( e ) {
if ( e. target. className == 'link' ) {
console. log ( 'a被点击' ) ;
} ;
} ;
} ;
事件绑定
元素对象.事件名称 = 回调函数
只能一个元素的相同事件只能绑定一次 不能绑定多个(会被覆盖) 元素对象.addEventListener()
参数:
事件字符串:去掉on 回调函数:事件触发时需要响应的函数 是否在捕获阶段出发事件,boolean样式,一般设置为false 一个元素的相同事件可以多次绑定 执行的顺序为绑定的顺序 元素.attachEvent()
参数:
一个元素的相同事件,可以被多次绑定,执行顺序为倒序 仅支持IE浏览器
window. onload = function ( ) {
input. addEventListener (
"click" ,
function ( ) {
console. log ( "1" ) ;
} ,
false
) ;
input. addEventListener (
"click" ,
function ( ) {
console. log ( "2" ) ;
} ,
false
) ;
input. attachEvent ( "onclick" , function ( ) {
console. log ( "1" ) ;
} ) ;
input. attachEvent ( "onclick" , function ( ) {
console. log ( "2" ) ;
} ) ;
window. onload = function ( ) {
var input = document. getElementById ( "btn" ) ;
bind ( input, "click" , function ( ) {
console. log ( this . nodeName) ;
console. log ( "----------" ) ;
} ) ;
function bind ( obj, eventStr, callBack ) {
if ( obj. addEventListener) {
obj. addEventListener ( eventStr, callBack, false ) ;
} else if ( attachEvent) {
obj. attachEvent ( "on" + eventStr, function ( ) {
callBack . call ( obj) ;
} ) ;
} else {
obj[ "on" + eventStr] = callBack;
}
}
} ;
事件传播
function bind ( obj, eventStr, callBack ) {
if ( obj. addEventListener) {
obj. addEventListener ( eventStr, callBack, false ) ;
} else if ( obj. attachEvent) {
obj. attachEvent ( "on" + eventStr, callBack) ;
} else {
obj[ "on" + eventStr] = callBack;
}
}
bind ( box1, "click" , function ( ) {
console. log ( "1" ) ;
} ) ;
bind ( box2, "click" , function ( ) {
console. log ( "2" ) ;
} ) ;
bind ( box3, "click" , function ( ) {
console. log ( "3" ) ;
} ) ;
键盘事件
onkeydown 键盘按下事件 事件对象.keyCode 获取按钮的编码 onkeyup 键盘松开事件
document. onkeydown = function ( e ) {
console. log ( e. keyCode) ;
if ( e. keyCode == 13 ) {
console. log ( "回车" ) ;
}
if ( e. keyCode == 67 && e. ctrlKey) {
console. log ( "ctrl + c" ) ;
}
document. onkeyup = function ( ) {
console. log ( "键盘松开" ) ;
} ;
document. onkeypress = function ( ) {
console. log ( "按下再松开" ) ;
} ;
} ;
var input = document. querySelector ( "input" ) ;
input. onkeydown = function ( e ) {
console. log ( e) ;
if (
( e. keyCode >= 48 && e. keyCode <= 57 ) ||
( e. keyCode >= 96 && e. keyCode <= 105 )
) {
return false ;
}
} ;
} ;
滚动事件
window. onload = function ( ) {
$ ( "box" ) . onwheel = function ( e ) {
e. preventDefault ( ) ;
if ( e. deltaY > 0 ) {
$ ( "box" ) . style. height = $ ( "box" ) . clientHeight + 10 + "px" ;
} else if ( e. deltaY < 0 ) {
$ ( "box" ) . style. height = $ ( "box" ) . clientHeight - 10 + "px" ;
}
} ;
} ;
键盘移动
window. onload = function ( ) {
var div = document. querySelector ( "div" ) ;
document. onkeydown = function ( e ) {
e = e || window. event;
var speed = 10 ;
switch ( e. keyCode) {
case 37 :
div. style. left = div. offsetLeft - speed + "px" ;
break ;
case 39 :
div. style. left = div. offsetLeft + speed + "px" ;
break ;
case 38 :
div. style. top = div. offsetTop - speed + "px" ;
break ;
case 40 :
div. style. top = div. offsetTop + speed + "px" ;
break ;
default :
break ;
}
} ;
} ;