1、概述
2、使用简单事件处理器
用时间属性创建一个简单时间处理器(simple event handler)。元素为他们支持
例如onmouseover事件对应全局时间mouseover
<body>
<p onmouseover="this.style.background='yellow'; this.style.color='red'" onmouseout="this.style.background='green'; this.style.color='black'">
there is some things to do something, By the time add,countleess zhen
</p>
<script>
</script>
</body>
3、简单的时间处理函数
<head>
<style type="text/css">
p{ border:medium double black;background-color: blanchedalmond; }
</style>
<script>
function handmouseover(elem){
elem.style.background="green";
elem.style.color="red";
}
function handmouseout(elem){
elem.style.background="yellow";
elem.style.color="blue";
}
</script>
</head>
<body>
<p onmouseover="handmouseover(this)" onmouseout="handmouseout(this)">
there is some things to do something, By the time add,countleess zhen
</p>
</body>
4、使用DOM和事件对象
<head>
<style type="text/css">
p{ border:medium double black;background-color: blanchedalmond; }
</style>
</head>
<body>
<p >
there is some things to do something, By the time add,countleess zhen
</p>
<p >
这里是另外一些文本,还是一些文本风扇电机开发商的发时代峻峰
</p>
<script>
var pElem=document.getElementsByTagName("p");
for(var i=0;i<pElem.length;i++){
pElem[i].onmouseover=handmouseover;
pElem[i].onmouseout=handmouseout;
}
function handmouseover(elem){
console.log("hello");
elem.target.style.background='green';
elem.target.style.color='red';
}
function handmouseout(elem){
console.log("world");
//target是属性,用来获取触发的HTMLElement
elem.target.style.removeProperty('color');
elem.target.style.removeProperty('background');
}
</script>
</body>
未实现,报removeProperty属性错误
5、使用addEventListener和removeEventListener添加事件
<head>
<style type="text/css">
p{ border:medium double black;background-color: blanchedalmond; }
</style>
</head>
<body>
<p >
there is some things to do something, By the time add,countleess zhen
</p>
<p id="block2" >
这里是另外一些文本,还是一些文本风扇电机开发商的发时代峻峰
</p>
<button id="press">removeEvent</button>
<script>
var pElem=document.getElementsByTagName("p");
var press=document.getElementById("press");
press.onclick=function(){
document.getElementById("block2").removeEventListener("mouseout",handmouseout);
}
for(var i=0;i<pElem.length;i++){
pElem[i].addEventListener("mouseover",handmouseover);
pElem[i].addEventListener("mouseout",handmouseout);
}
function handmouseover(elem){
console.log("hello");
elem.target.style.background='green';
elem.target.style.color='red';
}
function handmouseout(elem){
console.log("world");
elem.target.style.removeProperty('color');
elem.target.style.removeProperty('background');
}
</script>
</body>
6、使用Type属性,按类型区分时间
<head>
<style type="text/css">
p{ border:medium double black;background-color: blanchedalmond; }
</style>
</head>
<body>
<p >
there is some things to do something, By the time add,countleess zhen
</p>
<p id="block2" >
这里是另外一些文本,还是一些文本风扇电机开发商的发时代峻峰
</p>
<button id="press">removeEvent</button>
<script>
var pElem=document.getElementsByTagName("p");
for(var i=0;i<pElem.length;i++){
pElem[i].onmouseover=handMouseEvent;
pElem[i].onmouseout=handMouseEvent;
}
function handMouseEvent(e){
if(e.type=="mouseover"){
e.target.style.background='yellow';
e.target.style.color="red";
}else{
e.target.style.removeProperty('color');
e.target.style.removeProperty('background');
}
}
function handmouseover(elem){
console.log("hello");
elem.target.style.background='green';
elem.target.style.color='red';
}
function handmouseout(elem){
console.log("world");
elem.style.style.removeProperty('color');
elem.style.style.removeProperty('background');
}
</script>
</body>
7、理解事件流
一个事件的生命周期包含三个阶段:
- 捕捉(capture)
- 目标(target)
- 冒泡(bubbling)
8、理解捕捉对象(理解事件冒泡)
<head>
<style type="text/css">
p{ border:medium double black;background-color: blanchedalmond; padding: 10px; }
span{background-color: green; color: red; padding: 2px;}
</style>
</head>
<body>
<p id="block1" >
there is some things to do <span id="banana">something</span>, By the time add,countleess zhen
</p>
<script>
var banana=document.getElementById("banana");
var textblock=document.getElementById("block1");
banana.addEventListener("mouseover",handleMouseEvent);
banana.addEventListener("mouseout",handleMouseEvent);
textblock.addEventListener("mouseover",handleDescendantEvent,true);//true决定是否事件冒泡
textblock.addEventListener("mouseout",handleDescendantEvent,true);
function handleMouseEvent(e){
if(e.type="mouseover"){
e.target.style.background="green";
e.target.style.color="black";
}else{
e.target.style.removeProperty("color");
e.target.style.removeProperty("background");
}
}
function handleDescendantEvent(e){
if(e.type=="mouseover" && e.eventPhase==Event.CAPTURING_PHASE){
e.target.style.border="3px solid red";
e.currentTarget.style.border="5px double black";
}else if(e.type=="mouseout" && e.eventPhase==Event.CAPTURING_PHASE){
e.target.style.removeProperty("border");
e.currentTarget.style.removeProperty("border");
}
}
</script>
</body>
9、阻止事件流前进(冒泡)
<head>
<style type="text/css">
p{ border:medium double black;background-color: blanchedalmond; padding: 10px; }
span{background-color: green; color: red; padding: 2px;}
</style>
</head>
<body>
<p id="block1" >
there is some things to do <span id="banana">something</span>, By the time add,countleess zhen
</p>
<script>
var banana=document.getElementById("banana");
var textblock=document.getElementById("block1");
banana.addEventListener("mouseover",handleMouseEvent);
banana.addEventListener("mouseout",handleMouseEvent);
textblock.addEventListener("mouseover",handleDescendantEvent,true);//true决定是否事件冒泡
textblock.addEventListener("mouseout",handleDescendantEvent,true);
function handleMouseEvent(e){
if(e.type="mouseover"){
e.target.style.background="green";
e.target.style.color="black";
}else{
e.target.style.removeProperty("color");
e.target.style.removeProperty("background");
}
}
function handleDescendantEvent(e){
if(e.type=="mouseover" && e.eventPhase==Event.CAPTURING_PHASE){
e.target.style.border="3px solid red";
e.currentTarget.style.border="5px double black";
}else if(e.type=="mouseout" && e.eventPhase==Event.CAPTURING_PHASE){
e.target.style.removeProperty("border");
e.currentTarget.style.removeProperty("border");
}
e.stopPropagation();//阻止事件冒泡
}
</script>
</body>
eventPhase属性
10、目标阶段
元素上的事件被触发
11、冒泡阶段
<head>
<style type="text/css">
p{ border:medium double black;background-color: blanchedalmond; padding: 10px; }
span{background-color: green; color: red; padding: 2px;}
</style>
</head>
<body>
<p id="block1" >
there is some things to do <span id="banana">something</span>, By the time add,countleess zhen
</p>
<script>
var banana=document.getElementById("banana");
var textblock=document.getElementById("block1");
banana.addEventListener("mouseover",handleMouseEvent);
banana.addEventListener("mouseout",handleMouseEvent);
textblock.addEventListener("mouseover",handleDescendantEvent,true);//true决定是否事件冒泡
textblock.addEventListener("mouseout",handleDescendantEvent,true);
textblock.addEventListener("mouseover",handleBubbleEvent,false);
textblock.addEventListener("mouseout",handleBubbleEvent,false);
function handleBubbleEvent(e){
if(e.type=="mouseover" && e.eventPhase==Event.BUBBLING_PHASE){
e.target.style.textTransform="uppercase";
}else if(e.type=="mouseout" && e.eventPhase==Event.BUBBLING_PHASE){
e.target.style.textTransform="none";
}
}
function handleMouseEvent(e){
if(e.type="mouseover"){
e.target.style.background="green";
e.target.style.color="black";
}else{
e.target.style.removeProperty("color");
e.target.style.removeProperty("background");
}
}
function handleDescendantEvent(e){
if(e.type=="mouseover" && e.eventPhase==Event.CAPTURING_PHASE){
e.target.style.border="3px solid red";
e.currentTarget.style.border="5px double black";
}else if(e.type=="mouseout" && e.eventPhase==Event.CAPTURING_PHASE){
e.target.style.removeProperty("border");
e.currentTarget.style.removeProperty("border");
}
}
</script>
</body>
12、preventDefault使用可撤销事件
有些元素由默认属性,可以调用preventDefault函数阻止默认行为的执行。
下例中使用了confirm()函数,如果点击cancel按钮,则会调用e.preventDefault(),意味着如果点cancel就不再跳转(执行操作)
但是调用e.preventDefault()函数,依然要经历捕捉、目标和冒泡阶段。
<head>
<style type="text/css">
a{color:green; border: thin solid black;}
</style>
</head>
<body>
<p id="block1" >
there is some things to do <span id="banana">something</span>, By the time add,countleess zhen<br/>
<a href="http://www.sina.com">visit sina</a><br/>
<a href="http://www.sohu.com">visit w3c</a>
</p>
<script>
function handleClick(e){
if(!confirm("do u want to navigate to"+e.target+"?")){
e.preventDefault();
}
}
var elems=document.querySelectorAll("a");
for(var i=0;i<elems.length; i++){
elems[i].addEventListener("click",handleClick,false);
}
</script>
</body>
13、使用HTML事件-文档和窗口事件
document对象的事件
windows对象的事件
14、使用鼠标事件
mouse事件被触发时,浏览器会指派一个mouseEvent对象。
实时读取p标签的坐标轴
<head>
<style type="text/css">
p{color:green; border: thin solid black;}
</style>
</head>
<body>
<p id="block1" >
there is some things to do <span id="banana">something</span>,<br/> By the time add,countleess zhen<br/>ngs to do <span id="banana">something</span>
</p>
<table border="1">
<tr><th>Type:</th><td id="eType"></td></tr>
<tr><th>X:</th><td id="eX"></td></tr>
<tr><th>X:</th><td id="eY"></td></tr>
</table>
<script>
var textblock=document.getElementById("block1");
var typeCell=document.getElementById("eType");
var xCell=document.getElementById("eX");
var yCell=document.getElementById("eY");
textblock.addEventListener("mouseover",handMouseEvent,false);
textblock.addEventListener("mouseout",handMouseEvent,false);
textblock.addEventListener("mousemove",handMouseEvent,false);
function handMouseEvent(e){
if(e.eventPhase==Event.AT_TARGET){
typeCell.innerHTML=e.type;
xCell.innerHTML=e.clientX;
yCell.innerHTML=e.clientY;
if(e.type=="mouseover"){
e.target.style.backgound="black";
e.target.style.color="white";
}else{
e.target.style.removeProperty("color");
e.target.style.removeProperty("background");
}
}
}
</script>
</body>
14、FocusEvent对象使用键盘焦点事件
<body>
<form>
<p>
<label for="fave">Fruit:<input autofocus id="fave" name="fave"></label>
</p>
<p>
<label for="name">Name:<input autofocus id="name" name="name"></label>
</p>
<button type="submit">submit</button>
<button type="reset">reset</button>
</form>
<script>
var inputElems=document.getElementsByTagName("input");
for(var i=0;i<inputElems.length;i++){
inputElems[i].onfocus=handFocusEnvent;
inputElems[i].onblur=handFocusEnvent;
}
function handFocusEnvent(e){
if(e.type="focus"){
e.target.style.backgroundColor="lightGray";
e.target.style.border="thick double red";
}else{
e.target.style.removeProperty("background-color");
e.target.style.removeProperty("border");
}
}
</script>
</body>
15、使用键盘事件
<body>
<form>
<p>
<label for="fave">Fruit:<input autofocus id="fave" name="fave"></label>
</p>
<p>
<label for="name">Name:<input autofocus id="name" name="name"></label>
</p>
<button type="submit">submit</button>
<button type="reset">reset</button>
</form>
<span id="message">hello</span>
<script>
var inputElems=document.getElementsByTagName("input");
for(var i=0;i<inputElems.length;i++){
inputElems[i].onkeyup=handKeyboardEvent;
}
function handKeyboardEvent(e){
var mess=document.getElementById("message");
mess.innerHTML="key pressed"+e.keyCode+"Char:"+String.fromCharCode(e.keyCode);
}
</script>
</body>
16、使用表单事件
30章、使用表单专属对象
base元素:
body元素:
link元素:
meta元素等等,不一而足