JS基础(二)

21、标准事件模型的事件类型(包括4个子模块)

  • HTMLEvents:接口为Event,支持的事件类型包括abort、blur、change、error、focus、load、resize、scroll、select、submit、unload
  • MouseEvents:接口为MouseEvent,支持的事件类型包括click、mousedown、mouseup、mousemove、mouseout、mouseover
  • UIEvents:接口为UIEvent
  • MutationEvents:接口为MutationEvent
事件类型 触发时机 接口 冒泡 默认动作 支持元素
abort 图像加载时中断 Event Y N img、object
blur 元素失去焦点 Event N N a、area、button、input、label
change 用户改变域的内容 Event  Y N input、select、textarea
click 鼠标单击某个对象 MouseEvent Y Y 大部分元素
error 当加载文档或图像时发生某个错误 Event Y N body、frameset、iframe、img、object
focus 元素获得焦点 Event N N a、area、button、imput、label、select、textarea
load 文档或图像加载完毕 Event N N body、frameset、iframe、img、object
mousedown 某个鼠标按键被按下 MouseEvent Y Y 大部分元素
mousemove 鼠标被移动 MouseEvent Y Y 大部分元素
mouseout 鼠标从某元素移开

MouseEvent

Y Y 大部分元素
mouseover 鼠标被移到某元素之上 MouseEvent Y Y 大部分元素
mouseup 某个鼠标按键被松开 MouseEvent Y Y 大部分元素
reset 表单被重置 Event Y N form
resize 窗口或框架被调整尺寸 Event Y N body、iframe、frameset
scroll 窗口滚动条滚动 Event Y N body
select 文本被选定 Event Y N input、textarea
submit 表单被提交 Event Y Y form
unload 写在文档、框架集或图像 Event N N body、frameset、iframe、img、object

22、Event对象

标准事件模型   意义   备注 IE事件模型
type 获取事件的类型,如click、mouseout type 相同
target 发生事件的节点,一般利用该属性来获取当前被激活事件的具体对象 srcElement event=window.srcElement
currentTarget 事件当前传播到的节点。如果在传播过程的捕获阶段或冒泡阶段处理事件,这个属性的值就与target属性值不同 offsetX、offsetY IE专有属性,声明事件发生时鼠标指针相对于源元素左上角的x轴和y轴坐标值,标准事件模型中没有对应的值
eventPhase 显示当前所处的事件传播过程的阶段    
timeStamp 事件发生的事件    
bubbles 显示事件是否能够在文档中冒泡    
cancelable 显示事件是否能够取消默认动作    
stopPropagation() 组织当前事件从正在处理它的节点传播 cancelBubble 为true时等用于stopPropagation()方法,默认false
preventDefault() 阻止默认动作的执行 returnValue 为false时等同于preventDefault()方法,默认true
button 当在声明mousedown、mouseup和click事件时,显示鼠标键的状态值。0表示左键,1表示中间键,2表示右键 button 键值不同,1表示左键、2表示右键、4表示中间键,可以组合使用,如1+2=3,则3表示同时按下左右键
aktKey、ctrlKey、metaKey、ShiftKey

表示在声明鼠标事件时,是否按下了Alt键、Ctrl键、Meta键和Shift键

aktKey、ctrlKey、ShiftKey 意义相同但没有ShiftKey属性
clientX、clientY 声明事件发生时鼠标指针相对于客户区浏览器窗口左上角的x轴和y轴的坐标值

clientX、clientY

相同
screenX、screenY 声明事件发生时鼠标指针相对于用户显示器左上角的x轴和y轴的坐标值    
relatedTarget 引用与事件的目标节点相关的节点。对与mouseover事件,它是鼠标移到目标是所离开的那个节点;对于mouseout事件,它是鼠标离开目标是将要进入的那个节点 fromElement、toElement 相同

23、

  1设计鼠标拖放操作

 <script>
  2 // 初始化拖放对象
  3 var box = document.getElementById("box");
  4     // 获取页面中被拖放元素的引用指针
  5 box.style.position = "absolute";            // 绝对定位
  6 // 初始化变量,标准化事件对象
  7 var mx, my, ox, oy;                         // 定义备用变量
  8 function e(event){                             // 定义事件对象标准化函数
  9    if( ! event){                             // 兼容IE浏览器
 10       event = window.event;
 11       event.target = event.srcElement;
 12       event.layerX = event.offsetX;
 13       event.layerY = event.offsetY;
 14    }
 15    event.mx = event.pageX || event.clientX + document.body.scrollLeft; 
 16     // 计算鼠标指针的x轴距离
 17    event.my = event.pageY || event.clientY + document.body.scrollTop; 
 18     // 计算鼠标指针的y轴距离
 19    return event;                             // 返回标准化的事件对象
 20 }
 21 // 定义鼠标事件处理函数
 22 document.onmousedown = function(event){     // 按下鼠标时,初始化处理
 23    event = e(event);                         // 获取标准事件对象
 24    o = event.target;                         // 获取当前拖放的元素
 25    ox = parseInt(o.offsetLeft);             // 拖放元素的x轴坐标
 26    oy = parseInt(o.offsetTop);                 // 拖放元素的y轴坐标
 27    mx = event.mx;                             // 按下鼠标指针的x轴坐标
 28    my = event.my;                             // 按下鼠标指针的y轴坐标
 29    document.onmousemove = move;             // 注册鼠标移动事件处理函数
 30    document.onmouseup = stop;                 // 注册松开鼠标事件处理函数
 31 }
 32 function move(event){                         // 鼠标移动处理函数
 33    event = e(event);
 34    o.style.left = ox + event.mx - mx  + "px";    // 定义拖动元素的x轴距离
 35    o.style.top = oy + event.my - my + "px";    // 定义拖动元素的y轴距离
 36 }
 37 function stop(event){                             // 松开鼠标处理函数
 38    event = e(event);
 39    ox = parseInt(o.offsetLeft);                 // 记录拖放元素的x轴坐标
 40    oy = parseInt(o.offsetTop);                     // 记录拖放元素的y轴坐标
 41    mx = event.mx ;                                 // 记录鼠标指针的x轴坐标
 42    my = event.my ;                                 // 记录鼠标指针的y轴坐标
 43    o = document.onmousemove = document.onmouseup = null; 
 44     // 释放所有操作对象
 45 }
 46 </script>
 47

设计鼠标跟随特效

 48 <script>
 49 var pos = function(o, x, y,event){     // 鼠标定位函数
 50     var posX = 0, posY = 0;             // 临时变量值
 51     var e = event || window.event;         // 标准化事件对象
 52     if(e.pageX || e.pageY){             // 获取鼠标指针的当前坐标值
 53         posX = e.pageX;
 54         posY = e.pageY;
 55     }
 56     else if(e.clientX || e.clientY){
 57         posX = e.clientX + document.documentElement.scrollLeft + 
 58 document.body.scrollLeft;
 59         posY = e.clientY + document.documentElement.scrollTop + 
 60 document.body.scrollTop;
 61     }
 62     o.style.position = "absolute";        // 定义当前对象为绝对定位
 63     o.style.top = (posY + y) + "px";
 64     // 用鼠标指针的y轴坐标和传入偏移值设置对象y轴坐标
 65     o.style.left = (posX + x) + "px";
 66     // 用鼠标指针的x轴坐标和传入偏移值设置对象x轴坐标
 67 }
 68 </script>
 69 </head>
 70 <body>
 71 <div id="div1">跟随鼠标的文字</div>
 72 <script language="javascript" type="text/javascript">
 73 var div1 = document.getElementById("div1");
 74 document.onmousemove = function(event){
 75     pos(div1, 10, 20,event);
 76 }
 77 </script>
 78

跟踪鼠标在对象内相对位置

 79 <script>
 80 window.onload = function(){
 81     var  t = document.getElementById("text");
 82     var box = document.getElementById("box");
 83     box.onmousemove = function(event){
 84         var event = event || window.event;         // 标准化事件对象
 85         if(event.offsetX || event.offsetY ){
 86             t.value ="x:" + parseInt(event.offsetX) + "\ny:" + parseInt(event.offsetY);
 87         }
 88         else if(event.layerX || event.layerY ){
 89             t.value ="x:" + parseInt(event.layerX - 1) + "\ny:" + parseInt(event.layerY -1) ;
 90         }
 91     }
 92 }
 93 </script>
 94 </head>
 95 <body>
 96 <textarea  id ="text"></textarea>
 97 <div id="wrap">
 98     <span>
 99         <div id="box"></div>
100     </span>
101 </div>
102 </body>
103

设计推箱子游戏

104 <script>
105 function keyDown(event){                     // 方向键控制元素移动函数
106     var event = event || window.event;         // 标准化事件对象
107     switch(event.keyCode){                 // 获取当前按下键盘键的编码
108         case 37 :                         // 按下左箭头键,向左移动42个像素
109             box.style.left = box.offsetLeft - 42  + "px";
110             break;
111         case 39 :                         // 按下右箭头键,向右移动42个像素
112             box.style.left = box.offsetLeft + 42 + "px";
113             break;
114         case 38 :                         // 按下上箭头键,向上移动42个像素
115             box.style.top = box.offsetTop  - 42 + "px";
116             break;
117         case 40 :                         // 按下下箭头键,向下移动42个像素
118             box.style.top = box.offsetTop  + 42 + "px";
119             break;
120     }
121     return false
122 }
123 window.onload = function(){
124     var box = document.getElementById("box");    // 获取页面元素的引用指针
125     box.style.position = "absolute";            // 色块绝对定位
126     document.onkeydown = keyDown;     // 在Document对象中注册keyDown事件处理函数
127 }
128 </script>
129 </head>
130 <body>
131 <div id="wrap">
132     <div id="box"><img src="images/box.png" /></div>
133 </div>
134 </body>
135

自动读取选择文本

136 <script>
137 window.onload = function(){
138     var a = document.getElementsByTagName("input")[0]; 
139     // 获取第一个文本框的引用指针
140     var b = document.getElementsByTagName("input")[1]; 
141         // 获取第二个文本框的引用指针
142     a.onselect = function(){        // 为第一个文本框绑定select事件处理函数
143         if (document.selection){     // 兼容IE
144             o = document.selection.createRange();    // 创建一个选择区域
145             if(o.text.length > 0)     // 如果选择区域内存在文本
146             b.value = o.text;         // 则把该区域内的文本赋值给第二个文本框
147         }else{                        // 兼容DOM
148             p1 = a.selectionStart;     // 获取文本框中选择的初始位置
149             p2 = a.selectionEnd;     // 获取文本框中选择的结束位置
150             b.value = a.value.substring(p1, p2); 
151             // 截取文本框中被选取的文本字符串,然后赋值给第二个文本框
152         }
153     }
154 }
155 </script>
156

设计满屏画布背景

157 <script>
158 function w(){                    // 获取窗口宽度
159     if (window.innerWidth)         // 兼容DOM
160         return window.innerWidth;
161     else if ((document.body) && (document.body.clientWidth)) 
162     // 兼容IE
163         return document.body.clientWidth;
164 }
165 function h(){                    // 获取窗口高度
166     if (window.innerHeight)     // 兼容DOM
167         return window.innerHeight;
168     else if ((document.body) && (document.body.clientHeight)) 
169     // 兼容IE
170         return document.body.clientHeight;
171 }
172 window.onresize = function(){    // 注册resize事件处理函数,动态调整盒子大小
173     box.style.width = w()  + "px";
174     box.style.height = h()  + "px";
175 }
176 window.onload = function(){
177     var box = document.getElementById("box");        // 获取盒子的引用指针
178     box.style.position = "absolute";                // 绝对定位
179     box.style.zIndx = -1;
180     box.style.backgroundColor = "red";        // 背景色
181     box.style.width = w()  + "px";    // 设置盒子宽度为窗口宽度的0.8倍
182     box.style.height = h()  + "px";    // 设置盒子高度为窗口高度的0.8倍
183 }
184 </script>
185

设计自动跳转下拉菜单

186 <script>
187 window.onload = function(){
188     var a = document.getElementsByTagName("select")[0];
189     a.onchange = function(){
190        window.open(this.value,"");         // 根据下拉列表框的当前值打开指定的网址
191     }
192 }
193 </script>
194 </head>
195 <body>
196 <select>
197     <option value="#">请选择网站</option>
198     <option value="http://www.baidu.com/">百度</option>
199      <option value="http://www.google.cn/">Google</option>
200 </select>
201 </body>
202

禁止表单提交

203 <script>
204 window.onload = function(){
205     var t = document.getElementsByTagName("input")[0]; 
206     // 获取文本框的引用指针
207     var f = document.getElementsByTagName("form")[0];
208      // 获取表单的引用指针
209     f.onsubmit = function(e){             // 在表单元素上注册submit事件处理函数
210         alert(t.value);
211         return false;                     // 禁止提交数据到服务器
212     }
213 }
214 </script>
215 </head>
216 <body>
217 <form id="form1" name="form1" method="post" action="">
218     <input type="text" name="t" id="t" />
219     <input name="" type="submit" />
220 </form>
221 </body>

 24、Tab面板交互式设计

  1 <script language="javascript" type="text/javascript">
  2 function hover(n, counter)
  3 {
  4     var $ = function(o)
  5     {
  6         return document.getElementById(o);
  7     }
  8     for(var i = 1; i <= counter; i ++ )
  9     {
 10         $('tab_' + i).className = 'normal';
 11         $('content_' + i).className = 'none';
 12     }
 13     $('content_' + n).className = 'show';
 14     $('tab_' + n).className = 'hover';
 15 }
 16 </script>
 17 </head>
 18 <body>
 19 <div class="tab_wrap">
 20     <ul class="tab">
 21         <li id="tab_1" class="hover" onMouseOver="hover(1,3);">Tab1</li>
 22         <li id="tab_2" class="normal" onMouseOver="hover(2,3);">Tab2</li>
 23         <li id="tab_3" class="normal" onMouseOver="hover(3,3);">Tab3</li>
 24     </ul>
 25     <div class="content">
 26         <div id="content_1" class="show"><img src="images/1.jpg" width="200" alt="图片"></div>
 27         <div id="content_2" class="none"><img src="images/4.jpg" width="300" alt="图片"></div>
 28         <div id="content_3" class="none"><img src="images/3.jpg" width="400" alt="图片"></div>
 29     </div>
 30 </div>
 31 </body>
 32

HTML和js分离

 33 <script>
 34 function hover(){ 
 35 } 
 36 hover.prototype = { 
 37     ok : function(tabs,contents,openClass,closeClass){ 
 38         var _this = this; 
 39         if(tabs.length != contents.length) 
 40         { 
 41             alert("菜单项数量和内容包含框数量不一致!"); 
 42             return false; 
 43         }                 
 44         for(var i = 0 ; i < tabs.length ; i++) 
 45         {     
 46             _this.$(tabs[i]).value = i;                 
 47             _this.$(tabs[i]).onmouseover = function(){ 
 48                      
 49                 for(var j = 0 ; j < tabs.length ; j++) 
 50                 {                         
 51                     _this.$(tabs[j]).className = closeClass; 
 52                     _this.$(contents[j]).style.display = "none"; 
 53                 } 
 54                 _this.$(tabs[this.value]).className = openClass;     
 55                 _this.$(contents[this.value]).style.display = "block";                 
 56             } 
 57         } 
 58         }, 
 59     $ : function(o){ 
 60         if(typeof(o) == "string") 
 61         return document.getElementById(o); 
 62         return o; 
 63     } 
 64 } 
 65 window.onload = function(){ 
 66     var demo1 = new hover(); 
 67     demo1.ok(["tab_1","tab_2","tab_3"],["content_1","content_2","content_3"],"hover","normal"); 
 68 } 
 69 </script>
 70 </head>
 71 <body>
 72 <div class="tab_wrap">
 73     <ul class="tab">
 74         <li id="tab_1" class="hover">Tab1</li>
 75         <li id="tab_2" class="normal">Tab2</li>
 76         <li id="tab_3" class="normal">Tab3</li>
 77     </ul>
 78     <div class="content">
 79         <div id="content_1" class="show"><img src="images/1.jpg" width=200 alt="图片" /></div>
 80         <div id="content_2" class="none"><img src="images/4.jpg" width=300 alt="图片" /></div>
 81         <div id="content_3" class="none"><img src="images/3.jpg" width=400 alt="图片" /></div>
 82     </div>
 83 </div>
 84 </body>
 85

标准化Tab交互行为

 86 <script>
 87 function hover(event){
 88     var $ = function(o){ 
 89         if(typeof(o) == "string") 
 90         return document.getElementById(o); 
 91         return o; 
 92     }
 93     var tab = $("tab").getElementsByTagName("li");
 94     var content = $("content").getElementsByTagName("div");
 95     var check=function(tab, o) {
 96         if(document.addEventListener){
 97             return tab.addEventListener("mouseover", o, true);
 98         }
 99         else if(document.attachEvent){
100             return tab.attachEvent("onmouseover", o);
101         }
102     }
103     ;
104     for(var i = 0; i < tab.length; i ++ )
105     {
106         (function(j){
107             check(tab[j], function(){
108                 for(var n = 0; n < tab.length; n ++ )
109                 {
110                     tab[n].className = "normal";
111                     content[n].className = "none";
112                 }
113                 tab[j].className = "hover";
114                 content[j].className = "show";
115             }
116             );
117         }
118         )(i);
119     }
120 }
121 window.onload = function()
122 {
123     hover();
124 }
125 </script>
126 </head>
127 <body>
128 <div class="tab_wrap">
129     <ul class="tab" id="tab">
130         <li id="tab_1" class="hover">Tab1</li>
131         <li id="tab_2" class="normal">Tab2</li>
132         <li id="tab_3" class="normal">Tab3</li>
133     </ul>
134     <div class="content" id="content">
135         <div id="content_1" class="show"><img src="images/1.jpg" width=200 alt="图片" /></div>
136         <div id="content_2" class="none"><img src="images/4.jpg" width=300 alt="图片" /></div>
137         <div id="content_3" class="none"><img src="images/3.jpg" width=400 alt="图片" /></div>
138     </div>
139 </div>
140 </body>

 

posted @ 2018-11-21 18:49  agasha  阅读(148)  评论(0编辑  收藏  举报