`

javascript事件模型框架

阅读更多
 最近一直在读《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对象模型与事件处理借鉴.pdf

    JavaScript 对象模型与事件处理 JavaScript 对象模型是指在 JavaScript 中描述对象之间的层次关系的模型。该模型可以将对象分为核心部分、浏览器对象模型和文档对象模型三个组成部分。核心部分主要包括 JavaScript ...

    javascript常见的7个框架

    jQuery 是一个快速、简洁的 JavaScript 框架,帮助您简化查询 DOM 对象、处理事件、制作动画、和处理 Ajax 交互过程。利用 jQuery 将改变您编写 JavaScript 代码的方式。原先用 20 行代码完成的功能,jQuery 用 10 ...

    JavaScript_EST框架

    JavaScript EST框架,全称为"Effective JavaScript Structural Toolkit",是一个针对JavaScript开发者的高级框架,旨在提升JavaScript应用程序的效率、可维护性和可扩展性。这个框架深受开发者喜爱,因为它提供了...

    轻量的javascript视图层框架

    **轻量级JavaScript视图层框架——Pocket** 在Web开发领域,JavaScript框架是构建现代交互式用户界面的关键工具。Pocket,作为一个轻量级的JavaScript视图层框架,旨在提供一个简洁、高效的解决方案,帮助开发者...

    100 行代码实现的 JavaScript MVC 样式框架

    总结来说,"100行代码实现的JavaScript MVC样式框架"是一个简化版的前端MVC架构,利用哈希路由实现在客户端的页面导航,通过有限的代码实现基本的模型-视图-控制器功能,为小型项目或学习MVC模式提供了便捷的起点。...

    javascript验证框架

    JavaScript验证框架是Web开发中不可或缺的一部分,主要用于在客户端进行数据验证,提高用户体验并减轻服务器端的压力。这些框架允许开发者创建自定义验证规则,确保用户输入的数据符合预设的格式和条件,例如邮箱...

    基于事件模型的下一代的B/S开发框架ECHO

    "基于事件模型的下一代B/S开发框架ECHO"是一个创新性的技术解决方案,旨在提升Web应用程序的开发效率和用户体验。这个框架的核心理念是将HTML元素转化为可操作的“控件”,模仿Windows桌面应用中的交互模式,使得...

    javaScript对象模型与事件处理资料.pdf

    通过理解JavaScript的对象模型和事件处理机制,开发者可以构建动态、交互性强的网页应用。无论是修改文档内容,还是与浏览器进行高级交互,JavaScript都提供了丰富的工具和API来实现这些功能。因此,熟练掌握这些...

    PrototypeJavaScript框架

    它引入了许多面向对象编程的概念到JavaScript,使得开发者能够更有效地处理DOM(文档对象模型)操作、事件处理和Ajax交互。以下是对Prototype框架核心特性和功能的详细解释: 1. **对象扩展与原型链增强**: ...

    10大js框架 javaScript框架

    它作为模型视图控制器(MVC)架构的一部分,为JavaScript开发者提供了一个强大的开发环境。Prototype与Ruby on Rails的结合尤其受到欢迎,这得益于其对AJAX的支持和易用性。 ### 2. Dojo Dojo是一个全面的...

    事件模型探究及配套源码

    本文将深入探讨事件模型的各个方面,包括函数指针的进化、Java、.NET(C#)、DOM与JavaScript以及Flex和ActionScript3的事件模型。 首先,函数指针进化论讲述了编程中处理函数引用的方式如何演变。早期的编程语言中...

    JavaScript 的 MVC 框架 Serenade.js.zip

    其中,Serenade.js是一个轻量级且功能强大的框架,它专注于提供高效的数据绑定、模板引擎以及事件处理机制,使得JavaScript开发更加简洁和易于维护。 **1. MVC模式** MVC模式是软件设计中的一种架构模式,将应用...

    仅用100行代码实现的JavaScript MVC样式框架

    在这个简单的框架中,模型可能是简单的JavaScript对象,包含数据和一些基本操作。 2. **视图(View)**:视图层负责数据的呈现。当模型中的数据发生变化时,视图会自动更新以反映这些变化。在JavaScript中,视图...

    ONNXjs实现使用JavaScript运行ONNX预训练深度学习模型

    ONNX(Open Neural Network Exchange)是一种开放的模型交换格式,旨在促进不同深度学习框架之间的模型互操作性。ONNX.js是这个概念的JavaScript实现,它允许开发者在浏览器或Node.js环境中运行ONNX模型,无需依赖...

    DWZ javaScript RIA框架

    DWZ JavaScript RIA框架是一款专为构建富互联网应用程序(Rich Internet Applications,简称RIA)而设计的前端开发框架。它以JavaScript为核心,结合HTML、CSS,致力于提供高效、易用、功能丰富的网页应用解决方案。...

    浅析JavaScript MVC框架在Web开发中的应用.pdf

    JavaScript MVC框架是当前Web开发中的热门话题之一,MVC全称为Model-View-Controller,分别对应模型、视图和控制器三个部分。该框架的出现解决了传统的JavaScript开发中遇到的问题,如代码混乱、难以维护和扩展等...

    后台框架javascript,mit格式

    在“122”这个文件名中,虽然没有明确的文件类型,但通常在后台框架JavaScript项目中,可能会包含HTML模板、CSS样式表、JavaScript源代码、配置文件、数据库模型、路由定义等。这些文件协同工作,构建出一个完整的...

    backpropaganda一个以学习为目的JavaScript神经网络框架

    **正文** `backpropaganda` 是一个专为学习目的设计的JavaScript神经网络框架。它提供了构建、训练和使用...通过这个框架,初学者可以轻松地在JavaScript环境中构建自己的神经网络模型,并逐步深入到深度学习的世界。

    强大的javascript框架

    2. **MVVM架构**:作为一个现代的JavaScript框架,AlloyTeam-JX很可能采用了Model-View-ViewModel(MVVM)架构,这是一种数据绑定模式,能够实现视图与模型之间的自动同步,减少了手动操作DOM的需要,提升了开发效率...

    JavaScript框架比较.doc

    本文将探讨JavaScript框架的主要特点和优势,以及它们在处理DOM操作、事件处理和Ajax请求等方面的作用。 1. **选择器(Selector)** 类似于CSS选择器,JavaScript框架提供了用于选取DOM元素的便捷语法。这使得...

Global site tag (gtag.js) - Google Analytics