JavaScript学习12:事件对象

        JavaScript事件的一个重要方面是它们拥有一些相对一致的特点,可以给我们的开发提供更多的强大功能。最方便和强大的就是事件对象了,它们可以帮你处理鼠标和键盘方面的很多事情,此外我们还可以修改一般事件的捕获或者冒泡流的函数。

        在上篇博客中我们已经对事件有了一个基本的认识,结尾处我们提到了事件处理函数。事件处理函数的一个标准特性是,以某些方式访问的事件对象包含有关于当前事件的上下文信息。事件处理由三部分组成:对象.事件处理函数=函数。

        那么事件对象又是什么呢?它在哪里?

        当触发某个事件时,会产生一个事件对象,这个对象包含着所有与事件有关的信息。包括导致事件的元素、事件的类型、以及其他与特定事件相关的信息。

        事件对象,我们一般称作为event对象,这个对象是浏览器通过函数把这个对象作为参数传递过来的。那么首先,我们就必须验证一下,在执行函数中有没有传递参数,是否可以得到隐藏的参数。     

<span style="font-size:18px;">function box(){
	alert(arguments.length);
}
window.box();          //普通空参函数,返回值为0,没有得到任何传递的参数

document.οnclick=box;  //事件绑定函数,返回值为1,得到一个隐藏的参数</span>

        通过上面两组函数的比较,发现,通过事件绑定的执行函数是可以得到一个隐藏参数的,这就说明,浏览器会自动分配一个参数,这个参数其实就是event对象。我们可以将这个对象输出来看看,是什么   

<span style="font-size:18px;">document.οnclick=function(){
	alert(arguments[0]);  //打印出来的是MouseEvent,即鼠标事件对象
}</span>

        鼠标事件

        鼠标事件是Web上面最为常用的一类事件,毕竟鼠标还是最主要的定位设备。那么我们可以通过事件对象获取到鼠标按钮信息和屏幕坐标等等。    

<span style="font-size:18px;">//跨浏览器左中右键单击响应
function getButton(evt){
	var e = evt||window.event;
	if(evt){
		return e.button;
	}else if(window.event){
		switch(e.button){
			case 1:
				return 0;
			case 4:
				return 1;
			case 2:
				return 2;
		}
	}
}
document.οnmοuseup=function(evt){
	if(getButton(evt)==0){
		alert('您按下了左键!');
	}else if(getButton(evt)==1){
		alert('您按下了中键!');
	}else if(getButton(evt)==2){
		alert('您按下了右键!');
	}
};


//获取可视区及屏幕区的坐标
document.οnclick=function(evt){
	var e=evt||window.event;
	alert(e.clientX+','+e.clientY+','+e.screenX+','+e.screenY);
};</span>

        键盘事件

        用户在使用键盘时会触发键盘事件。DOM2级事件最初规定了键盘事件,结果又删除了相应的内容,最终还是使用了最初的键盘事件,不过IE9已经开始支持DOM3级键盘事件了。

        1键码

        在发生keydown和keyup事件时,event对象的keyCode属性中会包含一个代码,与键盘上一个特定的键对应。    

<span style="font-size:18px;">document.οnkeydοwn=function(evt){
	alert(evt.keyCode);
};</span>

        2字符编码

        Firefox、Chrome和Safari的event对象都支持一个charCode属性,这个属性只有在发生keypress事件时才包含值,而且这个值是按下的那个键所代表字符的ASCII编码。此时的keyCode通常等于0或者可能是按键的编码。

<span style="font-size:18px;">function getCharCode(evt){
	var e=evt||window.event;
	if(typeof e.charCode=='number'){
		return e.charCode;
	}else{
		return e.keyCode;
	}
}</span>

        事件流

        最后我们要补充一个知识点,那就是事件流。这个我在上篇博客中也提到过,只不过当时认识并不是很深刻。事件流是描述的从页面接受事件的顺序,当几个都具有事件的元素层叠在一起的时候,那么你点击其中一个元素,并不是只有当前被点击的元素会触发事件,而层叠在你点击范围的所有元素都会触发事件。事件流包括两种模式:冒泡和捕获。

        事件冒泡,是从里向外逐个触发;事件捕获,是从外向里逐个触发,下面的图可以形象的说明这点:

      

        小结一下:对于事件的学习,还在进一步的加深过程中,事件对象的了解,让我对事件的认识更加全面,同时也为我灵活使用事件打下了基础。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值