Dojo1
来源:互联网 发布:xmouse软件下载 编辑:程序博客网 时间:2024/05/01 13:30
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"),"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
///////////////////////////////////////////////////////////////////////////////////////////
Dojo学习笔记(9. dojo.graphics.color & dojo.uri.Uri)
模块:dojo.graphics.color
下面是dojo里定义的颜色名称
dojo.graphics.color.named.white //白色
dojo.graphics.color.named.black //黑色
dojo.graphics.color.named.red //红色
dojo.graphics.color.named.green //绿色
dojo.graphics.color.named.blue //蓝色
dojo.graphics.color.named.navy //海军蓝
dojo.graphics.color.named.gray //灰色
dojo.graphics.color.named.silver//银色
dojo.graphics.color.Color
颜色类
Usage Example:
var color = new dojo.graphics.color.Color(dojo.graphics.color.named.black);
//定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color(0,0,0); //定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color(0,0,0,1.0); //定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color([0,0,0,1.0]); //定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color('rgb(0,0,0)'); //定义一个黑色的颜色对象
var color = new dojo.graphics.color.Color('#000000'); //定义一个黑色的颜色对象
dojo.graphics.color.Color.toRgb
Usage Example:
color.toRgb(); //返回一个[0,0,0]的数组
color.toRgb(true); //返回一个[0,0,0,1.0]的数组
dojo.graphics.color.Color.toRgba
Usage Example:
color.toRgba(); //返回一个[0,0,0,1.0]的数组
dojo.graphics.color.Color.toHex
dojo.graphics.color.Color.toString
Usage Example:
color.toHex(); //返回"#000000"
color.toString(); //返回"#000000"
dojo.graphics.color.Color.toCss
Usage Example:
color.toCss(); //返回"rgb(0,0,0)"
dojo.graphics.color.Color.blend
混合另一个颜色得到一个新颜色
Usage Example:
color.blend('#ffffff', 1); //返回[255,255,255]
color.blend('#ffffff', -1); //返回[0,0,0]
color.blend('#ffffff', 0); //按1比1混合黑色和白色,返回[127,127,127]
颜色参数可以为颜色的任意形式,比如数组,字符串等
or
dojo.graphics.color.blend([0,0,0], [255,255,255], 0); //will return [127,127,127]
dojo.graphics.color.blend("#000000", "#ffffff", 0); //will return "#7f7f7f"
若第一个参数为字符串,则返回值也会返回字符串
dojo.graphics.color.Color.blendHex
Usage Example:
dojo.graphics.color.blendHex("#000000", "#ffffff", 0); //will return "#7f7f7f"
dojo.graphics.color.extractRGB
将输入转换为RGB数组
dojo.graphics.color.hex2rgb
将输入的字符串转换为RGB数组
dojo.graphics.color.rgb2hex
将输入的RGB数组转换为字符串
dojo.graphics.color.Color.fromArray
Usage Example:
var color = dojo.graphics.color.Color.fromArray([0,0,0,1.0]);
模块:dojo.uri.Uri
dojo.uri.Uri
专门用来处理URI(统一资源标识符)的类
Usage Example:
uri = (new dojo.uri.Uri("http://myserver/dojo/", "guide.html")).toString();
//uri will be "http://myserver/dojo/guide.html"
uri = (new dojo.uri.Uri("http://myserver/dojo/", "../guide.html")).toString();
//uri will be "http://myserver/guide.html"
RFC规定的URI语法:[scheme:][//authority][path][?query][#fragment]
authority语法:[user-info@]host[:port]
比如我们定义一个uri
var uri = new dojo.uri.Uri("http://user:password@myserver:80/dojo/", "guide.html?page=1#top");
则uri的属性如下:
authority: 服务器名 "user:password@myserver:80"
fragment: 片断名 "top"
host: 主机名 "myserver"
password: 密码 "password"
path: 路径 "/dojo/guide.html"
port: 端口 80
query: 参数 "page=1"
scheme: 模式 "http"
uri: 完整的地址 "http://user:password@myserver:80/dojo/guide.html?page=1"
user: 用户名 "user:" 似乎有点问题,多了一个冒号
- Dojo1
- html dojo1.9
- dojo1.9.0 表格分页
- Dojo1.6新特性概览
- Dojo1.6新特性概览
- Dojo1.7动画特效详解
- Dojo1.8笔记1 为什么
- Dojo1.8笔记2 安装
- dojo1.8树组件使用
- Dojo1.2延迟发布 性能值得期待
- dojo1.1.0学习总结--简单登陆案例
- dojo1.1.0学习总结--注册案例
- dojo1.1.0学习总结--在线编辑器案例
- dojo1.1.0学习总结--简单表格案例
- dojo1.3与IE6.0兼容问题!
- Dojo1.3.x的Ajax示例
- Dojo1.6新特性:Dojo Object Stores
- Dojo1.6新特性:再谈AMD规范
- 2. 设计与问题
- 差分约束系统
- 建筑的数学性
- UNIX高级环境编程——UNIX基础知识笔记
- 3. 光标
- Dojo1
- 仍旧看不懂
- Qt学习之路(11): MainWindow
- I LOVE ALL THE BLUFFING THINGS
- Qt学习之路(12): 菜单和工具条
- QT中安全地进行类型转换
- Qt学习之路(13): 菜单和工具条(续)
- 使用style.xml自定义button效果
- Dojo IBM