`
yiminghe
  • 浏览: 1431613 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

just another event model

阅读更多

事件模型也算是客户端兼容性的一个长期问题,早期 jquery 作者甚至因为这方面获过奖 ?一般来说 attachEvent 以及 addEventListener 已经基本够用,特别是 attachEvent 可以给回调传递事件参数 了,不用考虑怪异的 window.event

 

div.onclick=function(){
alert(window.event==window.event); // => false
setTimeout(function(){
  alert(window.event) // => null
},0);
}
 

 

可仍然不是完美的.

 

attachEvent 传入的参数似乎仅仅是 window.event 的指针:

 

document.getElementById("input1").attachEvent("onclick",function(e){
        var e2=e;
        alert(e2==e);
        setTimeout(function(){
            alert(e2==e);
            alert(e2.type);
            alert(e.type);
        },10);
    });

 

并且只在当前事件处理器同步处理内有效,一旦异步读取就会抛出 error

 

 

attachEvent :

 

1. 没有 event.currentTarget ,重用函数就不行了

 

2.回调中 this 无意义得指向 window .

 

3.多个回调绑定同一事件,触发顺序竟然是 random

 

4.标准事件缺失:hashchange

 

5.需要模拟一些有用的事件:valuechange

 

6.修正:其实这种方式不会导致循环引用而造成内容泄露,节点并没有属性指向绑定的事件函数。

 

addEventListener

 

1.标准控制下缺失了不少有用事件,需要事件模型来进行辅助模拟: focusin /out , mouseenter /leave

 

2. this 死板,只能是当前监听元素

 

JAEM

 

so 在巨人( jquery )的肩上,kissy 有了个不一样的事件模型 :

 

 

 

区分普通对象(继承 EventTarget)的自定义事件监听与触发以及 dom 节点的原生事件监听与触发.

 

 

1.每个元素每个对象对应一个系统事件回调,系统回调关联当前注册源解决 currentTarget 与 this,normalize 后调用用户事件回调

 

2.通过绑定时传入 scope 来实现用户事件回调定制 this

 

3.自身实现用户回调队列,保证用户回调触发顺序(先进先出)

 

4.通过钩子实现特殊事件,模拟事件的无缝接入。

 

 

 

 

 

 

 

 

 

  • 大小: 35.2 KB
分享到:
评论
2 楼 yiminghe 2011-07-25  
hax 写道
太言简意赅了吧,多给点文档?呵呵。

大纲啦,对jq的一点变化,可以具体看代码
https://github.com/kissyteam/kissy/tree/dev/src/event
这个要写明白太长了
1 楼 hax 2011-07-25  
太言简意赅了吧,多给点文档?呵呵。

相关推荐

Global site tag (gtag.js) - Google Analytics