
使用 对象.事件=函数形式绑定事件 它只能同时为同一个元素绑定同一事件一次 不能绑定多次,如果绑定多次,后面的会覆盖掉前面的
btn.onclick=function(){
alert(1);
};
btn.onclick=function(){
alert(2);
};使用addEventListener()可以同时为一个元素的相同事件绑定多个响应函数 这样当事件被触发时,响应函数将会按照函数的绑定顺序执行
这个方法不支持IE8及以下的浏览器
btn.addEventListener("click",function(){
alert(1);
},false);
btn.addEventListener("click",function(){
alert(2);
},false);不同的是它是后绑定先执行,执行顺序和addEventListener()相反btn.attachEvent("onclick",function(){
alert(1);
});
btn.attachEvent("onclick",function(){
alert(2);
});addEventListener()中的this,是绑定事件的对象
attachEvent()中的this,是window
需要统一两个方法的this
btn.addEventListener("click",function(){
console.log(this);
},false);
btn.attachEvent("onclick",function(){
console.log(this);
alert(this);
});定义一个事件
参数: obj 要绑定事件的对象 eventStr 事件的字符串(不要on) callback 回调函数
三个形参:
function bind(obj,evenStr,callback){
// addEventListener(事件的字符串,回调字符串,布尔值)
obj.addEventListener(evenStr,callback,false);
} // 调动实参 btn元素 —— 事件(addEventListener不需要加 on) —— 回调函数
bind(btn,"dblclick",function(){
alert(1);
})
bind(btn,"mouseenter",function(){
console.log("123")
})关于事件的传播网景公司和微软公司有不同的理解
W3C综合了两个公司的方案,将事件传播分成了三个阶段
I8及以下的浏览器中没有捕获阶段
W3C:万维网联盟,是Web技术领域最具权威和影响力的国际中立性技术标准机构*
<style type="text/css">
#box1{
width: 300px;
height: 300px;
background-color: yellowgreen;
}
#box2{
width: 200px;
height: 200px;
background-color: yellow;
}
#box3{
width: 150px;
height: 150px;
background-color: skyblue;
}
</style>
<body>
<div id="box1">box1
<div id="box2">box2
<div id="box3">box3</div>
</div>
</div>
</body>/*
参数:
obj 要绑定事件的对象
eventStr 事件的字符串(不要on)
callback 回调函数
*/
function bind(obj,evenStr,callback){
if(obj.addEventListener){
//大部分浏览器中给元素绑定事件
obj.addEventListener(evenStr,callback,false);
}else{
//ie8 及一下浏览器
//this的值由调用对象决定
obj.attachEvent("on"+evenStr,function(){
callback.call(obj);
});
}
}
window.onload=function(){
/*
* 分别为三个div绑定单击响应函数
*/
var box1 = document.getElementById("box1");
var box2 = document.getElementById("box2");
var box3 = document.getElementById("box3");
bind(box1,"click",function(){
alert("box1的点击事件被触发了");
});
bind(box2,"click",function(){
alert("box2的点击事件被触发了");
});
bind(box3,"click",function(){
alert("box3的点击事件被触发了");
});
}onkeydown: 键盘被按下事件
onkeyup: 键盘被松开的事件
键盘事件一般都会绑定给一些可以获取焦点的对象或则是document
var txt=document.getElementById("txt");
txt.onkeydown=function(event){
event=event||window.event;
/*数值取值范围48~57*/
//不允许文本框中输入数字
if(event.keyCode>=48&&event.keyCode<=57){
//在文本框中输入内容,属于onkeydown的默认行为,
//如果onkeydown中取消默认行为,则输入的内容,不会出现在本文本框中
return false;
}
}键盘的事件对象 可以通过keyCode属性来获取按键的编码,该编码就是ASCII码,可以根据码表进行对照用户按下了哪个按键
除了keyCode,事件对象中还提供了几个属性
altKey
ctrlKey
shiftKey
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>82JavaScript键盘事件_键盘移动div</title>
<style>
div{
width: 100px;
height: 100px;
background: #DE9E9F;
position: absolute;
top: 100px;
left:100px;
}
</style>
</head>
<body>
<div></div>
<script>
window.onload=function(){
var box=document.getElementsByTagName("div")[0];
console.log(box);
document.onkeydown=function(event){
//事件对象
event=event||window.event;
///event.keyCode 37 箭头向左
///event.keyCode 38 箭头向上
///event.keyCode 39 箭头向右
///event.keyCode 40 箭头向下
var speed=50;
/*if(event.keyCode==37){
box.style.left=box.offsetLeft-20+"px";
}else if(event.keyCode==38){
box.style.top=box.offsetTop-20+"px";
}else if(event.keyCode==39){
box.style.left=box.offsetLeft+20+"px";
}else if(event.keyCode==40){
box.style.top=box.offsetTop+20+"px";
}*/
// console.log(event.keyCode);
switch(event.keyCode){
case 37:
box.style.left=box.offsetLeft-speed+"px";
break;
case 38:
box.style.top=box.offsetTop-speed+"px";
break;
case 39:
box.style.left=box.offsetLeft+speed+"px";
break;
case 40:
box.style.top=box.offsetTop+speed+"px";
break;
default:
break;
}
}
}
</script>
</body>
</html>JS的程序的执行速度是非常非常快的 如果希望一段程序,可以每间隔一段时间执行一次,可以使用定时调用
setInterval()
clearInterval() 这个方法可以关闭定时器
window.onload = function(){
//获取count
var count = document.getElementById("count");
var num = 1;
var timer = setInterval(function(){
count.innerHTML = num++;
if(num == 11){
//关闭定时器
// clearInterval(timer);
// 到十时下一步切换为一
num = 1;
}
},1000);
}延时调用
var timer = setTimeout(function(){
console.log(num++);
},3000);
//使用clearTimeout()来关闭一个延时调用
clearTimeout(timer);