日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)

發(fā)布時間:2025/3/8 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Dojo學(xué)習(xí)筆記(8. dojo.event & dojo.event.topic & dojo.event.browser)

模塊:dojo.event

終于進(jìn)入有名的dojo事件處理系統(tǒng)的學(xué)習(xí)了,學(xué)習(xí)前建議讀者先去補(bǔ)習(xí)一下AOP的相關(guān)知識

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");

如果存在需要進(jìn)行多個事件的綁定的時候,你就會看到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可以對任何對象的方法進(jìn)行綁定,而不是只能針對DOM對象

dojo.event.connect(obj,"doOnclick2","doOnClick1"); //在調(diào)用obj.doOnclick2()后調(diào)用doOnClick1()


dojo.event.connectBefore

dojo.event.connect默認(rèn)是后綁定,connectBefore則是早綁定,綁定的方法將在指定方法前執(zhí)行,用法與connect一致


dojo.event.connectAround

Usage Example:

function aroundTest(invocation){
? //此處可以增加代碼,比如檢查參數(shù)(invocation.args)
? var result = invocation.proceed();
? //此處可以增加代碼,比如修改結(jié)果(result)
? return result;
}
dojo.event.connectAround(dojo.byId("inputTest"),"onclick","aroundTest");


dojo.event.connectOnce
說起這個函數(shù),還真的是讓我想了半天,直覺上我就把它想象成executeOnce,結(jié)果測試的結(jié)果讓我差點(diǎn)想不通
connectOnce就是指保證只綁定一次,來避免重復(fù)綁定會導(dǎo)致的重復(fù)執(zhí)行的問題


dojo.event.disconnect

解除綁定,調(diào)用參數(shù)與connect一致,即可解除之前的綁定操作


dojo.event.log

在執(zhí)行指定對象的指定方法后自動記錄日志

Usage Example:

dojo.event.log(obj, "doOnClick");?//當(dāng)調(diào)用obj.doOnClick時記錄下日志"DEBUG:? ([object Object]).doOnClick : "

你也可以這樣寫:

dojo.event.log({srcObj: obj, srcFunc: "doOnClick"});


dojo.event.kwConnect

kwConnect可以做到更加靈活的綁定,比如可以設(shè)置延遲執(zhí)行綁定

Usage Example:

dojo.event.kwConnect({
? srcObj: dojo.byId("inputTest"),
? srcFunc: "onclick",
? adviceObj: obj,
? adviceFunc: "doOnclick2",

? type: "before", //默認(rèn)為"after",可選: "before", "around",注意:type是用來決定adviceFunc的行為的,如果為"around",則aroundFunc將失效
? aroundObj: null,
? aroundFunc: null, //如果指定了aroundFunc,則其將對adviceFunc進(jìn)行攔截,但是當(dāng)type為"around"時,則aroundFunc將不會執(zhí)行
? once: false, //默認(rèn)為false,允許重復(fù)綁定
? delay: 3000, //延時3秒后執(zhí)行adviceFunc
? rate: 0, //這個從源代碼沒有看懂起什么作用
? adviceMsg: false //這個從源代碼沒有看懂起什么作用
});


dojo.event.kwDisconnect

用來解除使用kwConnect指定的綁定


模塊:dojo.event.topic

Topic機(jī)制與Advice機(jī)制都能夠?qū)崿F(xiàn)事件的綁定,但是顯然,Topic更適合處理多重綁定。
發(fā)布主題,然后由用戶訂閱的機(jī)制就是一個典型的觀察者模式

dojo.event.topic.registerPublisher

注冊主題發(fā)布器

Usage Example:

dojo.event.topic.registerPublisher("myTopic", obj, "doOnClick2");


dojo.event.topic.subscribe

訂閱主題

Usage Example:

dojo.event.topic.subscribe("myTopic", "test"); //執(zhí)行obj.doOnClick2()以后會自動執(zhí)行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

增加監(jiān)聽器

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

清除監(jiān)聽器(這個方法似乎是無效的)


dojo.event.browser.callListener

調(diào)用監(jiān)聽器

Usage Example:

dojo.event.browser.callListener(listener, document);


dojo.event.browser.stopPropagation

阻止Event傳播

Usage Example:

dojo.event.browser.stopPropagation();


dojo.event.browser.preventDefault

將當(dāng)前事件的返回值設(shè)置為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鍵的狀態(tài),當(dāng)alt鍵按下時,值為 true
button??//檢查按下的鼠標(biāo)鍵,0 沒按鍵,1 按左鍵,2 按右鍵,3 按左右鍵,4 按中間鍵,5 按左鍵和中間鍵,6 按右鍵和中間鍵,7 按所有的鍵
??//這個屬性僅用于onmousedown, onmouseup, 和 onmousemove 事件。對其他事件,不管鼠標(biāo)狀態(tài)如何,都返回 0(比如onclick)
clientX??//返回鼠標(biāo)在窗口客戶區(qū)域中的X坐標(biāo)
clientY??//返回鼠標(biāo)在窗口客戶區(qū)域中的Y坐標(biāo)
ctrlKey??//檢查ctrl鍵的狀態(tài),當(dāng)ctrl鍵按下時,值為 true
fromElement?//檢測 onmouseover 和 onmouseout 事件發(fā)生時,鼠標(biāo)所離開的元素
keyCode??//檢測鍵盤事件相對應(yīng)的內(nèi)碼,僅當(dāng)type為keydown,keyup,keypress時才有效
offsetX??//檢查相對于觸發(fā)事件的對象,鼠標(biāo)位置的水平坐標(biāo)
offsetY??//檢查相對于觸發(fā)事件的對象,鼠標(biāo)位置的垂直坐標(biāo)
propertyName?//設(shè)置或返回元素的變化了的屬性的名稱,你可以通過使用 onpropertychange 事件,得到 propertyName 的值
screenX??//檢測鼠標(biāo)相對于用戶屏幕的水平位置
screenY??//檢測鼠標(biāo)相對于用戶屏幕的垂直位置
shiftKey?//檢查shift鍵的狀態(tài),當(dāng)shift鍵按下時,值為true
srcElement?//返回觸發(fā)事件的元素
srcFilter?//返回觸發(fā) onfilterchange 事件的濾鏡
toElement?//檢測 onmouseover 和 onmouseout 事件發(fā)生時,鼠標(biāo)所進(jìn)入的元素
type??//返回沒有“on”作為前綴的事件名,比如click, mousedown
x??//返回鼠標(biāo)相對于css屬性中有position屬性的上級元素的x軸坐標(biāo)。如果沒有css屬性中有position屬性的上級元素,默認(rèn)以BODY元素作為參考對象
y??//返回鼠標(biāo)相對于css屬性中有position屬性的上級元素的y軸坐標(biāo)。如果沒有css屬性中有position屬性的上級元素,默認(rèn)以BODY元素作為參考對象
target??//同srcElement
currentTarget
layerX??//同offsetX
layerY??//同offsetY
pageX??//無水平滾動條的情況下與clientX同
pageY??//無水平滾動條的情況下與clientY同
relatedTarget?// 僅當(dāng)type為mouseover,mouseout時才有效
keys??//與dojo.event.browser.keys相同,僅當(dāng)type為keydown,keyup,keypress時才有效
charCode?//鍵值,僅當(dāng)type為keypress時才有效


dojo.event.browser.isEvent

判斷指定對象是否為event對象

Usage Example:

dojo.event.browser.isEvent(dojo.event.browser.currentEvent); //當(dāng)dojo.event.browser.currentEvent不為null時返回true

總結(jié)

以上是生活随笔為你收集整理的Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。