`

javascript高级编程第9章笔记(事件)

阅读更多
[size=large][/size]定位
//for ie
oDiv.onclick=function(){
var oEvent=window.event;
}
//for Dom
oDiv.onclick=function(){
  var oEvent=arguments[0];
}
//可直接命名参数,访问就更方便
oDiv.onclick=function(oEvent){
//for some code;
 
}

ie事件的一些属性及方法
altKey   true代表按下alt键,false代表没有;
button 0 未按下按纽
       1 按下左键;
       2........
       3.按下左右键;
       4.按下中间的
       5.按下左中的
       6.按下右中的
       7.按下左中右的
cancelBubble true时,将会停止事件向上冒泡.
clienX  事件发生时,鼠标在客户端区域的X坐标(不包括工具栏,滚动条)
offsetX 鼠标相对于引起事件的对象的X坐标;

dom的一些属性和方法
currentTarget  事件目前所指向的元素;
detail   鼠标点击的次数;
eventPhase   0 捕获阶段  1 在目标上  2 冒泡阶段;
preventDefault() 阻止事件的默认行为;
relatedTarget 事件的第二目标,经常用于鼠标事件;
stopPropagation()可调用这个方法阻止将来事件的冒泡;

//IE跟DOM相似性
var sType=oEvent.type;
//for example
function handleEvent(oEvent){
   if(oEvent.type=="click")
    {
      alert("Cliked");
       }else(oEvent.type=="mouseover"){
        alert("Mouse Over");
}
 
}
oEvent.onclick=handleEvent;
oEvent.onmouseover=handleEvent;

2.获取按键代码
var iKeyCold=oEvent.keyCode;
回车 KeyCode 13;
空格键 KeyCode 32;
回退 KeyCode 8;

3.检测shift,alt,ctrl
var bshift=oEvent.shiftKey;
var bAlt=oEvent.altKey;
var bCtrl=oEvent.ctrlKey;

4.客户端坐标
var iClientX=oEvent.clientX;
var iClientY=oEvent.clientY;
5.屏幕坐标
var iScreenX=oEvent.screenX;
var iScreenY=oEvent.screenY;

ie跟dom浏览器的一些区别

//for ie
var oTarget=oEvent.srcElement;

//for DOM
var oTarget=oEvent.target;

注意的是:MAC上的IE同时支持srcElement和target;
2.获到字符代码
//for ie
var iCharCode=oEvent.keyCode;

//for Dom
var iCharCode=oEvent.charCode;

3.阻止事件的默认行为
//for ie
oEvent.returnValue=false;
//for Dom
oEvent.preventDefault();
//for example
 document.body.oncontextmenu=function(oEvent){
   if(isIe){
    oEvent=window.event;
    oEvent.returnValue=false;
  }else{
    oEvent.preventDefault();
  }
}

4.停止事件复制

//for ie
oEvent.cancelBubble=true;
//for Dom
oEvent.stopPropagation();


事件的类型


鼠标事件


键盘事件


HTML事件


突变事件

对于mouseover和mouseout事件

mouseover下
ie的toElement==srcElement;
mouseout
ie的fromElement==srcElement;

Dom下
mouseover
relatedTarget指出鼠标来自何处;
mouseout
relatedTarget指出鼠标去往何处;



click事件发生前,先要mousedown---------->>mouseup-------->>click

dbclick则要mousedown------>>mouseup------->>click--->>mousedown-->>mouseup------>>click----->>dbclick

mouseout(离开一个)---->>两个对象都会发生mousemove-------->>mouseover(进入另外一个)




======================================================

用户按下一个字符键不放,keydown和keypress事件会一直触发
keydown---keypress--keyup
用户按下一个非字符,eg:shift
则只有keydown事件持续触发;
keydown-----------keyup

======================================================

HTML事件

abort事件
用户停止下载过程时,如果object对象还未完全载入,则就在其上触发;

select事件

input,textarea选择了一个或者多个字符时触发;

change事件

input,textarea,先失去焦点并且在它获取焦点后内容发生了变化时触发;select元素的值发生改变时触发;


focus事件
得到焦点时触发

blur事件
失去焦点时触发

resize事件

resize事件的处理函数必须使用js代码分配给window对象或者在html中分配给body元素
//for ie
只要窗口移动就会触发
//for ff
只有等窗口的大小改变停止时,才会触发
最大化时,或者最小化时.resize事件会一直触发;

 
 最后附上一个兼容事件类库.
eventUtil.js

 //跨平台事件;
            var EventUtil = new Object;
            EventUtil.addEventHandler = function(oTarget, sEventType, fnHandler){
                if (oTarget.addEventListener) {
                    //dom标准事件处理函数,false参数指定为冒泡阶段
                    oTarget.addEventListener(sEventType, fnHandler, false);
                }
                else 
                    if (oTarget.attachEvent) {//for IE
                        oTarget.attachEvent("on" + sEventType, fnHandler);
                    }
                    else {//for others browser
                        oTarget["on" + sEventType] = fnHandler;
                    }
            }
            //移除一个对象的事件;
            EventUtil.removeEventHandler = function(oTarget, sEventType, fnHandler){
                if (oTarget.removeEventListener) {
                    //与上一样,指定为false才能正常去除事件;
                    oTarget.removeEventListener(sEventType, fnHandler, false);
                }
                else 
                    if (oTarget.detachEvent) {
                        oTarget.detachEvent("on" + sEventType, fnHandler);
                    }
                    else {
                        //other browser remove function;
                        oTarget["on" + sEventType] = null;
                    }
            }
            //---------------------------------------------------------------华丽的分割线------------------------------//
            //格式化event对象,让他们全面兼容ff and ie;
            EventUtil.formatEvent = function(oEvent){
                if (isIE && isWin) {
                    //IE中的字符代码是在keypress事件发生时,包含在keyCode属性中的.所以事件类型为keypress时,需要创建charCode属性,其值为keyCode;否则置它为0;
                    oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;
                    //eventPhase在DOM中代表所处的阶段,IE仅支持一个值为2,这个属性始终等于2代表冒泡阶段,因为IE仅支持此阶段;
                    oEvent.eventPhase = 2;
                    //ie不支持isChar属性,所以我们设定当charCode不为0时,为true;
                    oEvent.isChar = (oEvent.charCode > 0);
                    //ie不支持pageX,与pageY,不过可以通过clienX,clienY,的值及文档主体中的scrollLeft和scrollTop的值计算出他们;
                    oEvent.pageX = oEvent.clientX + document.body.scrollLeft;
                    oEvent.pageY = oEvent.clientY + document.body.scrollTop;
                    //下面是阻止默认动作;
                    oEvent.preventDefault = function(){
                        this.returnValue = false;
                        //此时this代表oEvent事件对象;
                    }
                    //然后就是Dom的relatedTarget属性即可能是IE的 fromElement也可能是toElement属性,这由事件类型决定;
                    if (oEvent.type == "mouseout") {
                        //要离开的地方;
                        oEvent.relatedTarget = oEvent.toElement;
                    }
                    else 
                        if (oEvent.type = "mouseover") {
                            //要去往的地方;
                            oEvent.relatedTarget = oEvent.fromElement;
                        }
                    //兼容事件的阻止默认行为,将IE的cancelBubble设置为true即可;
                    oEvent.stopPorpagation = function(){
                        oEvent.cancelBubble = true;
                    }
                    //然后是target属性,确切的说它等同于IE的srcElement;
                    oEvent.target = oEvent.srcElement;
                    //对于timestamp属性,创建一个Date对象,获取它的毫秒数即可;
                    oEvent.timestamp = (new Date()).getTime();
                    
                }
                return oEvent;
            }
            //---------------------------------------------------------------华丽的分割线------------------------------//
            //获取事件对象;
            //IE和Dom使用不同的方法来获到event对象,ie是与window对象相关的,而在dom中它独立于其它对象,并且是作为参数传递的.
            EventUtil.getEvent = function(){
                if (window.event) {
                    return this.formatEvent(window.event);
                }
                else {
					//每个函数都有一个caller属性,它包含了调用它的方法的此用;被调用的自己又指回到自己的参数;
					//funcA调用funcB,那么funcB.caller指向到funcA;
                    return EventUtil.getEvent.caller.arguments[0];
                }
                
            }









      
分享到:
评论

相关推荐

    javaScript DOM编程艺术2版学习笔记

    在这个学习笔记中,涵盖了从基础到高级的JavaScript和DOM操作技巧,一共涉及1~9章的内容。以下是对这些章节知识点的详细阐述: **第1章:JavaScript简介** 本章介绍了JavaScript的基本概念,包括它是一种解释型、弱...

    李炎恢JavaScript-pdf文档笔记

    《李炎恢JavaScript-pdf文档笔记》是一份详细记录了JavaScript编程语言基础知识至高级应用的教程,涵盖了从第一章到第三十四章的丰富内容。这个压缩包包含了一份PDF文档,旨在帮助学习者深入理解并掌握JavaScript的...

    JavaScript学习笔记.pdf

    最后,第九章讲述了DHTML的应用,展示了如何将前面章节学到的知识综合运用到实际开发中,创建具有丰富交互功能和动态效果的网页。全书的结构严谨,内容丰富,不仅适合初学者逐步学习,也为有一定基础的网页设计人员...

    毕设&课设&项目&实训-基于JavaScript高级程序设计第四版的学习笔记.zip

    这本“JavaScript高级程序设计第四版”的学习笔记涵盖了JavaScript的各个方面,旨在帮助学生、开发者以及对编程感兴趣的人深入理解这一强大的脚本语言。这份笔记是针对毕设、课设、项目实训等实践性学习场景编写的,...

    JavaScript_DOM编程—新版学习笔记.txt

    ### JavaScript DOM 编程知识点详解 #### 一、DOM 基础概念 **DOM (Document Object Model)** 是一种用于表示 HTML 和 XML 文档的标准对象模型。它将文档定义为节点树,允许开发者通过编程方式访问和修改这些节点...

    asp网络编程学习笔记15章

    这15章的学习笔记详尽地介绍了ASP网络编程技术,并结合网上商城实例,让读者能够理论联系实际,逐步掌握开发动态网站的能力。通过学习,不仅可以提升编程技能,还能为创建自己的网站打下坚实的基础。

    JavaScript基础第01天笔记.pdf

    根据文件内容,以上知识点涵盖了编程语言的基础概念、计算机语言的分类、编程与标记语言的区别、翻译器的功能、计算机的基本组成与数据存储原理、JavaScript语言的起源、功能和执行环境以及ECMAScript标准。

    JavaScript忍者秘籍(第2版)读书笔记

    《JavaScript忍者秘籍(第2版)》是一本深入探讨JavaScript编程技巧的书籍。本书涵盖了从基础概念到高级特性的广泛内容,旨在帮助读者成为JavaScript编程的高手。以下是对书中第一章和第二章主要内容的详细阐述。 #...

    javascript初级笔记本第一季

    "javascript初级笔记本第一季"是一份由cssrain总结的JavaScript基础知识讲义,旨在帮助初学者建立起坚实的JavaScript基础。以下是对这份讲义中可能涵盖的知识点的详细解析: 1. **变量与数据类型**:JavaScript是一...

    javascript笔记

    这本“JavaScript笔记”涵盖了该语言的核心概念、语法、数据类型、控制结构、函数、对象、DOM操作以及事件处理等多个关键领域。 一、基础语法 JavaScript的基础包括变量声明(var、let、const)、数据类型(原始...

    JavaScript笔记 第二天

    这篇笔记主要涵盖了JavaScript的第二天课程内容,旨在深入理解并掌握JavaScript的基础知识。以下是对这些知识点的详细解释: 1. **变量与数据类型** - 变量:JavaScript中的变量是用于存储数据的容器。使用`var`, ...

    韩顺平javascript课堂笔记完整版

    理解这些基础知识是掌握JavaScript的第一步,随着学习的深入,还将涉及DOM操作、事件处理、函数、对象、数组、正则表达式、闭包、异步编程等更多概念。JavaScript的灵活性和广泛应用使其成为Web开发不可或缺的一部分...

    JavaScript1小时快速上手笔记快速复习

    9. **异步编程**:JavaScript是单线程的,但通过回调函数、Promise、async/await等方式实现异步操作,解决耗时任务阻塞UI的问题。 10. **模块化**:ES6引入了模块系统,通过import和export关键字实现模块间的导入...

    原生javascript笔记.zip

    9. **原型与继承**:JavaScript使用原型链实现对象的继承,理解`__proto__`、`prototype`和`Object.create`对于面向对象编程至关重要。 10. **ES6及之后的新特性**:包括箭头函数、模板字符串、解构赋值、类(class...

    JavaScript编程 基础知识

    ### JavaScript编程基础知识详解 #### 一、JavaScript代码的放置与引入方式 1. **JavaScript代码应置于`<script></script>`标签内** - JavaScript 代码通常被包含在 HTML 文件中的 `<script>` 标签之间。 - 示例...

    JavaScript-学习笔记.docx

    这篇学习笔记主要涉及了JavaScript的基础概念和一些高级特性,包括预编译、作用域、函数、对象原型、原型链、函数调用方式(如call、apply)、继承模式、对象克隆、数组操作、自定义类型判断以及错误处理机制。...

    JavaScript忍者秘籍(第2版)笔记、习题与解析

    《JavaScript忍者秘籍(第2版)》是JavaScript编程领域的一本经典之作,它深入浅出地介绍了JavaScript的核心概念和技术。这本书不仅包含了基础语法,还涵盖了高级特性,旨在帮助读者成为JavaScript的高手,即“忍者...

    JavaScript学习笔记 概括了所有的javaScript语法 用法

    JavaScript,作为全球最广泛使用的编程语言之一,是前端开发的核心技术。这门语言以其灵活性、动态性和丰富的库与框架著称。本学习笔记全面涵盖了JavaScript的语法和用法,旨在帮助初学者快速掌握并深入理解这门语言...

Global site tag (gtag.js) - Google Analytics