DOM 事件
2016-04-16 15:07
633 查看
事件流
事件冒泡
事件捕获
事件处理程序
事件对象
DOM 中的事件对象
IE 中的事件对象
编程练习
鼠标事件
键盘事件
IE 的事件流是事件冒泡流,而 Netscape 的事件流是事件捕获流。
Html 事件处理程序使得 Html 和 JS 的耦合性过高,进行修改时需要多处修改,被绝大多数程序员摒弃。
2、DOM0 级事件处理程序
DOM0 级事件处理程序 (用得比较多):先把元素取出来,然后为其属性添加一个事件的方法叫 DOM0 级处理程序。
它是一种较传统的方式:把一个函数赋值给一个事件处理程序的属性。
优点:简单,跨浏览器的优势。
btn.onclick = null; //删除 onclick 属性
3、DOM2 级事件处理程序
DOM2 级事件定义了两个方法:
用于处理指定和删除事件处理程序的操作:addEventListener() 和 removeEventListener()。
它们都接收三个参数:要处理的事件名(不加 on)、作为事件处理程序的函数和一个布尔值指定事件是否在捕获或冒泡阶段执行。
true - 事件句柄在捕获阶段执行。
false- 默认。事件句柄在冒泡阶段执行。
注意:IE 不支持 DOM2 级事件处理,通过 addEventListener 添加的事件只能通过 removeEventListener 来删除,传入的参数要和 add 时传入的一样。
4、IE 事件处理程序
attachEvent() 添加事件。
detachEvent() 删除事件。
这两个方法接收相同的两个参数:事件处理程序名称与事件处理函数
注意:element.onclick 完全等价于 element[‘onclick’]。
5、跨浏览器的事件处理程序
(2)、target :事件目标
(3)、stopPropagation() : 阻止事件冒泡
(4)、preventDefault() : 阻止事件的默认行为
(2)、srcElement :事件目标
(3)、cancelBubble = true : 阻止事件冒泡
(4)、returnValue = false : 阻止事件的默认行为
任务
一、获取登录按钮及整个登录面板,给登录按钮添加事件,点击时让登录层示,点击登录面板的关闭按钮,关闭整个登录层
提示:
1. 注意IE浏览器与非IE浏览器之间的兼容问题
这个位置信息保存在事件的 clientY 和 clientX 属性中。所有的浏览器都支持者两个属性。
它们的值表示事件发生时鼠标指针在视图中的水平和垂直坐标,不包括页面滚动的距离。
onkeypress : 事件会在键盘按键被按下并释放一个键时发生。
onkeyup : 事件会在键盘按键被松开时发生。
keyCode:event.keyCode , 获得当前按下键盘上按键的键码 , 回车键为13;
事件冒泡
事件捕获
事件处理程序
事件对象
DOM 中的事件对象
IE 中的事件对象
编程练习
鼠标事件
键盘事件
事件流
事件流描述的是从页面中接受事件的顺序。IE 的事件流是事件冒泡流,而 Netscape 的事件流是事件捕获流。
事件冒泡
事件冒泡,即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上转播至最不具体的节点(文档)。事件捕获
事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件。事件处理程序
1、HTML 事件处理程序Html 事件处理程序使得 Html 和 JS 的耦合性过高,进行修改时需要多处修改,被绝大多数程序员摒弃。
2、DOM0 级事件处理程序
DOM0 级事件处理程序 (用得比较多):先把元素取出来,然后为其属性添加一个事件的方法叫 DOM0 级处理程序。
它是一种较传统的方式:把一个函数赋值给一个事件处理程序的属性。
优点:简单,跨浏览器的优势。
btn.onclick = null; //删除 onclick 属性
3、DOM2 级事件处理程序
DOM2 级事件定义了两个方法:
用于处理指定和删除事件处理程序的操作:addEventListener() 和 removeEventListener()。
它们都接收三个参数:要处理的事件名(不加 on)、作为事件处理程序的函数和一个布尔值指定事件是否在捕获或冒泡阶段执行。
true - 事件句柄在捕获阶段执行。
false- 默认。事件句柄在冒泡阶段执行。
注意:IE 不支持 DOM2 级事件处理,通过 addEventListener 添加的事件只能通过 removeEventListener 来删除,传入的参数要和 add 时传入的一样。
4、IE 事件处理程序
attachEvent() 添加事件。
detachEvent() 删除事件。
这两个方法接收相同的两个参数:事件处理程序名称与事件处理函数
注意:element.onclick 完全等价于 element[‘onclick’]。
5、跨浏览器的事件处理程序
var eventUtil={ // 添加句柄 addHandler:function(element,type,handler){ if(element.addEventListener){ element.addEventListener(type,handler,false); }else if(element.attachEvent){ element.attachEvent('on'+type,handler); }else{ element['on'+type]=handler; } }, // 删除句柄 removeHandler:function(element,type,handler){ if(element.removeEventListener){ element.removeEventListener(type,handler,false); }else if(element.detachEvent){ element.detachEvent('on'+type,handler); }else{ element['on'+type]=null; } } }
事件对象
事件对象 eventDOM 中的事件对象
(1)、type : 获取事件类型(2)、target :事件目标
(3)、stopPropagation() : 阻止事件冒泡
(4)、preventDefault() : 阻止事件的默认行为
IE 中的事件对象
(1)、type : 获取事件类型(2)、srcElement :事件目标
(3)、cancelBubble = true : 阻止事件冒泡
(4)、returnValue = false : 阻止事件的默认行为
var eventUtil={ // 添加句柄 addHandler:function(element,type,handler){ if(element.addEventListener){ element.addEventListener(type,handler,false); }else if(element.attachEvent){ element.attachEvent('on'+type,handler); }else{ element['on'+type]=handler; } }, // 删除句柄 removeHandler:function(element,type,handler){ if(element.removeEventListener){ element.removeEventListener(type,handler,false); }else if(element.detachEvent){ element.detachEvent('on'+type,handler); }else{ element['on'+type]=null; } }, getEvent:function(event){ return event?event:window.event; }, getType:function(event){ return event.type; }, getElement:function(event){ return event.target || event.srcElement; }, preventDefault:function(event){ if(event.preventDefault){ event.preventDefault(); }else{ event.returnValue=false; } }, stopPropagation:function(event){ if(event.stopPropagation){ event.stopPropagation(); }else{ event.cancelBubble=true; } } }
编程练习
实现点击页面中的登录按钮,显示登录层(使用 DOM2 级监听事件!)任务
一、获取登录按钮及整个登录面板,给登录按钮添加事件,点击时让登录层示,点击登录面板的关闭按钮,关闭整个登录层
提示:
1. 注意IE浏览器与非IE浏览器之间的兼容问题
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding:0;} .head{font-size:12px;padding:6px 0 0 10px;} #login_box{width:300px;height:150px;background:#eee; border:1px solid #ccc;position:absolute;left:50%;top:50%;margin-left:-150px;margin-top:-75px;display:none;} #login_box p{height:20px;border-bottom:1px solid #ccc;font-size:12px;padding:6px 0 0 5px;font-weight:bold;} #close{width:14px;height:14px;background:url(close.png) no-repeat;position:absolute;right:4px;top:6px;} </style> <script> window.onload=function(){ var login_btn=document.getElementById('login'), login_box=document.getElementById('login_box'), close=document.getElementById('close'); // 封装添加事件监听程序 function addEvent(ele,type,hander){ // 执行代码 if(ele.addEventListener){ ele.addEventListener(type,hander,false); } else if(ele.attachEvent){ ele.attachEvent('on'+type,hander); } else { ele['on'+type]=hander; } } // 显示登录层函数 function showLogin(){ // 执行代码 login_box.style.display='block' } // 隐藏登录层函数 function hideLogin(){ // 执行代码 login_box.style.display='none' } //点击登录按钮显示登录层 // 执行代码 addEvent(login_btn,'click',showLogin); //点击关闭按钮隐藏登录层 // 执行代码 addEvent(close,'click',hideLogin);} </script> </head> <body> <div class="head">亲,您好!<input type="button" value="登 录" id="login"></div> <div id="login_box"> <p>用户登录</p><span id="close">X</span> </div> </body> </html>
鼠标事件
鼠标事件都是在浏览器窗口中的特定位置上发生的。这个位置信息保存在事件的 clientY 和 clientX 属性中。所有的浏览器都支持者两个属性。
它们的值表示事件发生时鼠标指针在视图中的水平和垂直坐标,不包括页面滚动的距离。
function getByClass(clsName,parent){ var oParent=parent?document.getElementById(parent):document, eles=[], elements=oParent.getElementsByTagName('*'); for(var i=0,l=elements.length;i<l;i++){ if(elements[i].className==clsName){ eles.push(elements[i]); } } return eles; }
键盘事件
onkeydown : 事件会在用户按下一个键盘按键时发生。onkeypress : 事件会在键盘按键被按下并释放一个键时发生。
onkeyup : 事件会在键盘按键被松开时发生。
keyCode:event.keyCode , 获得当前按下键盘上按键的键码 , 回车键为13;
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- Extjs4.0 最新最全视频教程
- Javascript中toFixed方法的改进
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 5个常见可用性错误和解决方案
- 最后一次说说闭包
- Ajax
- js数组实现图片轮播
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因