YUI Research -- Event Module

来源:互联网 发布:淘宝下载安装免费 编辑:程序博客网 时间:2024/05/29 12:34
 YAHOO.util.Subscriber(fn, obj, override)保存订阅者的信息用于事件触发处理

YAHOO.util.Subscriber.getScope(defaultScope)返回执行环境对象
如果this.override===true,则返回this.obj;
如果this.override是一个对象,则返回override;
否则返回defaultScope。

YAHOO.util.Subscriber.contains(fn, obj)判断fn和obj是否与此对象相同

YAHOO.util.Subscriber.toString()打印此对象的obj和override属性

YAHOO.util.CustomEvent(type, oScope, silent, signature)提供定义事件让其他独立的组件订阅的功能

YAHOO.util.CustomEvent.subscribers保存此事件的订阅者

YAHOO.util.CustomEvent.subscribe(fn, scope, override)事件订阅
把参数包装成Subscriber对象,然后加到subscribers中。
触发"YUICEOnSubscribe"事件。可以在CustomEvent对象的subscribeEvent上注册事件,此事件会在CustomEvent对象被订阅时触发,获得的参数与subscribe相同。

YAHOO.util.CustomEvent.unsubscribe(fn, scope)
YAHOO.util.CustomEvent.unsubscribeAll()取消事件订阅

YAHOO.util.CustomEvent.fire(args...)触发事件
如果有一个订阅者返回false,则此方法返回false。

YAHOO.util.CustomEvent._delete(index)删除subscribers中的对象
此方法delete目标对象的属性后,把subscribers[index]设为null。在fire方法中有个rebuild的功能,当发现subscribers中有null元素时删除之。

YAHOO.util.Subscriber.toString()打印type和scope属性

YAHOO.util.Event提供管理Dom事件和创建自定义事件系统的工具方法
在event.js源文件的最后执行了这样一个操作:
如果是IE,则在"DOMReady"事件中注册_tryPreloadAttach方法。然后设置一个interval执行这样一个操作:创建一个p元素,执行它的doScroll("left")方法,如果没有抛异常,调用_ready();
如果是版本号小于525的Safari中,然后设置一个interval执行这样一个操作:检测document.readyState,如果它的值是"loaded"或"complete",调用_ready();
在其他浏览器中,则把_ready注册在document的"DOMContentLoaded"事件上;
在window上注册_load和_unload,然后调用_tryPreloadAttach。

YAHOO.util.Event.startInterval()启动间隔检查功能
间隔时间为POLL_INTERVAL,默认值为20。

YAHOO.util.Event.onAvailable(p_id, p_fn, p_obj, p_override, checkContent)注册元素加载成功动作
当p_id可以用document.getElementById取得的时候触发此动作。

YAHOO.util.Event.onContentReady(p_id, p_fn, p_obj, p_override)注册元素及其子节点加载成功动作
当p_id加载成功并可以通过nextSibling访问右兄弟的时候触发此动作。

YAHOO.util.Event.onDOMReady(p_fn, p_obj, p_override)

YAHOO.util.Event.addListener(el, sType, fn, obj, override)
YAHOO.util.Event.on(el, sType, fn, obj, override)注册事件
如果el是一个合法的集合,则用集合中的每个元素作为参数调用自身;
如果el是字符串,而且以它为id的元素还不在Dom树中,就调用onAvailable方法延迟事件注册;
把注册的处理器的信息保存在listeners数组中,用于在"unload"事件触发时自动注销所有事件的处理器;
为保证注册了的"unload"处理器在Event自动注销处理器前被调用,在注册"unload"处理器的时候不把它们直接注册在window上,而是用一个叫unloadListeners的数组把它保存起来。然后在window上注册一个这样的处理器,它首先调用
unloadListeners中的处理器,再注销所有通过Event接口注册的处理器;
处理遗留事件系统的问题;
方法默认的scope是el本身。

YAHOO.util.Event.removeListener(el, sType, fn)注销事件
如果el是一个合法的集合,则用集合中的每个元素作为参数调用自身;
处理遗留事件系统和"unload"事件的注销。

YAHOO.util.Event.purgeElement(el, recurse, sType)批量注销事件

YAHOO.util.Event.getListeners(el, sType)取得注册在el上的处理器

YAHOO.util.Event.getTarget(ev)得到触发事件的元素
屏蔽的IE的ev.srcElement和标准的ev.target;
如果触发事件的元素为TextNode时,返回它的parentNode。

YAHOO.util.Event.getRelatedTarget(ev)得到触发事件的相关元素
当ev.type=="mouseout",返回ev.toElement;
当ev.type=="mouseover",返回ev.fromElement。

YAHOO.util.Event.stopPropagation(ev)停止事件传播
YAHOO.util.Event.preventDefault(ev)屏蔽默认动作
YAHOO.util.Event.stopEvent(ev)停止事件传播和屏蔽默认动作
屏蔽IE的cancleBubble=ture和标准的stopPropagation();
屏蔽IE的retureValue=false和标准的preventDefault()。

YAHOO.util.Event.getTime(ev)给ev设置一个值为new Date().getTime()的time属性

YAHOO.util.Event.getPageX(ev)得到触发事件的X坐标
YAHOO.util.Event.getPageY(ev)得到触发事件的Y坐标
YAHOO.util.Event.getXY(ev)得到触发事件的XY坐标
屏蔽IE的clientX+scrollLeft和标准的pageX;Y同理。

YAHOO.util.Event.getCharCode(ev)得到触发事件的字符
融合ev.keyCode和ev.charCode,ev.keyCode||ev.charCode;
标准化Safari中的一些按键值。

YAHOO.util.Event.generateId(el)产生ID
"yuievtautoid-"加上计数器的值。

YAHOO.util.Event.useLegacyEvent(el, sType)判断是否要用遗留事件系统
在版本号小于418的Safari中,如果注册的事件是click和dbclick,就需要使用遗留事件系统。

YAHOO.util.Event.getLegacyIndex(el, sType)判断是否要用遗留事件系统
用el的id加上sType作为key在legacyMap中取出遗留事件的索引。

YAHOO.util.Event.fireLegacyEvent(el, sType)触发事件处理过程
估计所谓的遗留事件系统是指一个类型的事件只能注册一个处理器,所以YUI先保存默认的处理器,然后为元素注册一个新的处理器,这个处理器先执行legacyHandlers中的处理器,然后在调用被保存起来的默认行为。这样会导致preventDefault在遗留事件系统中不起作用。

YAHOO.util.Event.resolveTextNode(n)如果n.nodeType==3的话就返回它的parentNode

YAHOO.util.Event._tryPreloadAttach()
尝试在onload方法执行前尽可能快地取得Node并执行onAvailable和onContentReady所注册的方法;
如果是IE,那一切需要等到"DOMReady"事件触发后再进行事件注册,不然可能会出现中断错误。

YAHOO.util.Event._getCacheIndex(el, sType, fn)取得相关处理器在listeners中的索引

YAHOO.util.Event._simpleAdd()注册事件
YAHOO.util.Event._simpleRemove()注销事件
屏蔽了IE的attachEvent和detachEvent与标准的addEventListener和removeEventListener的不同;
IE的事件类型前要加上"on",例如"onload",而标准的是"load";
浏览器类型的判断在加载时进行。

YAHOO.util.Event._getScroll()
YAHOO.util.Event._getScrollLeft()
YAHOO.util.Event._getScrollTop()得到页面的滚动距离
屏蔽了XHTML的document.documentElement和HTML的document.body。

YAHOO.util.Event._load()在window的"load"事件触发时调用
把complete设置为ture;
调用触发"DOMReady"事件,如果它还没被触发;
调用_tryPreloadAttach。

YAHOO.util.Event._ready()触发"DOMReady"事件
把DOMReady设置为ture;
调用注册了"DOMReady"事件的处理器;
注销在document的"DOMContentLoaded"事件上的_ready(FF/Opera/latest Safari)。


YAHOO.util.Event._unload()在window的"unload"事件触发时调用
先调用unloadListeners中的处理器;
然后调用removeListener把listeners中的处理器逐个注销;
清空legacyEvents;
最后注销_unload方法本身。

YAHOO.util.EventProvider提供自定义事件的接口和实现,供其他对象augment

YAHOO.util.EventProvider.subscribe(p_type, p_fn, p_obj, p_override)订阅事件
如果p_type所对应的CustomEvent已经存在,则调用其subscribe方法注册事件;
否则,把注册信息存放在数组__yui_subscribers[p_type]中,用于当p_type事件创建时进行注册。

YAHOO.util.EventProvider.unsubscribe(p_type, p_fn, p_obj)取消事件
YAHOO.util.EventProvider.unsubscribeAll(p_type)取消所有类型为p_type的订阅
如果p_type所对应的CustomEvent已经存在,则调用其unsubscribe方法;
否则,遍历__yui_events中的CustomEvent对象,并调用其unsubscribe方法。

YAHOO.util.EventProvider.createEvent(p_type, p_config)创建类型为p_type的CustomEvent对象
p_config的属性为scope、silent和onSubscribeCallback;
如果__yui_events[p_type]不存在,创建类型为p_type的CustomEvent对象,并把onSubscribeCallback注册到对象的subscribeEvent上;
把在创建此事件前对该事件的订阅请求注册到
新创建的CustomEvent对象上。

YAHOO.util.EventProvider.fireEvent(p_type, args...)触发类型为p_type的事件

YAHOO.util.EventProvider.hasEvent(p_type, args...)判断是否已创建类型为p_type的CustomEvent

YAHOO.util.KeyListener检测keydown和keyup事件的工具类

YAHOO.util.KeyListener(attachTo, keyData, handler, event)
把参数先注册在keyEvent上,并没有实际与Dom绑定。

handleKeyPress(e, obj)处理按键事件的方法
先检查shift、alt、ctrl的状态是否与keyData中的一致;
在keyData中查找与e.charCode或e.keyCode匹配的项,如果找到则触发keyEvent。

YAHOO.util.KeyListener.enable()打开监听功能
进行实际的Dom绑定
触发enabledEvent

YAHOO.util.KeyListener.disable()关闭监听功能
进行实际的Dom解绑
触发disabledEvent

YAHOO.util.KeyListener.toString()打印keyData.keys、attachTo.tagName和attachTo.id

YAHOO.util.KeyListener.KEY定义的若干按键值的常量

原创粉丝点击