📄 sunrise_event.js
字号:
SunRise.Event.getEvent(e), legacyIndex);
};
}
legacyHandlers[legacyIndex].push(li);
} else {
try {
this._simpleAdd(el, sType, wrappedFn, false);
} catch(ex) {
// handle an error trying to attach an event. If it fails
// we need to clean up the cache
this.lastError = ex;
this.removeListener(el, sType, fn);
return false;
}
}
return true;
},
fireLegacyEvent: function(e, legacyIndex) {
var ok=true, le, lh, li, scope, ret;
lh = legacyHandlers[legacyIndex].slice();
for (var i=0, len=lh.length; i<len; ++i) {
// for (var i in lh.length) {
li = lh[i];
if ( li && li[this.WFN] ) {
scope = li[this.ADJ_SCOPE];
ret = li[this.WFN].call(scope, e);
ok = (ok && ret);
}
}
le = legacyEvents[legacyIndex];
if (le && le[2]) {
le[2](e);
}
return ok;
},
getLegacyIndex: function(el, sType) {
var key = this.generateId(el) + sType;
if (typeof legacyMap[key] == "undefined") {
return -1;
} else {
return legacyMap[key];
}
},
useLegacyEvent: function(el, sType) {
if (this.webkit && ("click"==sType || "dblclick"==sType)) {
var v = parseInt(this.webkit, 10);
if (!isNaN(v) && v<418) {
return true;
}
}
return false;
},
removeListener: function(el, sType, fn) {
var i, len, li;
// The el argument can be a string
if (typeof el == "string") {
el = this.getEl(el);
// The el argument can be an array of elements or element ids.
} else if ( this._isValidCollection(el)) {
var ok = true;
for (i=el.length-1; i>-1; i--) {
ok = ( this.removeListener(el[i], sType, fn) && ok );
}
return ok;
}
if (!fn || !fn.call) {
//return false;
return this.purgeElement(el, false, sType);
}
if ("unload" == sType) {
for (i=unloadListeners.length-1; i>-1; i--) {
li = unloadListeners[i];
if (li &&
li[0] == el &&
li[1] == sType &&
li[2] == fn) {
unloadListeners.splice(i, 1);
// unloadListeners[i]=null;
return true;
}
}
return false;
}
var cacheItem = null;
var index = arguments[3];
if ("undefined" === typeof index) {
index = this._getCacheIndex(el, sType, fn);
}
if (index >= 0) {
cacheItem = listeners[index];
}
if (!el || !cacheItem) {
return false;
}
if (this.useLegacyEvent(el, sType)) {
var legacyIndex = this.getLegacyIndex(el, sType);
var llist = legacyHandlers[legacyIndex];
if (llist) {
for (i=0, len=llist.length; i<len; ++i) {
// for (i in llist.length) {
li = llist[i];
if (li &&
li[this.EL] == el &&
li[this.TYPE] == sType &&
li[this.FN] == fn) {
llist.splice(i, 1);
// llist[i]=null;
break;
}
}
}
} else {
try {
this._simpleRemove(el, sType, cacheItem[this.WFN], false);
} catch(ex) {
this.lastError = ex;
return false;
}
}
// removed the wrapped handler
delete listeners[index][this.WFN];
delete listeners[index][this.FN];
listeners.splice(index, 1);
// listeners[index]=null;
return true;
},
getTarget: function(ev, resolveTextNode) {
var t = ev.target || ev.srcElement;
return this.resolveTextNode(t);
},
resolveTextNode: function(n) {
try {
if (n && 3 == n.nodeType) {
return n.parentNode;
}
} catch(e) { }
return n;
},
getPageX: function(ev) {
var x = ev.pageX;
if (!x && 0 !== x) {
x = ev.clientX || 0;
if ( this.isIE ) {
x += this._getScrollLeft();
}
}
return x;
},
getPageY: function(ev) {
var y = ev.pageY;
if (!y && 0 !== y) {
y = ev.clientY || 0;
if ( this.isIE ) {
y += this._getScrollTop();
}
}
return y;
},
getXY: function(ev) {
return [this.getPageX(ev), this.getPageY(ev)];
},
getRelatedTarget: function(ev) {
var t = ev.relatedTarget;
if (!t) {
if (ev.type == "mouseout") {
t = ev.toElement;
} else if (ev.type == "mouseover") {
t = ev.fromElement;
}
}
return this.resolveTextNode(t);
},
getTime: function(ev) {
if (!ev.time) {
var t = new Date().getTime();
try {
ev.time = t;
} catch(ex) {
this.lastError = ex;
return t;
}
}
return ev.time;
},
stopEvent: function(ev) {
this.stopPropagation(ev);
this.preventDefault(ev);
},
stopPropagation: function(ev) {
if (ev.stopPropagation) {
ev.stopPropagation();
} else {
ev.cancelBubble = true;
}
},
preventDefault: function(ev) {
if (ev.preventDefault) {
ev.preventDefault();
} else {
ev.returnValue = false;
}
},
getEvent: function(e, boundEl) {
var ev = e || window.event;
if (!ev) {
var c = this.getEvent.caller;
while (c) {
ev = c.arguments[0];
if (ev && Event == ev.constructor) {
break;
}
c = c.caller;
}
}
return ev;
},
_getCacheIndex: function(el, sType, fn) {
for (var i=0, l=listeners.length; i<l; i=i+1) {
var li = listeners[i];
if ( li &&
li[this.FN] == fn &&
li[this.EL] == el &&
li[this.TYPE] == sType ) {
return i;
}
}
return -1;
},
generateId: function(el) {
var id = el.id;
if (!id) {
id = "yuievtautoid-" + counter;
++counter;
el.id = id;
}
return id;
},
_isValidCollection: function(o) {
try {
return ( o && // o is something
typeof o !== "string" && // o is not a string
o.length && // o is indexed
!o.tagName && // o is not an HTML element
!o.alert && // o is not a window
typeof o[0] !== "undefined" );
} catch(ex) {
return false;
}
},
elCache: {},
getEl: function(id) {
return (typeof id === "string") ? document.getElementById(id) : id;
},
clearCache: function() { },
DOMReadyEvent: new SunRise.CustomEvent("DOMReady", this),
_load: function(e) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -