mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-07-20 18:18:56 +00:00
refactor(dom) Events
This commit is contained in:
parent
e8161e859c
commit
5f3c4a9f22
1 changed files with 68 additions and 64 deletions
|
|
@ -306,51 +306,48 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
|
|||
},
|
||||
|
||||
EventsProto = function() {
|
||||
var Events = this,
|
||||
ADD = true,
|
||||
REMOVE = false,
|
||||
process = function(pAdd, type, listener, elementParam, useCapture) {
|
||||
var i, n,
|
||||
element = (elementParam || window),
|
||||
var Events = this,
|
||||
|
||||
parseArgs = function(eventName, listener, element, useCapture, callback) {
|
||||
var type = Util.getType(eventName);
|
||||
|
||||
eventProcess = pAdd ?
|
||||
element.addEventListener :
|
||||
element.removeEventListener,
|
||||
|
||||
ret = type && eventProcess,
|
||||
event = '';
|
||||
switch(type) {
|
||||
case 'string':
|
||||
callback(element || window,
|
||||
eventName,
|
||||
listener,
|
||||
useCapture);
|
||||
break;
|
||||
|
||||
eventProcess = eventProcess.bind(element);
|
||||
|
||||
if (ret) {
|
||||
if (Util.isString(type))
|
||||
eventProcess(
|
||||
type,
|
||||
case 'array':
|
||||
eventName.forEach(function(eventName) {
|
||||
parseArgs(
|
||||
eventName,
|
||||
listener,
|
||||
useCapture
|
||||
element,
|
||||
useCapture,
|
||||
callback
|
||||
);
|
||||
else if (Util.isArray(type))
|
||||
for (i = 0, n = type.length; i < n; i++)
|
||||
process(
|
||||
pAdd,
|
||||
type[i],
|
||||
listener,
|
||||
element,
|
||||
useCapture
|
||||
);
|
||||
else if (Util.isObject(type)) {
|
||||
if (listener)
|
||||
element = listener;
|
||||
});
|
||||
break;
|
||||
|
||||
case 'object':
|
||||
if (listener)
|
||||
element = listener;
|
||||
|
||||
for (event in type)
|
||||
process(
|
||||
pAdd,
|
||||
event,
|
||||
type[event],
|
||||
element,
|
||||
useCapture
|
||||
);
|
||||
}
|
||||
Object.keys(eventName).forEach(function(name) {
|
||||
var eventListener = eventName[name];
|
||||
|
||||
parseArgs(
|
||||
name,
|
||||
eventListener,
|
||||
element,
|
||||
useCapture,
|
||||
callback
|
||||
);
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -362,14 +359,14 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
|
|||
* @param useCapture
|
||||
* @param element {document by default}
|
||||
*/
|
||||
this.add = function(type, listener, element, useCapture) {
|
||||
return process(
|
||||
ADD,
|
||||
type,
|
||||
listener,
|
||||
element,
|
||||
useCapture
|
||||
);
|
||||
this.add = function(type, listener, useCapture, element) {
|
||||
parseArgs(type, listener, useCapture, element, function(element) {
|
||||
var args = Util.slice(arguments, 1);
|
||||
|
||||
window.addEventListener.apply(element, args);
|
||||
});
|
||||
|
||||
return Events;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -381,15 +378,14 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
|
|||
* @param element {document by default}
|
||||
*/
|
||||
this.addOnce = function(type, listener, element, useCapture) {
|
||||
var ret = this,
|
||||
lOneTime = function (pEvent) {
|
||||
ret.remove(type, lOneTime, element, useCapture);
|
||||
listener(pEvent);
|
||||
var once = function (event) {
|
||||
Events.remove(type, once, element, useCapture);
|
||||
listener(event);
|
||||
};
|
||||
|
||||
this.add(type, lOneTime, element, useCapture);
|
||||
this.add(type, once, element, useCapture);
|
||||
|
||||
return ret;
|
||||
return Events;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -400,17 +396,16 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
|
|||
* @param useCapture
|
||||
* @param element {document by default}
|
||||
*/
|
||||
this.remove = function(type, listener, element, useCapture) {
|
||||
return process(
|
||||
REMOVE,
|
||||
type,
|
||||
listener,
|
||||
element,
|
||||
useCapture
|
||||
);
|
||||
this.remove = function(type, listener, useCapture, element) {
|
||||
parseArgs(type, listener, useCapture, element, function(element) {
|
||||
var args = Util.slice(arguments, 1);
|
||||
|
||||
window.removeEventListener.apply(element, args);
|
||||
});
|
||||
|
||||
return Events;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* safe add event keydown listener
|
||||
*
|
||||
|
|
@ -465,6 +460,16 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
|
|||
return this.add('error', listener, element, useCapture);
|
||||
};
|
||||
|
||||
/**
|
||||
* safe add load click listener
|
||||
*
|
||||
* @param listener
|
||||
* @param useCapture
|
||||
*/
|
||||
this.addLoad = function(listener, element, useCapture) {
|
||||
return this.add('load', listener, element, useCapture);
|
||||
};
|
||||
|
||||
/**
|
||||
* crossbrowser create event
|
||||
*
|
||||
|
|
@ -486,7 +491,6 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
|
|||
return event;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* create keydown event
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue