Fixjs——自定义事件处理

 

Fixjs介绍

Fixjs是我打算在javascript技术领域开始积累的一个框架项目,这套框架主要为开发复杂组件提供底层的框架支持。

框架的类与接口我会尽量参考flash框架的实现。同时,我也会开放Fixjs的源代码,欢迎同仁一起学习、交流。

 

Fixjs 0.1.0已实现的内容

【基础方法,基础类】

trace():页面调试输出

fixjs.Class:类定义

fixjs.Object:提供对象初始化,释放控制,克隆接口

fixjs.DisposeUtil:释放资源工具类

fixjs.CloneUtil:克隆资源工具类

fixjs.Map:哈希数据结构

【事件处理】

fixjs.events.Event:事件类

fixjs.events.EventDispatcher:事件派发类

 

自定义事件处理

本文的主角是fixjs.events.Eventfixjs.events.EventDispatcher,看看实际的使用例子:

<head>

   <title></title>

   <scriptsrc="js/fixjs/global.js"type="text/javascript"></script>

   <scriptsrc="js/fixjs/events.js"type="text/javascript"></script>

   <scriptsrc="js/fixjs/jquery-1.9.1.min.js"type="text/javascript"></script>

        <script type="text/javascript">

           $(document).ready(function () {

               init()

           });

           function init() {

               trace("fixjs framework", fixjs.VERSION);

 

               var listener = new fixjs.events.EventDispatcher();

               listener.addEventListener(fixjs.events.Event.COMPLETE,func1);

               listener.addEventListener(fixjs.events.Event.COMPLETE,func1);

               listener.addEventListener(fixjs.events.Event.RESIZE,func2);

 

               var e1 = new fixjs.events.Event(fixjs.events.Event.COMPLETE);

               var e2 = new fixjs.events.Event(fixjs.events.Event.RESIZE);

               listener.dispatchEvent(e1);

               listener.dispatchEvent(e2);

               listener.removeEventListener(fixjs.events.Event.COMPLETE,func1);

               listener.dispatchEvent(e1);

               listener.dispatchEvent(e2);

               listener.dispose();

           }

           functionfunc1(e) {

               trace("func1:",e);

           }

           functionfunc2(e) {

               trace("func2:",e);

           }

   </script>

</head>

<body>

   <divid="trace">

   </div>

</body>

输出

fixjs framework 0.1.0

func1 [fixjs.events.Event]complete

func1 [fixjs.events.Event]complete

func2 [fixjs.events.Event]resize

func2 [fixjs.events.Event]resize

 

使用语法上非常接近flash框架的事件处理。

 

fixjs.events.Eventfixjs.events.EventDispatcher的代码实现

/*

fixjs.events.Event

*/

fixjs.events.Event = fixjs.Object.extend({

   init: function (type) {

        this.bubbles = false; //to do...

        this.cancelable = false; //to do...

        this.currentTarget = null;

        this.eventPhase = 2; //to do...123分别表示捕获,目标,冒泡

        this.target = null;

        this.type = type;

        this._prevented = false;

   },

   disposing: function() {

        this.target = null;

        this.currentTarget = null;

   },

   clone: function() {

        vare = new fixjs.Event(this.type);

        return e;

   },

   isDefaultPrevented: function () {

        return this._prevented;

   },

   preventDefault: function () {

        this._prevented = true;

   },

   stopImmediatePropagation:function () {

        //to do...

   },

   stopPropagation: function () {

        //to do...

   },

   toString: function () {

        return "[fixjs.events.Event]"+ this.type;

   }

});

fixjs.events.Event.COMPLETE = "complete";

fixjs.events.Event.CHANGE = "change";

fixjs.events.Event.CLOSE = "close";

fixjs.events.Event.RESIZE = "resize";

/*

fixjs.EventDispatcher

*/

fixjs.events.EventDispatcher = fixjs.Object.extend({

   init: function (target) {

        this._target = target;

        this._events = new fixjs.Map();

   },

   disposing: function() {

        this._events.dispose();

        this._events = null;

        this._target = null;

   },

   _isFunction: function(func) {

        return String.prototype.slice.call(func, 0, 8) == "function";

   },

   addEventListener: function (type, func) {

        if (!this._isFunction(func)){

           return;

        }

        varlist = this._events.get(type);

        if (!list) {

           list = [];

           this._events.set(type, list);

        }

        list.push(func);

   },

   removeEventListener: function (type, func) {

        varlist = this._events.get(type);

        if (!this._isFunction(func)|| !list || !list.length) {

           return;

        }

        for (var i = list.length - 1; i >= 0; i--) {

           list[i] == func && list.splice(i, 1);

        }

   },

   dispatchEvent: function (event) {

        if (!(event instanceof fixjs.events.Event))

           return;

        varlist = this._events.get(event.type);

        if (!list || !list.length) {

           return;

        }

        if (!event.target){

           event.target = this;

           if (this._target)

               event.target = this._target;

        }

        event.currentTarget = this;

        if (this._target)

           event.currentTarget = this._target;

        for (var i = 0, l = list.length; i < l; i++) {

           list[i](event);

        }

   }

});

 

TODO…

上述的实现缺少一些高级事件处理:

l  事件的捕获阶段、目标阶段、冒泡阶段支持;

l  事件冒泡执行的阻止(stopPropagationstopImmediatePropagation的实现)

 

源码下载链接

http://download.csdn.net/detail/hunkcai/5392189

 

相关文章

Fixjs专栏

 

作者推荐

MyReport一款非常实用的报表引擎插件,提供Web报表设计、展现、打印、导出等功能集,集成简单。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值