转贴于
http://www.cnblogs.com/stupidliao/articles/639020.html
Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser)
模块:dojo.event
终于进入有名的dojo事件处理系统的学习了,学习前建议读者先去补习一下AOP的相关知识
dojo.event.connect
绑定指定的方法到指定的对象的方法上
Usage Example:
简单绑定1
function doOnClick1() { alert("Clicked!"); } dojo.event.connect(dojo.byId("inputTest"),"onclick","doOnClick1");
简单绑定2
obj = { doOnClick2: function(){ alert("Clicked!");}} dojo.event.connect(dojo.byId("inputTest"),obj,"doOnClick2");
如果存在需要进行多个事件的绑定的时候,你就会看到dojo的方便之处了
obj2 = { doOnClick2: function(){alert("Clicked!");}} dojo.event.connect(dojo.byId("inputTest"),"doOnClick2"); dojo.event.connect(dojo.byId("inputTest"),obj2,"doOnClick2");
connect可以对任何对象的方法进行绑定,而不是只能针对DOM对象
dojo.event.connect(obj,"doOnclick2","doOnClick1"); //在调用obj.doOnclick2()后调用doOnClick1()
dojo.event.connectBefore
dojo.event.connect默认是后绑定,connectBefore则是早绑定,绑定的方法将在指定方法前执行,用法与connect一致
dojo.event.connectAround
Usage Example:
function aroundTest(invocation){ //此处可以增加代码,比如检查参数(invocation.args) var result = invocation.proceed(); //此处可以增加代码,比如修改结果(result) return result; } dojo.event.connectAround(dojo.byId("inputTest"),"aroundTest");
dojo.event.connectOnce 说起这个函数,还真的是让我想了半天,直觉上我就把它想象成executeOnce,结果测试的结果让我差点想不通 connectOnce就是指保证只绑定一次,来避免重复绑定会导致的重复执行的问题
dojo.event.disconnect
解除绑定,调用参数与connect一致,即可解除之前的绑定操作
dojo.event.log
在执行指定对象的指定方法后自动记录日志
Usage Example:
dojo.event.log(obj,"doOnClick");//当调用obj.doOnClick时记录下日志"DEBUG: ([object Object]).doOnClick : "
你也可以这样写:
dojo.event.log({srcObj: obj,srcFunc: "doOnClick"});
dojo.event.kwConnect
kwConnect可以做到更加灵活的绑定,比如可以设置延迟执行绑定
Usage Example:
dojo.event.kwConnect({ srcObj: dojo.byId("inputTest"), srcFunc: "onclick", adviceObj: obj, adviceFunc: "doOnclick2",
type: "before",//默认为"after",可选: "before","around",注意:type是用来决定adviceFunc的行为的,如果为"around",则aroundFunc将失效 aroundObj: null, aroundFunc: null,//如果指定了aroundFunc,则其将对adviceFunc进行拦截,但是当type为"around"时,则aroundFunc将不会执行 once: false,//默认为false,允许重复绑定 delay: 3000,//延时3秒后执行adviceFunc rate: 0,//这个从源代码没有看懂起什么作用 adviceMsg: false //这个从源代码没有看懂起什么作用 });
dojo.event.kwDisconnect
用来解除使用kwConnect指定的绑定
模块:dojo.event.topic
Topic机制与Advice机制都能够实现事件的绑定,但是显然,Topic更适合处理多重绑定。 发布主题,然后由用户订阅的机制就是一个典型的观察者模式
dojo.event.topic.registerPublisher
注册主题发布器
Usage Example:
dojo.event.topic.registerPublisher("myTopic","doOnClick2");
dojo.event.topic.subscribe
订阅主题
Usage Example:
dojo.event.topic.subscribe("myTopic","test"); //执行obj.doOnClick2()以后会自动执行test()
dojo.event.topic.unsubscribe
取消订阅主题
Usage Example:
dojo.event.topic.unsubscribe("myTopic","test");
dojo.event.topic.destroy
删除主题,此主题所有的订阅都将失效
Usage Example:
dojo.event.topic.destroy("myTopic");
模块:dojo.event.browser
dojo.event.browser.addListener
增加监听器
Usage Example:
function listener() { alert("ok"); } dojo.event.browser.addListener(document,'mousedown',listener); //事件名称可以加上"on",也可以没有"on" dojo.event.browser.addListener(document,'onmousedown',listener,true); //capture为真表示不受上层元素的事件控制
dojo.event.browser.removeListener
清除监听器(这个方法似乎是无效的)
dojo.event.browser.callListener
调用监听器
Usage Example:
dojo.event.browser.callListener(listener,document);
dojo.event.browser.stopPropagation
阻止Event传播
Usage Example:
dojo.event.browser.stopPropagation();
dojo.event.browser.preventDefault
将当前事件的返回值设置为false
Usage Example:
dojo.event.browser.preventDefault();
dojo.event.browser.keys
键定义: KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_ENTER: 13, KEY_SHIFT: 16, KEY_CTRL: 17, KEY_ALT: 18, KEY_PAUSE: 19, KEY_CAPS_LOCK: 20, KEY_ESCAPE: 27, KEY_SPACE: 32, KEY_PAGE_UP: 33, KEY_PAGE_DOWN: 34, KEY_END: 35, KEY_HOME: 36, KEY_LEFT_ARROW: 37, KEY_UP_ARROW: 38, KEY_RIGHT_ARROW: 39, KEY_DOWN_ARROW: 40, KEY_INSERT: 45, KEY_DELETE: 46, KEY_LEFT_WINDOW: 91, KEY_RIGHT_WINDOW: 92, KEY_SELECT: 93, KEY_F1: 112, KEY_F2: 113, KEY_F3: 114, KEY_F4: 115, KEY_F5: 116, KEY_F6: 117, KEY_F7: 118, KEY_F8: 119, KEY_F9: 120, KEY_F10: 121, KEY_F11: 122, KEY_F12: 123, KEY_NUM_LOCK: 144, KEY_SCROLL_LOCK: 145
dojo.event.browser.currentEvent
最近一次的Event,其属性包括:
altKey//检查alt键的状态,当alt键按下时,值为 true button//检查按下的鼠标键,0 没按键,1 按左键,2 按右键,3 按左右键,4 按中间键,5 按左键和中间键,6 按右键和中间键,7 按所有的键 //这个属性仅用于onmousedown,onmouseup,和 onmousemove 事件。对其他事件,不管鼠标状态如何,都返回 0(比如onclick) clientX//返回鼠标在窗口客户区域中的X坐标 clientY//返回鼠标在窗口客户区域中的Y坐标 ctrlKey//检查ctrl键的状态,当ctrl键按下时,值为 true fromElement//检测 onmouSEOver 和 onmouSEOut 事件发生时,鼠标所离开的元素 keyCode//检测键盘事件相对应的内码,仅当type为keydown,keyup,keypress时才有效 offsetX//检查相对于触发事件的对象,鼠标位置的水平坐标 offsetY//检查相对于触发事件的对象,鼠标位置的垂直坐标 propertyName//设置或返回元素的变化了的属性的名称,你可以通过使用 onpropertychange 事件,得到 propertyName 的值 screenX//检测鼠标相对于用户屏幕的水平位置 screenY//检测鼠标相对于用户屏幕的垂直位置 shiftKey//检查shift键的状态,当shift键按下时,值为true srcElement//返回触发事件的元素 srcFilter//返回触发 onfilterchange 事件的滤镜 toElement//检测 onmouSEOver 和 onmouSEOut 事件发生时,鼠标所进入的元素 type//返回没有“on”作为前缀的事件名,比如click,mousedown x//返回鼠标相对于css属性中有position属性的上级元素的x轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象 y//返回鼠标相对于css属性中有position属性的上级元素的y轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象 target//同srcElement currentTarget layerX//同offsetX layerY//同offsetY pageX//无水平滚动条的情况下与clientX同 pageY//无水平滚动条的情况下与clientY同 relatedTarget// 仅当type为mouSEOver,mouSEOut时才有效 keys//与dojo.event.browser.keys相同,仅当type为keydown,keypress时才有效 charCode//键值,仅当type为keypress时才有效
dojo.event.browser.isEvent
判断指定对象是否为event对象
Usage Example: dojo.event.browser.isEvent(dojo.event.browser.currentEvent); //当dojo.event.browser.currentEvent不为null时返回true (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|