function Stack() {
var items = [];
this.push =
function (element) {
items.push(element);
};
this.pop =
function () {
return items.pop();
};
this.peek =
function () {
return items[items.length -
1];
};
this.isEmpty =
function () {
return items.length ===
0;
};
this.size =
function () {
return items.length;
};
this.clear =
function () {
items = [];
};
this.print =
function () {
console.log(items.toString());
};
}
function Queue() {
var items = [];
this.enqueue =
function (element) {
items.push(element);
}
this.dequeue =
function () {
return items.shift();
}
this.front =
function () {
return items[
0];
}
this.isEmpty =
function () {
return items.length ===
0;
}
this.clear =
function () {
items = [];
}
this.size =
function () {
return items.length;
}
this.print =
function () {
console.log(items.toString());
}
}
var inherit = (
function (){
var F =
function () {};
return function (Child, Parent) {
F.prototype = Parent.prototype;
Child.prototype =
new F();
Child.prototype.constructor = Child;
Child.prototype.uber = Parent.prototype;
}
})();
function deepClone(original, target) {
var target = target || {},
toStr =
Object.prototype.toString,
arrStr =
'[object Array]';
for(
var prop
in original){
if(original.hasOwnProperty(prop)){
if(
typeof original[prop] ===
'object'){
target[prop] = (toStr.call(original[prop]) === arrStr) ? [] : {};
deepClone(original[prop], target[prop]);
}
else{
target[prop] = original[prop];
}
}
}
return target;
}
Array.prototype.unique =
function() {
var obj = {},
arr = [],
len =
this.length;
for(
var i =
0; i < len; i++){
if(!obj[
this[i]]){
obj[
this[i]] =
true;
arr.push(
this[i]);
}
}
return arr;
}
function classOf(o){
if(o ===
null)
return "Null";
if(o ===
undefined)
return "Undefined";
return Object.prototype.toString.call(o).slice(
8,-
1);
}
Element.prototype.eleIndex =
function(){
var index =
0,
node =
this;
while(node = node.previousSibling){
if(node.nodeType ==
1){
index++;
}
}
return index;
}
Element.prototype.nthParentEle =
function(n) {
var node =
this,
n = n ||
0;
while(node && n--) {
node = node.parentElement;
}
return node;
}
Element.prototype.nthSiblingEle =
function(n){
var node =
this;
while(node && n) {
if(n >
0){
if(node.nextElementSibling){
node = node.nextElementSibling;
}
else{
for(node = node.nextSibling; node && node.nodeType !==
1; node = node.nextSibling);
}
n--;
}
else{
if(node.previousElementSibling){
node = node.previousElementSibling;
}
else{
for(node = node.previousSibling; node && node.nodeType !==
1; node = node.previousSibling);
}
n++;
}
}
return node;
}
Element.prototype.insertAfter =
function (targetNode, afterNode){
var siblingNode = afterNode.nextElementSibling;
if(siblingNode) {
this.insertBefore(targetNode,siblingNode);
}
else {
this.appendChild(targetNode);
}
return targetNode;
}
Element.prototype.remove =
function (){
this.parentElement.removeChild(
this);
}
Element.prototype.revChild =
function (){
var child =
this.children,
len = child.length;
for (
var i = len -
2; i >=
0; i--){
this.appendChild(child[i]);
}
return this;
}
function getScrollOffset(){
if(window.pageXOffset){
return {
x: window.pageXOffset,
y: window.pageYOffset
}
}
else{
return {
x: document.body.scrollLeft + document.documentElement.scrollLeft,
y: document.body.scrollTop + document.documentElement.scrollTop
}
}
}
function getViewportOffset(){
if(window.innerWidth){
return {
w: window.innerWidth,
h: window.innerHeight
}
}
else if(document.compatMode ===
"CSS1Compat"){
return{
w: document.documentElement.clientWidth,
h: document.documentElement.clientHeight
}
}
else{
return{
w: document.body.clientWidth,
h: document.body.clientHeight
}
}
}
Element.prototype.getCoord =
function (){
var coordX =
0,
coordY =
0,
docEle =
this;
while(docEle){
coordX += docEle.offsetLeft;
coordY += docEle.offsetTop;
docEle = docEle.offsetParent;
}
return {
x: coordX,
y: coordY
}
};
//获取相对文档的距离
var
X= this
.getBoundingClientRect()
.left+document
.documentElement.scrollLeft
var
Y =this
.getBoundingClientRect()
.top+document
.documentElement.scrollTop
function getStyle(ele, style){
if(window.getComputedStyle){
return window.getComputedStyle(ele,
null)[style];
}
else{
return ele.currentStyle[style];
}
}
function addEvent(elem, type, handler){
if(elem.addEventListener){
elem.addEventListener(type, handler,
false);
}
else if(elem.attachEvent){
elem[
'temp' + type + handler] = handler;
elem[
'temp' + type] =
function(){
elem[
'temp' + type + handler].call(elem);
}
elem.attachEvent(
'on' + type, elem[
'temp' + type]);
}
else{
elem[
'on' + type] = handler;
}
}
function removeEvent(elem, type, handler){
if(elem.removeEventListener){
elem.removeEventListener(type, handler,
false);
}
else if(elem.detachEvent){
elem.detachEvent(
'on' + type, elem[
'temp' + type]);
}
else{
elem[
'on' + type] =
null;
}
}
function stopBubble(event){
if(event.stopPropagation){
event.stopPropagation();
}
else{
event.cancelBubble =
true;
}
}
function cancelHandler(event){
if(event.preventDefault){
event.preventDefault();
}
else{
event.returnValue =
false;
}
}
function drag(elem){
var disX;
var disY;
addEvent(elem,
"mousedown",
function(e){
var event = e || window.event;
disX = event.clientX -
parseInt(getStyle(
this,
"left"));
disY = event.clientY -
parseInt(getStyle(
this,
"top"));
addEvent(document,
"mousemove",mouseMove);
addEvent(document,
"mouseup",mouseUp);
});
function mouseMove(e){
var event = e || window.event;
elem.style.left = event.pageX - disX +
'px';
elem.style.top = event.pageY - disY +
'px';
}
function mouseUp(){
removeEvent(document,
"mousemove",mouseMove);
removeEvent(document,
"mouseup",mouseUp);
}
}
function startMove(elem, json, func){
clearInterval(elem.timer);
var iSpeed;
var iCur;
var bStop;
elem.timer = setInterval(
function(){
bStop =
true;
for(
var attr
in json){
iCur = attr ===
'opacity' ?
parseFloat(getStyle(elem,attr)) *
100 :
parseInt(getStyle(elem,attr));
iSpeed = attr ===
'opacity' ? (
parseFloat(json[attr])*
100 - iCur) /
7 : (
parseInt(json[attr]) - iCur) /
7;
iSpeed = iSpeed >
0 ?
Math.ceil(iSpeed) :
Math.floor(iSpeed);
elem.style[attr] = attr ===
"opacity" ? (iCur + iSpeed) /
100 : iCur + iSpeed +
'px';
if(iCur !== (attr ===
'opacity' ?
parseFloat(json[attr]) *
100 :
parseInt(json[attr]))){
bStop =
false;
}
}
if(bStop){
clearInterval(elem.timer);
if(func){
func();
}
}
},
30);
}
function scriptLoaded(url, callback){
var script = document.createElement(
'script');
script.type =
"text/javascript";
if(script.readyState){
script.onreadystatechange =
function(){
if(script.readyState ==
"complete" || script.readyState ==
"loaded"){
callback();
script.onreadystatechange =
null;
}
}
}
else{
script.onload =
function(){
script.onload =
null;
callback();
}
}
script.src = url;
document.head.appendChild(script);
}
Document.prototype.getByClassName =
function(target) {
var allEle = document.getElementsByTagName(
'*'),
len = allEle.length,
arr = [],
classArr = [],
classArrLen;
for(
var i =
0; i < len; i++) {
classArr = allEle[i].className.myTrim().splice(
' ');
classArrLen = classArr.length;
for(
var j =
0; j < classArrLen; j++){
if(classArr[j] === target){
arr.push(allEle[i]);
break;
}
}
}
return arr;
}
String.prototype.myTrim =
function() {
var reg =
/^\s*|\s*$/;
return this.replace(reg,
'');
}
String.prototype.trim=
function(){
return this.replace(
/(^\s*)|(\s*$)/g,
"");
}
String.prototype.ltrim=
function(){
return this.replace(
/(^\s*)/g,
"");
}
String.prototype.rtrim=
function(){
return this.replace(
/(\s*$)/g,
"");
}
function addLoadEvent(func){
var oldLoad=window.onload
if(
typeof window.onload!=
'function'){
window.onload=func
}
else{
window.onload=
function(){
oldLoad()
func()
}
}
}