Dojo学习笔记

 

Dojo 学习笔记
 
 
模块: 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"),"onclick",obj,"doOnClick2");
如果存在需要进行多个事件的绑定的时候,你就会看到 dojo 的方便之处了
obj2 = { doOnClick2: function(){alert("Clicked!");}}
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");
dojo.event.connect(dojo.byId("inputTest"),"onclick",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"),"onclick","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", obj, "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,keyup,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
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值