eventUtil.js(封装好的事件处理程序类)
//使用变量,类似JSON类型的js对象方式进行事件处理程序的相关逻辑封装,主要解决了浏览器兼容性问题
//单独写进js中,便于html多次进行调运
var eventUtil = {
//添加事件
addEventHandle:function(element,eventType,fn){
if(element.addEventListener){//非IE
element.addEventListener(eventType,fn,false);
}else if(element.attachEvent){//IE
element.attachEvent('on'+eventType,fn);//这里拼接上'on',调运的时候不要加on,使用click等。
}else{//不支持DOM2级,使用DOM0级方式
element['on'+eventType] = fn;//这里使用[]方式实现对象的属性添加,相当于.的作用
}
},
//删除事件
removeEventHandle:function(element,eventType,fn){
if(element.removeEventListener){//非IE,不带'on'
element.removeEventListener(eventType,fn,false);//这里传入fn,是因为DOM2级或DOM0级都可以一次给一个元素的同一个事件绑定多个程序,所以需要传入具体的程序fn进行删除
}else if(element.detachEvent){//IE,带'on'
element.detachEvent('on'+eventType,fn);
}else{//不支持DOM2级,使用DOM0级方式
element['on'+eventType] = fn;
}
},
//获取事件对象
getEvent:function(event){
return event?event:window.event;
},
//获取事件类型
getType:function(event){
return event.type;
},
//获取执行事件的目标元素
getTarget:function(event){
return event.target||event.srcElement;
},
//禁用默认行为
preventDefault:function(event){
if(event.preventDefault){
event.preventDefault();//非IE
}else{
event.returnValue = false;//针对IE
}
},
//阻止传播冒泡
stopPrapagation:function(event){
if(event.stopPrapagation){
event.stopPrapagation();//非IE
}else{
event.cancelBubble = true;//针对IE
}
}
}
close.png
myDemo7.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>编程练习7-实现登陆样式(测试事件处理程序)</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 src='eventUtil.js'></script>
<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){
eventUtil.addEventHandle(ele,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"></span>
</div>
<div style="width:0px;height:0px;position:absolute;top:-999px;left:-999px;"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="erroralert" width="1px" height="1px"><param name="AllowScriptAccess" value="always"/><param name="movie" value="http://tongji.baidu.com/logstat.swf"/><embed name="erroralert" width="1px" height="1px" allowscriptaccess="always" align="middle" src="http://tongji.baidu.com/logstat.swf" type="application/x-shockwave-flash"/></object></div></body>
</html>