JavaScript--事件

事件处理:
  一、事件源:任何一个HTML元素(节点)
  二、事件:各种操作(常见事件)
    1.鼠标
      click 单击
      dblclick 双击
      contextmenu 右击
      mouseover 移入
      mouseout 移出
      mousedown 按下
      mouseup 抬起
      mousemove 移动

    2.键盘
      keypress 键盘事件
      keydown 按下

    3.文档
      load 加载
      unload 关闭(为了兼容可使用下面函数)
      beforeunload关闭之前

    4.表单
      focus 焦点
      blur 失去焦点
      submit 提交事件
      change 改变(如下拉框选择事件)

    5.其他
      scroll 滚动事件(常用延迟加载、瀑布流技术)
      window.onscroll=function(){
        document.documentElement.scrollTop;//获取滚动条的上距离
        document.documentElement.scrollLeft;//滚动条的左距离
      }

    selectd 事件

  三、事件处理程序
    使用一个匿名或回调函数

加载事件
  第一种:
    格式: <tag on事件="事件处理程序" />
  第二种:(常用)
    <script>
      对象.on事件=事件处理程序
    </script>
  第三种:(火狐不兼容)
    <script for="事件源ID" event="on事件">事件处理程序</script>

事件对象
  属性:
    1. srcElement
    2. keyCode 键盘值

  事件 event window.event

    1. srcElement 代表事件源对象
    2. keyCode 事件发生时的键盘码 keypress , keydown keyup
    3. clientX, clientY 坐标位置
    4. screenX, screenY
    5. returnValue
    6. cancelBubble;

    document.getElementById("one").offsetHeight; //获取one对应对象的高度
    obj.offsetTop 指 obj 距离上方或上层控件的位置,整型,单位像素。
    obj.offsetLeft 指 obj 距离左方或上层控件的位置,整型,单位像素。
    obj.offsetWidth 指 obj 控件自身的宽度,整型,单位像素。
    obj.offsetHeight 指 obj 控件自身的高度,整型,单位像素。

    document.all ? 'IE' : 'others':在IE下document.all值为1,而其他浏览器下的值为0;

实例1:表单验证

 1     <body>
 2         <h3 id="hid">JavaScript实例--表单事件</h3>
 3         <form action="3.html" name="myform" method="post" onsubmit="return doSubmit()">
 4             账号:<input type="text" name="uname" onblur="checkUname()"/><br/><br/>
 5             密码:<input type="password" name="upass" onblur="checkUpass()"/><br/><br/>
 6             邮箱:<input type="text" name="email" onblur="checkEmail()"/><br/><br/>
 7             <input type="submit" value="提交"/>
 8         </form>
 9         <script type="text/javascript">
10            /*
11            //获取所有input节点,选择性的添加获得焦点事件
12            var list = document.getElementsByTagName("input");
13            for(var i=0;i<list.length;i++){
14                 if(list[i].type=="text" || list[i].type=="password"){
15                     list[i].onfocus = function(){
16                         this.value="";
17                     }
18                 }
19            }
20            */
21            
22            //表单提交事件处理
23            function doSubmit(){
24                 return checkUname() && checkUpass() &&  checkEmail();
25            }
26            
27            //验证账号
28            function checkUname(){
29               var name = document.myform.uname.value;
30               if(name.match(/^w{8,16}$/)==null){
31                     alert("账号必须为8-16的有效字符!");
32                     return false;
33               }
34               return true;
35            }
36            
37            //验证密码
38            function checkUpass(){
39               var pass = document.myform.upass.value;
40               if(pass.match(/^.{6,18}$/)==null){
41                     alert("密码必须为6-18位!");
42                     return false;
43               }
44               return true;
45            }
46             
47            //验证邮箱
48            function checkEmail(){
49               var email = document.myform.email.value;
50               if(email.match(/^w+@w+(.w+){1,2}$/)==null){
51                     alert("请输入正确的Email地址!");
52                     return false;
53               }
54               return true;
55            }
56         </script>
57     </body>

实例2:商品展示

 1 <div id="did">
 2         <img id="mid" src="./images/11.jpg" width="384">
 3     </div>
 4     <div id="bigid"><img id="bigimg" src="./images/11.jpg"></div>
 5     <div id="list" >
 6         <img  src="./images/11.jpg">
 7         <img  src="./images/22.jpg">
 8         <img  src="./images/33.jpg">
 9         <img  src="./images/44.jpg">
10     </div>
11     <script type="text/javascript">
12     var list=document.getElementById("list").getElementsByTagName("img");
13 
14     for(var i=0;i<list.length;i++){
15         list[i].onmouseover=function(){
16             document.getElementById("mid").src=this.src;
17             document.getElementById("bigimg").src=this.src;
18         }
19     }
20     var mid = document.getElementById("mid");
21     var bigid = document.getElementById('bigid');
22 
23     mid.onmouseover=function(){
24         bigid.style.top=this.offsetTop+"px";
25         bigid.style.left=this.offsetLeft+this.offsetWidth+10+"px";
26         bigid.style.display="block";
27     }
28     mid.onmouseout=function(){
29         bigid.style.display='none';
30     }
31     mid.onmousemove=function(ent){
32         var myevent= ent || window.event;
33         var x=event.clientX - this.offsetLeft;
34         var y=event.clientY - this.offsetTop;
35 
36         bigid.scrollTop=y*5-200;
37         bigid.scrollLeft=x*5-200;
38     }
39     </script>

实例3:键盘事件(打飞机小游戏)

  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="utf-8"/>
  5         <title>JavaScript--实例</title>
  6         <style>
  7             div{margin:0px;padding:0px;}
  8             #did{
  9                 500px;height:500px;
 10                 background:url('./images/bg2.png') no-repeat 0px -1036px;
 11                 position:relative;overflow:hidden}
 12             #mid{
 13                 top:200px;
 14                 left:100px;
 15                 position:absolute;}
 16             #pd0,#pd1,#pd2,#pd3,#pd4,#pd5,#e0,#e1,#e2,#boom{position:absolute;display:none;}
 17         </style>
 18     </head>
 19     <body>
 20         <h3>JavaScript实例--键盘事件</h3>
 21         <div id="did">
 22             <img id="pd0" src="./images/pd.png"/>
 23             <img id="pd1" src="./images/pd.png"/>
 24             <img id="pd2" src="./images/pd.png"/>
 25             <img id="pd3" src="./images/pd.png"/>
 26             <img id="pd4" src="./images/pd.png"/>
 27             <img id="pd5" src="./images/pd.png"/>
 28             
 29             <img id="e0" src="./images/e0.png"/>
 30             <img id="e1" src="./images/e1.png"/>
 31             <img id="e2" src="./images/e2.png"/>
 32             
 33             <img id="boom" src="./images/boom.gif"/>
 34             
 35             <img id="mid" src="./images/me.png"/>
 36         </div>
 37         <script type="text/javascript">
 38            //获取mid
 39            var mid = document.getElementById("mid");
 40            var did = document.getElementById("did");
 41            var boom = document.getElementById("boom");
 42            var bgh = -1036, bb=0;
 43            
 44            window.document.onkeydown = function(ent){
 45                 //获取兼容的事件
 46                 var event = ent || window.event;
 47                 //获取按键的值
 48                 //alert(event.keyCode);
 49                 switch(event.keyCode){
 50                     case 37: //
 51                         mid.style.left = Math.max(0,mid.offsetLeft-5)+"px"; break;
 52                     case 38: //
 53                         mid.style.top = Math.max(0,mid.offsetTop-5)+"px"; break;
 54                     case 39: //
 55                         mid.style.left = Math.min(394,mid.offsetLeft+5)+"px"; break;
 56                     case 40: //
 57                         mid.style.top = Math.min(424,mid.offsetTop+5)+"px";break;
 58                     case 32: //发射炮弹
 59                         fire(mid.offsetLeft+51,mid.offsetTop); break;
 60                 }
 61            }
 62            
 63            //发射炮弹
 64            function fire(x,y){
 65                 //获取遍历所有炮弹
 66                 for(var i=0;i<6;i++){
 67                     var pd = document.getElementById("pd"+i);
 68                     //判断是否可用
 69                     if(pd.style.display!="block"){
 70                         pd.style.top = y+"px";
 71                         pd.style.left= x+"px";
 72                         pd.style.display="block";
 73                         return;
 74                     }
 75                 }
 76            }
 77            
 78            //碰撞检测函数
 79            function checkPE(pd){
 80                 //获取炮弹坐标
 81                 var x = pd.offsetLeft+1;
 82                 var y = pd.offsetTop;
 83                 //遍历所有敌机
 84                 for(var i=0;i<3;i++){
 85                     var e = document.getElementById("e"+i);
 86                     //判断是否可用
 87                     if(e.style.display=="block"){
 88                         //获取敌机坐标位置
 89                         var x1 = e.offsetLeft+10;
 90                         var x2 = x1+95;
 91                         var y1 = e.offsetTop+40;
 92                         var y2 = y1+26;
 93                         //比较是否相撞
 94                         if(x>=x1 && x<=x2 && y>=y1 && y<=y2){
 95                             e.style.display="none";
 96                             pd.style.display="none";
 97                             boom.style.left = x-200+"px";
 98                             boom.style.top = y-200+"px";
 99                             boom.style.display="block";
100                             bb=5;
101                             return true;
102                         }
103                     }
104                 }
105                 return false;
106            }
107            
108            //游戏主线程
109            function running(){
110                 //负责移动可见炮弹
111                 for(var i=0;i<6;i++){
112                     var pd = document.getElementById("pd"+i);
113                     //判断是否可用
114                     if(pd.style.display=="block"){
115                         pd.style.top = pd.offsetTop-5+"px";
116                         //调用检测是否碰撞
117                         checkPE(pd);
118                         //判断是否已出屏幕,回收
119                         if(pd.offsetTop<-20){
120                             pd.style.display = "none";
121                         }
122                     }
123                 }
124                 //负责移动可见敌机
125                 for(var i=0;i<3;i++){
126                     var e = document.getElementById("e"+i);
127                     //判断是否可用
128                     if(e.style.display=="block"){
129                         e.style.top = e.offsetTop+4+"px";
130                         //判断是否已出屏幕,回收
131                         if(e.offsetTop>500){
132                             e.style.display = "none";
133                         }
134                     }
135                 }
136                 
137                 //负责移动地图背景
138                 bgh+=2;
139                 if(bgh>=-268){
140                     bgh=-1036;
141                 }
142                 did.style.backgroundPosition="0px "+bgh+"px";
143                 
144                 //负责处理爆炸场面绘制
145                 if(bb>0){
146                     bb--;
147                 }else{
148                     boom.style.display="none";
149                 }
150                 
151                 //负责随机出现敌机
152                 if(Math.round(Math.random()*100000)%30==2){
153                     for(var i=0;i<3;i++){
154                        var ee = document.getElementById("e"+i);
155                        //判断是否可用,并随机位置显示
156                        if(ee.style.display!="block"){
157                             ee.style.top="-82px";
158                             ee.style.left=(Math.round(Math.random()*100000)%450)+"px";
159                             ee.style.display="block";
160                             break;
161                        } 
162                     }
163                 }
164                 
165                 setTimeout("running()",33);
166            }
167            running();
168         </script>
169     </body>
170 </html>
原文地址:https://www.cnblogs.com/yexiang520/p/5716241.html