练习笔记-EVENT

貌似有很多都不能捕获。需要再加强。

复制代码
(function(window,$,undefined){
var event = {
cache:{},
timeMark: function( dom, name ){
if(name){
var timeMark = name+$.date();
dom.setAttribute('alfred',timeMark);
return timeMark;
}
else{
return dom.getAttribute('alfred');
}
},
add: function( dom, evt, data, fn, handle ){
var timeMark = this.timeMark(dom) || this.timeMark(dom,'event'),
callback = function(e){
var e = e ||window.event;
if(e.originalTarget ==dom|| e.srcElement==dom){
fn.call(dom);
}
};

this.cache[timeMark] = this.cache[timeMark] ||{};
this.cache[timeMark][evt] = {
target: dom,
event: evt,
data: data,
callback: callback,
fns:fn,
handle: handle
}
if(dom.attachEvent)
{
dom.attachEvent("on"+evt,callback);
}
if(dom.addEventListener)
{
dom.addEventListener(evt,callback,handle);
}
return dom;
},
fire: function(dom,evt,data){
var timeMark = this.timeMark(dom);
if( this.cache[timeMark] && this.cache[timeMark][evt] ){
this.cache[timeMark][evt].fns.call(dom,data);
}
return dom;
},
remove: function(dom,evt){
var timeMark = this.timeMark(dom),
events = this.cache[timeMark][evt];
if(dom.detachEvent)
{
dom.detachEvent( "on"+evt ,events.callback );
}
if(dom.removeEventListener)
{
dom.removeEventListener( evt, events.callback, events.handle );
}
delete this.cache[timeMark][evt];
return dom;
},
eventAble: function(it){
if(!it || $.isString(it))
{
return false;
}
it.add = function(evt,data,fn){
this[evt] = [];
if($.isFunction(data))
{
fn = data;
data = null;
}
this[evt].data = data;
this[evt].push(fn);
return this;
};
it.fire = function(evt,data)
{
var fns = this[evt], i = 0;
if( fns && fns.length )
{
for( ;i<this[evt].length;i++ )
{
this[evt][i].call(this,data);
}
}
return this;
};
it.remove = function(evt)
{
delete this[evt];
return this;
};
}
};
$.event = {
bind: function(dom,evt,data,fn,handle){
if($.isFunction(data))
{
handle = !!fn;
fn = data;
data = "";
}
if($.isDom(dom) || dom === window)
{//dom
return event.add(dom,evt,data,fn,handle);
}
//not dom
event.eventAble(dom);
return dom.on(evt,data,fn);
},
unbind: function(dom,evt){
if($.isDom(dom) || dom === window)
{
return event.remove(dom,evt);
}
if(dom.wipe)
{
return dom.wipe(evt);
}
},
trigger: function(dom, evt, data){
if($.isDom(dom) || dom === window)
{
return event.fire(dom, evt, data);
}
if(dom.fire)
{
return dom.fire(evt,data);
}
}
}
})(window,alfred)
复制代码

可以对DOM,FN,OBJECT,ARRAY 也就是非字符数字的都应该可以做事件,还不完善。再找思路优化。。。



posted @   AlfredLee  阅读(424)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示