📄 sunrise_event.js
字号:
if (!loadComplete) {
loadComplete = true;
var EU = SunRise.Event;
EU._ready();
EU._tryPreloadAttach();
}
},
_ready: function(e) {
var EU = SunRise.Event;
if (!EU.DOMReady) {
EU.DOMReady=true;
// Fire the content ready custom event
EU.DOMReadyEvent.fire();
// Remove the DOMContentLoaded (FF/Opera)
EU._simpleRemove(document, "DOMContentLoaded", EU._ready);
}
},
_tryPreloadAttach: function() {
if (onAvailStack.length === 0) {
retryCount = 0;
clearInterval(this._interval);
this._interval = null;
return;
}
if (this.locked) {
return;
}
if (this.isIE) {
if (!this.DOMReady) {
this.startInterval();
return;
}
}
this.locked = true;
var tryAgain = !loadComplete;
if (!tryAgain) {
tryAgain = (retryCount > 0 && onAvailStack.length > 0);
}
// onAvailable
var notAvail = [];
var executeItem = function (el, item) {
var scope = el;
if (item.override) {
if (item.override === true) {
scope = item.obj;
} else {
scope = item.override;
}
}
item.fn.call(scope, item.obj);
};
var i, len, item, el, ready=[];
// onAvailable onContentReady
for (i=0, len=onAvailStack.length; i<len; i=i+1) {
item = onAvailStack[i];
if (item) {
el = this.getEl(item.id);
if (el) {
if (item.checkReady) {
if (loadComplete || el.nextSibling || !tryAgain) {
ready.push(item);
onAvailStack[i] = null;
}
} else {
executeItem(el, item);
onAvailStack[i] = null;
}
} else {
notAvail.push(item);
}
}
}
// make sure onContentReady fires after onAvailable
for (i=0, len=ready.length; i<len; i=i+1) {
item = ready[i];
executeItem(this.getEl(item.id), item);
}
retryCount--;
if (tryAgain) {
for (i=onAvailStack.length-1; i>-1; i--) {
item = onAvailStack[i];
if (!item || !item.id) {
onAvailStack.splice(i, 1);
}
}
this.startInterval();
} else {
clearInterval(this._interval);
this._interval = null;
}
this.locked = false;
},
purgeElement: function(el, recurse, sType) {
var oEl = (SunRise.lang.isString(el)) ? this.getEl(el) : el;
var elListeners = this.getListeners(oEl, sType), i, len;
if (elListeners) {
for (i=elListeners.length-1; i>-1; i--) {
var l = elListeners[i];
this.removeListener(oEl, l.type, l.fn);
}
}
if (recurse && oEl && oEl.childNodes) {
for (i=0,len=oEl.childNodes.length; i<len ; ++i) {
this.purgeElement(oEl.childNodes[i], recurse, sType);
}
}
},
getListeners: function(el, sType) {
var results=[], searchLists;
if (!sType) {
searchLists = [listeners, unloadListeners];
} else if (sType === "unload") {
searchLists = [unloadListeners];
} else {
searchLists = [listeners];
}
var oEl = (SunRise.lang.isString(el)) ? this.getEl(el) : el;
for (var j=0;j<searchLists.length; j=j+1) {
var searchList = searchLists[j];
if (searchList) {
for (var i=0,len=searchList.length; i<len ; ++i) {
var l = searchList[i];
if ( l && l[this.EL] === oEl &&
(!sType || sType === l[this.TYPE]) ) {
results.push({
type: l[this.TYPE],
fn: l[this.FN],
obj: l[this.OBJ],
adjust: l[this.OVERRIDE],
scope: l[this.ADJ_SCOPE],
index: i
});
}
}
}
}
return (results.length) ? results : null;
},
_unload: function(e) {
var EU = SunRise.Event, i, j, l, len, index,
ul = unloadListeners.slice();
// execute and clear stored unload listeners
for (i=0,len=unloadListeners.length; i<len; ++i) {
l = ul[i];
if (l) {
var scope = window;
if (l[EU.ADJ_SCOPE]) {
if (l[EU.ADJ_SCOPE] === true) {
scope = l[EU.UNLOAD_OBJ];
} else {
scope = l[EU.ADJ_SCOPE];
}
}
l[EU.FN].call(scope, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
ul[i] = null;
l=null;
scope=null;
}
}
unloadListeners = null;
if (listeners) {
for (j=listeners.length-1; j>-1; j--) {
l = listeners[j];
if (l) {
EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], j);
}
}
l=null;
}
legacyEvents = null;
EU._simpleRemove(window, "unload", EU._unload);
},
_getScrollLeft: function() {
return this._getScroll()[1];
},
_getScrollTop: function() {
return this._getScroll()[0];
},
_getScroll: function() {
var dd = document.documentElement, db = document.body;
if (dd && (dd.scrollTop || dd.scrollLeft)) {
return [dd.scrollTop, dd.scrollLeft];
} else if (db) {
return [db.scrollTop, db.scrollLeft];
} else {
return [0, 0];
}
},
regCE: function() {
// does nothing
},
_simpleAdd: function () {
if (window.addEventListener) {
return function(el, sType, fn, capture) {
el.addEventListener(sType, fn, (capture));
};
} else if (window.attachEvent) {
return function(el, sType, fn, capture) {
el.attachEvent("on" + sType, fn);
};
} else {
return function(){};
}
}(),
_simpleRemove: function() {
if (window.removeEventListener) {
return function (el, sType, fn, capture) {
el.removeEventListener(sType, fn, (capture));
};
} else if (window.detachEvent) {
return function (el, sType, fn) {
el.detachEvent("on" + sType, fn);
};
} else {
return function(){};
}
}()
};
}();
(function() {
var EU = SunRise.Event;
EU.on = EU.addListener;
if (EU.isIE) {
SunRise.Event.onDOMReady(
SunRise.Event._tryPreloadAttach,
SunRise.Event, true);
var n = document.createElement('p');
EU._dri = setInterval(function() {
try {
// throws an error if doc is not ready
n.doScroll('left');
clearInterval(EU._dri);
EU._dri = null;
EU._ready();
n = null;
} catch (ex) {
}
}, EU.POLL_INTERVAL);
} else if (EU.webkit && EU.webkit < 525) {
EU._dri = setInterval(function() {
var rs=document.readyState;
if ("loaded" == rs || "complete" == rs) {
clearInterval(EU._dri);
EU._dri = null;
EU._ready();
}
}, EU.POLL_INTERVAL);
} else {
EU._simpleAdd(document, "DOMContentLoaded", EU._ready);
}
EU._simpleAdd(window, "load", EU._load);
EU._simpleAdd(window, "unload", EU._unload);
EU._tryPreloadAttach();
})();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -