Web浏览器能够发生的事件有很多种类型,不同的事件类型有不同的事件信息。DOM3级的事件类型主要包括:UI事件,用户与页面上的元素交互时触发;焦点事件,元素获得或失去焦点触发;鼠标事件,用户通过鼠标在页面上执行操作时触发;滚轮事件,使用鼠标滚轮时触发;文本事件,当在文档中输入文本时触发;键盘事件,用户通过键盘在页面上操作触发;合成事件,当为IME输入字符时触发;变动事件,底层DOM结构发生变化时触发。

  • UI事件

  UI事件的触发并不一定是由用户操作触发的,包括:load,页面完全加载后在window上触发该事件、当所有框架都加载完毕时触发、当图片加载完毕时在img上触发、当嵌入的元素加载完成时在object上面触发;unload事件,当页面完全卸载后在window上面触发、当所有框架都卸载完成时在框架集上触发、当嵌入的内容卸载完毕后在object上触发;abort事件,在用户停止下载过程时,如果嵌入的内容未加载完成,则在object上面触发;error事件,当发生JavaScript脚本错误时触发,当无法加载图像时,在img元素上触发,当无法加载嵌入内容时在object上触发,当框架无法加载时触发;select事件,当用户选择文本框的内容时触发;resize事件,当浏览器窗口大小改变时触发;scroll事件,当用户滚动带滚动条的元素时触发。

 EventUtil.addEvent(window,"load",function(){
console.log(document.getElementById("aa").innerHTML);//222 });

  上面的代码添加了load事件,当页面加载完成后就会触发该事件。使用load事件能够确保事件是在页面元素加载完成后触发,不活出现错误。如果我们在页面元素位加载完成,就去获取页面上的元素,则会产生错误。

  

 var img=document.getElementById("imgtest");
EventUtil.addEvent(img,"load",function(event){
event=EventUtil.getEvent(event); console.log(event.currentTarget.src);
});

  上面的代码在img的图片加载完成后,会触发load事件,在load事件中,我们获取了event对象,并通过event对象的属性currentTarget取得了事件处理程序操作的元素。

 var sc = document.createElement("script");
sc.src="js/checkboxdemo.js";
EventUtil.addEvent(sc,"load",function(event){
console.log("loaded");
});
document.head.appendChild(sc);

  上面的代码,动态向head添加脚本文件,并且绑定了load事件。

  unload事件是与load事件对立的一个事件,这个事件在完全卸载后触发。当用户从一个页面切换到另一个页面就会触发该事件。需要注意的是,在unload事件中不能dom元素进行操作,因为当unload事件执行的时候,所有的页面元素都已经不存在。

  当浏览器大小发生改变的时候会触发resize事件。

 EventUtil.addEvent(window,"resize",function(event){
alert("resize");
});

  需要注意的是不要再resize中添加大量的计算代码,因为在浏览器窗口改变的时候,resize事件会被频繁的触发,会影响浏览器的性能。

  • 焦点事件

  焦点事件会在页面获得或失去焦点时触发。利用这些事件,并于document.hasFocus()方法和document.activeElement属性配合,可以知晓用户在页面上的行为。有6个焦点事件:blur事件,元素失去焦点时触发事件,不会冒泡;focus事件,元素获得焦点时触发,不会冒泡;focusin事件,元素获得焦点时触发,会冒泡;focusout事件,元素失去焦点时触发,会冒泡。当用户在页面上由一个元素移动到另一个元素事件触发的顺序为:focusout事件,在失去焦点的元素上触发;focusin事件,在获得焦点的元素上触发;blur事件,在失去焦点的元素上触发;focus事件,在获得焦点的元素上触发。

  • 鼠标与滚轮事件  

  鼠标事件是WEB开发中最常用的事件。DOM3级中定义了9个鼠标事件:click事件,用户单击鼠标左键触发的事件或者按下enter键触发;dbclick事件,用户双击鼠标左键的时候触发;mousedown事件,用户按下鼠标按钮时触发;mouseenter事件,用户光标从元素外部首次移动到元素范围之内触发。这个事件不冒泡,而且光标在移动到后代元素上不会触发;mouseleave事件,在位于元素上方的事件移动到元素范围之外时触发;mousemove事件,鼠标在元素内部移动时重复重复;mouseout事件,在鼠标指针位于一个元素上方然后用于将其移入另一个元素时触发;mouseover事件,鼠标位于元素外部,然后用户首次将其移入元素内部触发;mouseup事件,释放鼠标时触发。

  只有在同一个元素上触发mousedown和mouseup事件,才会触发click事件。只有触发两次click事件,才会触发dbclick事件。

 var img=document.getElementById("imgtest");
EventUtil.addEvent(img,"mousedown",function(event){
console.log(event.type);
});
EventUtil.addEvent(img,"mouseup",function(event){
console.log(event.type);
});
EventUtil.addEvent(img,"click",function(event){
console.log(event.type);
});
EventUtil.addEvent(img,"dblclick",function(event){
console.log(event.type);
});

  上面的代码在img上注册了mousedown、mouseup、click、dblclick事件。当双击img的时候,依次输出:mousedown、mouseup、click、mousedown、mouseup、click、dblclick。

  鼠标滚轮事件就是mousewheel事件,这个事件跟踪鼠标滚轮。

  

 EventUtil.addEvent(document.getElementById("imgtest"),"mousemove",function(event){
event=EventUtil.getEvent();
var pageX=event.pageX,
pageY=event.pageY;
if(!event.pageX){
pageX=event.clientX+(document.body.scrollLeft||document.documentElement.scrollLeft);
}
if(!pageY){
pageY=event.clientY+(document.body.scrollTop||document.documentElement.scrollTop);
}
console.log(pageX+","+pageY);
})

  上面的代码能够实时显示鼠标的页面位置信息。即使有了滚动条,依然能够正确计算。

  • 键盘与文本事件

  用户在使用键盘时会触发键盘事件,有3个事件:keydown事件,当用户按下键盘上任意键时触发,如果按住不放会重复触发此事件;keypress事件,当用户按下键盘上的字符键时触发,如果按住不放会重复触发此事件;keyup事件,当释放键盘上的键时触发。

  用户按下键盘上的字符键时,首先会触发keydown事件,然后是keypress事件,最后触发keyup事件。其中keydown和keypress是在文本框发生变化之前触发,keyup是在文本框变化之后触发。如果按下的是非字符集,则会触发keydown和keyup事件。

  在发生keydown和keyup事件时,event对象的keyCode属性会包含一个代码,与键盘上一个特定的键对应。对数字字母字符集,keyCode的属性值与ASCII码中的小写字母或数字的编码相同。

 EventUtil.addEvent(document.getElementById("inputtext"),"keyup",function(event){
event=EventUtil.getEvent(event);
console.log(event.keyCode);
})
  • 复合事件  

  复合事件是DOM3级中新增加的一类事件,用于处理IME的输入序列。IME可以让用户输入在键盘上找不到的字符。IME通常需要同时多个字符来确定一个字符,比如中文的输入。包括3个事件:compositionstart事件,IME打开时触发,表示要输入了;compositionupdate事件,插入新字符时触发;compositionend事件,在IME复合系统关闭时触发,返回正常输入状态。

 var textbox=document.getElementById("inputtext");
EventUtil.addEvent(textbox,"compositionstart",function(event){
event=EventUtil.getEvent(event);
console.log(event.data);
});
EventUtil.addEvent(textbox,"compositionupdate",function(event){
event=EventUtil.getEvent(event);
console.log(event.data);
});
EventUtil.addEvent(textbox,"compositionend",function(event){
event=EventUtil.getEvent(event);
console.log(event.data);
});

浅谈JavaScript的事件(事件类型)的更多相关文章

  1. 浅谈JavaScript中的事件

    引言 Html页面与JavaScript之间的交互是通过事件来完成的.事件,就是文档或者浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(处理程序)来预订事件,以便事件发生时执行相应的代码.这在传 ...

  2. 浅谈javascript的Touch事件

    js的touch事件,一般用于移动端的触屏滑动 代码如下: $(function(){ document.addEventListener("touchmove", _touch, ...

  3. 浅谈Javascript单线程和事件循环

    单线程 Javascript 是单线程的,意味着不会有其他线程来竞争.为什么是单线程呢? 假设 Javascript 是多线程的,有两个线程,分别对同一个元素进行操作: function change ...

  4. 浅谈javascript函数节流

    浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...

  5. 浅谈JavaScript浮点数及其运算

    原文:浅谈JavaScript浮点数及其运算     JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题 ...

  6. 浅谈 JavaScript 编程语言的编码规范

    对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...

  7. 浅谈javascript的原型及原型链

    浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为 ...

  8. 浅谈JavaScript中的null和undefined

    浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...

  9. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  10. 浅谈JavaScript中的正则表达式(适用初学者观看)

    浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...

随机推荐

  1. 用adb命令查看apk版本

    adb devices  (显示连接的设备) adb root   (获取手机root权限) adb remount  (重新挂载系统分区,使系统分区重新可写) adb shell (进入目标设备的L ...

  2. dig命令

      dig(域信息搜索器)命令是一个用于询问 DNS 域名服务器的灵活的工具.它执行 DNS 搜索,显示从受请求的域名服务器返回的答复.多数 DNS 管理员利用 dig 作为 DNS 问题的故障诊断, ...

  3. ssh密码

  4. 更改dede网站地图模板样式

    dedecms后台可以生成2个地图,一个是网站地图,html格式的,一个是rss地图,同样默认这2个地图生成之后也会有底部的dedecms版权声明,这个时候我们需要分别更改这2个模板才可以去掉底部的版 ...

  5. LNMP一键安装包

    http://www.aliweihu.com/333.html LNMP一键安装包是什么? LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RadHat.Debian/Ub ...

  6. ip001

    ----------- <?phpheader('Content-type:text/html;charset=utf8');// <script type="text/java ...

  7. OpenCV鼠标滑轮事件

    鼠标的滑轮事件实现图像的缩放很方便,具体在回调函数中如下写: 其中scale可以在外部定义为全局变量,通过响应CV_EVENT_MOUSEWHEEL滑轮事件获取Scale的具体值. 获取Scale值需 ...

  8. 【开发技术】Beyond Compare

    黑色表示左右两侧的文件(夹)是一样的; 紫色表示右(左)侧是完全没有的,这时我们右击这个文件(夹),选择“复制到右(左)侧”即可: 红色表示两边都有这个文件(夹),但不完全相同,这时你就要权衡一下修改 ...

  9. beetl 配置多视图解析器

    如下配置,指定了三个视图解析器,一个用于beetl页面渲染,一个用于cms,采用了beetl技术,另外一个一些遗留的页面采用jsp <bean name="beetlConfig&qu ...

  10. sersync+rsync同步

    (一)目标服务器(rsync):10.60.50.192 1.安装rsync yum -y install rsync 2.创建rsyncd.conf配置文件 vi /etc/rsyncd.conf ...