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="data: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="data:images/1.jpg" width="200" alt="图片"></div>
27 <div id="content_2" class="none"><img src="data:images/4.jpg" width="300" alt="图片"></div>
28 <div id="content_3" class="none"><img src="data: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="data:images/1.jpg" width=200 alt="图片" /></div>
80 <div id="content_2" class="none"><img src="data:images/4.jpg" width=300 alt="图片" /></div>
81 <div id="content_3" class="none"><img src="data: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="data:images/1.jpg" width=200 alt="图片" /></div>
136 <div id="content_2" class="none"><img src="data:images/4.jpg" width=300 alt="图片" /></div>
137 <div id="content_3" class="none"><img src="data:images/3.jpg" width=400 alt="图片" /></div>
138 </div>
139 </div>
140 </body>

JS基础(二)的更多相关文章

  1. JS基础(二)

    一.JS中的循环结构 循环结构的执行步骤 1.声明循环变量: 2.判断循环条件: 3.执行循环体操作: 4.更新循环变量 然后,循环执行2-4,直到条件不成立时,跳出循环. while循环()中的表达 ...

  2. node.js 基础二 开启服务器监听

    1.server.js 2.监听 一 server.js 二 监听 运行server.js后,浏览器打开:http://localhost:8888/ //====================== ...

  3. JS基础二

    JS的实现: 核心:ECMAScript ECMAScript 并不与任何具体浏览器相绑定,实际上,它也没有提到用于任何用户输入输出的方法(这点与 C 这类语言不同,它需要依赖外部的库来完成这类任务) ...

  4. JS基础(二)事件监听练习之table鼠标悬停行变色

    JS监听事件简单学习: [object].addEvent("事件类型","处理函数","冒泡事件或捕获事件");   [object].r ...

  5. JS基础二--字面量和变量

       /*       字面量,都是一些不可改变的值,       比如:1 2 3 4 5       字面量都是可以直接使用,但是我们一般不会直接使用字面量.       变量,变量可以用来保存字 ...

  6. #9.1课堂总结#JS基础(二)

    在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只 ...

  7. Vue.js基础(二)

    属性 可以将数据进行计算得出新的结果,也可以说是一个公式,有缓存. 应用:1,频繁使用的复杂公式. 2,需要监控的-----全局状态的管理 简写:   computed:{ result:functi ...

  8. js基础练习二之简易日历

    今天学到了js基础教程3,昨天的课后练习还没来的及做,这个是类似简易日历的小案例,视频还没听完,今晚继续...... 先看效果图: 其实做过前面的Tab选项卡,这个就很好理解了,通过鼠标放在不同月份月 ...

  9. 前端总结·基础篇·JS(二)数组深拷贝、去重以及字符串反序和数组(Array)

    目录 这是<前端总结·基础篇·JS>系列的第二篇,主要总结一下JS数组的使用.技巧以及常用方法. 一.数组使用 1.1 定义数组 1.2 使用数组 1.3 类型检测 二.常用技巧 2.1 ...

  10. Three.js基础探寻二——正交投影照相机

    本篇主要介绍照相机中的正交投影照相机. 第一篇传送门:Three.js基础探寻一 1.照相机 图形学中的照相机定义了三维空间到二维屏幕的投影方式. 针对投影方式照相机分为正交投影照相机和透视投影照相机 ...

随机推荐

  1. 字蛛fontSpider的使用

    字蛛官方文档 http://font-spider.org/index.html 首先安装全局包  npm install font-spider -g 然后下载字体 ,本次需要的是  "造 ...

  2. ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...

    Struts2未配置Log4j2.xml报错 Log4j2.xml中的配置 log4j的jar包:log4j-core-2.7.jar log4j2只支持xml和json两种格式的配置,所以配置log ...

  3. 【11】JMicro微服务-配置管理

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到10小节 JMicro目前仅支持基于Zookeeper做配置管理,全部配置信息可以在ZK做增删改查 ...

  4. QuantLib 金融计算

    我的微信:xuruilong100 <Implementing QuantLib>译后记 QuantLib 金融计算 QuantLib 入门 基本组件之 Date 类 基本组件之 Cale ...

  5. Java枚举源码分析

    1.是一个范型类, 实现了Serializable和Comparable接口 2.只有两个成员变量:name.ordinal 3.枚举类隐含一个values函数,需通过反射调用才可获取枚举实例化对象列 ...

  6. (转)Linux ldconfig 与 ldd指令

    原文:https://blog.csdn.net/iamzhangzhuping/article/details/49203981 一.ldconfig ldconfig是一个动态链接库管理命令,为了 ...

  7. pycharm 使用jupyter notebook 报错:'_xsrf' argument missing from POST

    出问题的关键点就在: 我用cmd启动的jupyter notebook,然后用pycham新建了一个jupyter notebook 结果 一直报错'_xsrf' argument missing f ...

  8. Python函数中的可变参数

    在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...

  9. 共识算法:PBFT、RAFT

    转自:https://www.cnblogs.com/davidwang456/articles/9001331.html 区块链技术中,共识算法是其中核心的一个组成部分.首先我们来思考一个问题:什么 ...

  10. elasticsearch(一):JAVA api操作

    1.创建一个mavan项目,项目的以来配置如下. <?xml version="1.0" encoding="UTF-8"?> <projec ...