最近一直在读《javascript高级程序设计》,也快读完了,读到事件这一章,书中提供的一个事件工具类很实用,我注释了一下,并摘记:
//eventutil.js
var EventUtil = new Object;
/**//*
此方法用来给特定对象添加事件,oTarget是指定对象,sEventType是事件类型,如click、keydown等, fnHandler是事件回调函数
/*
EventUtil.addEventHandler = function (oTarget, sEventType, fnHandler) {
//firefox情况下
if (oTarget.addEventListener) {
oTarget.addEventListener(sEventType, fnHandler, false);
}
//IE下
else if (oTarget.attachEvent) {
oTarget.attachEvent("on" + sEventType, fnHandler);
}
else {
oTarget["on" + sEventType] = fnHandler;
}
};
/*
此方法用来移除特定对象的特定事件,oTarget是指定对象,sEventType是事件类型,如click、keydown等,fnHandler是事件回调函数
/*
EventUtil.removeEventHandler = function (oTarget, sEventType, fnHandler) {
if (oTarget.removeEventListener) {
oTarget.removeEventListener(sEventType, fnHandler, false);
} else if (oTarget.detachEvent) {
oTarget.detachEvent("on" + sEventType, fnHandler);
} else {
oTarget["on" + sEventType] = null;
}
};
/*
格式化事件,因为IE和其他浏览器下获取事件的方式不同并且事件的属性也不尽相同,通过此方法提供一个一致的事件
*/
EventUtil.formatEvent = function (oEvent) {
//isIE和isWin引用到一个js文件,判断浏览器和操作系统类型
if (isIE && isWin) {
oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;
//IE只支持冒泡,不支持捕获
oEvent.eventPhase = 2;
oEvent.isChar = (oEvent.charCode > 0);
oEvent.pageX = oEvent.clientX + document.body.scrollLeft;
oEvent.pageY = oEvent.clientY + document.body.scrollTop;
//阻止事件的默认行为
oEvent.preventDefault = function () {
this.returnValue = false;
};
//将toElement,fromElement转化为标准的relatedTarget
if (oEvent.type == "mouseout") {
oEvent.relatedTarget = oEvent.toElement;
} else if (oEvent.type == "mouseover") {
oEvent.relatedTarget = oEvent.fromElement;
}
//取消冒泡
oEvent.stopPropagation = function () {
this.cancelBubble = true;
};
oEvent.target = oEvent.srcElement;
//添加事件发生时间属性,IE没有
oEvent.time = (new Date).getTime();
}
return oEvent;
};
EventUtil.getEvent = function() {
if (window.event) {
//格式化IE的事件
return this.formatEvent(window.event);
} else {
return EventUtil.getEvent.caller.arguments[0];
}
};
附带上一个判断浏览器和系统类型的js文件,通过引入一些名字显而易见的全局变量作为判断的结果,使用时需要小心变量名称冲突:
//detect.js,同样来自《JAVASCRIPT高级程序设计》
var sUserAgent = navigator.userAgent;
var fAppVersion = parseFloat(navigator.appVersion);
function compareVersions(sVersion1, sVersion2) {
var aVersion1 = sVersion1.split(".");
var aVersion2 = sVersion2.split(".");
if (aVersion1.length > aVersion2.length) {
for (var i=0; i < aVersion1.length - aVersion2.length; i++) {
aVersion2.push("0");
}
} else if (aVersion1.length < aVersion2.length) {
for (var i=0; i < aVersion2.length - aVersion1.length; i++) {
aVersion1.push("0");
}
}
for (var i=0; i < aVersion1.length; i++) {
if (aVersion1[i] < aVersion2[i]) {
return -1;
} else if (aVersion1[i] > aVersion2[i]) {
return 1;
}
}
return 0;
}
var isOpera = sUserAgent.indexOf("Opera") > -1;
var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;
if (isOpera) {
var fOperaVersion;
if(navigator.appName == "Opera") {
fOperaVersion = fAppVersion;
} else {
var reOperaVersion = new RegExp("Opera (//d+//.//d+)");
reOperaVersion.test(sUserAgent);
fOperaVersion = parseFloat(RegExp["$1"]);
}
isMinOpera4 = fOperaVersion >= 4;
isMinOpera5 = fOperaVersion >= 5;
isMinOpera6 = fOperaVersion >= 6;
isMinOpera7 = fOperaVersion >= 7;
isMinOpera7_5 = fOperaVersion >= 7.5;
}
var isKHTML = sUserAgent.indexOf("KHTML") > -1
|| sUserAgent.indexOf("Konqueror") > -1
|| sUserAgent.indexOf("AppleWebKit") > -1;
var isMinSafari1 = isMinSafari1_2 = false;
var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;
if (isKHTML) {
isSafari = sUserAgent.indexOf("AppleWebKit") > -1;
isKonq = sUserAgent.indexOf("Konqueror") > -1;
if (isSafari) {
var reAppleWebKit = new RegExp("AppleWebKit///(//d+(?://.//d*)?)");
reAppleWebKit.test(sUserAgent);
var fAppleWebKitVersion = parseFloat(RegExp["$1"]);
isMinSafari1 = fAppleWebKitVersion >= 85;
isMinSafari1_2 = fAppleWebKitVersion >= 124;
} else if (isKonq) {
var reKonq = new RegExp("Konqueror///(//d+(?://.//d+(?://.//d)?)?)");
reKonq.test(sUserAgent);
isMinKonq2_2 = compareVersions(RegExp["$1"], "2.2") >= 0;
isMinKonq3 = compareVersions(RegExp["$1"], "3.0") >= 0;
isMinKonq3_1 = compareVersions(RegExp["$1"], "3.1") >= 0;
isMinKonq3_2 = compareVersions(RegExp["$1"], "3.2") >= 0;
}
}
var isIE = sUserAgent.indexOf("compatible") > -1
&& sUserAgent.indexOf("MSIE") > -1
&& !isOpera;
var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = false;
if (isIE) {
var reIE = new RegExp("MSIE (//d+//.//d+);
分享到:
相关推荐
JavaScript 对象模型与事件处理 JavaScript 对象模型是指在 JavaScript 中描述对象之间的层次关系的模型。该模型可以将对象分为核心部分、浏览器对象模型和文档对象模型三个组成部分。核心部分主要包括 JavaScript ...
jQuery 是一个快速、简洁的 JavaScript 框架,帮助您简化查询 DOM 对象、处理事件、制作动画、和处理 Ajax 交互过程。利用 jQuery 将改变您编写 JavaScript 代码的方式。原先用 20 行代码完成的功能,jQuery 用 10 ...
JavaScript EST框架,全称为"Effective JavaScript Structural Toolkit",是一个针对JavaScript开发者的高级框架,旨在提升JavaScript应用程序的效率、可维护性和可扩展性。这个框架深受开发者喜爱,因为它提供了...
**轻量级JavaScript视图层框架——Pocket** 在Web开发领域,JavaScript框架是构建现代交互式用户界面的关键工具。Pocket,作为一个轻量级的JavaScript视图层框架,旨在提供一个简洁、高效的解决方案,帮助开发者...
总结来说,"100行代码实现的JavaScript MVC样式框架"是一个简化版的前端MVC架构,利用哈希路由实现在客户端的页面导航,通过有限的代码实现基本的模型-视图-控制器功能,为小型项目或学习MVC模式提供了便捷的起点。...
JavaScript验证框架是Web开发中不可或缺的一部分,主要用于在客户端进行数据验证,提高用户体验并减轻服务器端的压力。这些框架允许开发者创建自定义验证规则,确保用户输入的数据符合预设的格式和条件,例如邮箱...
"基于事件模型的下一代B/S开发框架ECHO"是一个创新性的技术解决方案,旨在提升Web应用程序的开发效率和用户体验。这个框架的核心理念是将HTML元素转化为可操作的“控件”,模仿Windows桌面应用中的交互模式,使得...
通过理解JavaScript的对象模型和事件处理机制,开发者可以构建动态、交互性强的网页应用。无论是修改文档内容,还是与浏览器进行高级交互,JavaScript都提供了丰富的工具和API来实现这些功能。因此,熟练掌握这些...
它引入了许多面向对象编程的概念到JavaScript,使得开发者能够更有效地处理DOM(文档对象模型)操作、事件处理和Ajax交互。以下是对Prototype框架核心特性和功能的详细解释: 1. **对象扩展与原型链增强**: ...
它作为模型视图控制器(MVC)架构的一部分,为JavaScript开发者提供了一个强大的开发环境。Prototype与Ruby on Rails的结合尤其受到欢迎,这得益于其对AJAX的支持和易用性。 ### 2. Dojo Dojo是一个全面的...
本文将深入探讨事件模型的各个方面,包括函数指针的进化、Java、.NET(C#)、DOM与JavaScript以及Flex和ActionScript3的事件模型。 首先,函数指针进化论讲述了编程中处理函数引用的方式如何演变。早期的编程语言中...
其中,Serenade.js是一个轻量级且功能强大的框架,它专注于提供高效的数据绑定、模板引擎以及事件处理机制,使得JavaScript开发更加简洁和易于维护。 **1. MVC模式** MVC模式是软件设计中的一种架构模式,将应用...
在这个简单的框架中,模型可能是简单的JavaScript对象,包含数据和一些基本操作。 2. **视图(View)**:视图层负责数据的呈现。当模型中的数据发生变化时,视图会自动更新以反映这些变化。在JavaScript中,视图...
ONNX(Open Neural Network Exchange)是一种开放的模型交换格式,旨在促进不同深度学习框架之间的模型互操作性。ONNX.js是这个概念的JavaScript实现,它允许开发者在浏览器或Node.js环境中运行ONNX模型,无需依赖...
DWZ JavaScript RIA框架是一款专为构建富互联网应用程序(Rich Internet Applications,简称RIA)而设计的前端开发框架。它以JavaScript为核心,结合HTML、CSS,致力于提供高效、易用、功能丰富的网页应用解决方案。...
JavaScript MVC框架是当前Web开发中的热门话题之一,MVC全称为Model-View-Controller,分别对应模型、视图和控制器三个部分。该框架的出现解决了传统的JavaScript开发中遇到的问题,如代码混乱、难以维护和扩展等...
在“122”这个文件名中,虽然没有明确的文件类型,但通常在后台框架JavaScript项目中,可能会包含HTML模板、CSS样式表、JavaScript源代码、配置文件、数据库模型、路由定义等。这些文件协同工作,构建出一个完整的...
**正文** `backpropaganda` 是一个专为学习目的设计的JavaScript神经网络框架。它提供了构建、训练和使用...通过这个框架,初学者可以轻松地在JavaScript环境中构建自己的神经网络模型,并逐步深入到深度学习的世界。
2. **MVVM架构**:作为一个现代的JavaScript框架,AlloyTeam-JX很可能采用了Model-View-ViewModel(MVVM)架构,这是一种数据绑定模式,能够实现视图与模型之间的自动同步,减少了手动操作DOM的需要,提升了开发效率...
本文将探讨JavaScript框架的主要特点和优势,以及它们在处理DOM操作、事件处理和Ajax请求等方面的作用。 1. **选择器(Selector)** 类似于CSS选择器,JavaScript框架提供了用于选取DOM元素的便捷语法。这使得...