javascript作为编程语言,虽然灵活,但内置函数过少、不同浏览器存在兼容系问题,所以自己学习写一个简易的底层库对理解这门语言是非常重要的。下面的代码是根据某教程改写的。现重新备份如下
1 //20:33 2014/1/19 星期日 2 //base层:a兼容性处理;b扩展接口 3 //liulele622@163.com 4 //可以使用命名空间,诸如GLOBAL.Dom GLOBAL.Event GLOBAL.lang 5 6 7 var GLOBAL={}; 8 GLOBAL.namespace=function(str){ 9 var arr=str.split("."), o=GLOBAL; 10 for(i=(arr[0]=="GLOBAL")?1:0; i < arr.length; i++){ 11 o[arr[i]] = o[arr[i]] || {}; 12 o = o[arr[i]]; 13 } 14 } 15 16 /**获取下一个元素**/ 17 //Firefox下nextSibling把空白也当成元素;而IE下仅仅是DOM元素 18 function getNextNode(node){ 19 node = typeof node == "string" ? document.getElementById(node) : node; 20 var nextNode = node.nextSibling; 21 if(!nextNode) return null; 22 if(!document.all){ //FF not supports 23 while(true){ 24 if(nextNode.nodeType == 1){ 25 break; 26 }else{ 27 if(nextNode.nextSibling){ 28 nextNode = nextNode.nextSibling; 29 }else{ 30 break; 31 } 32 } 33 } 34 } 35 return nextNode; 36 } 37 38 /**透明度**/ 39 function setOpacity(node,level){ 40 node = typeof node == "string" ? document.getElementById(node) : node; 41 if(document.all){ 42 node.style.filter = 'alpha(opacity = ' + level + ')'; 43 }else{ 44 node.style.opacity = level / 100; 45 } 46 } 47 48 /*event*/ 49 function getEventTarget(e){ 50 e = window.event || e; //IE || FF 51 return e.srcElement || e.target; 52 } 53 54 /**阻止事件冒泡**/ 55 function stopPropagation(e){ 56 e = window.event || e; 57 if(document.all){ 58 e.cancelBubble = true; 59 }else{ 60 e.stopPropagation(); 61 } 62 } 63 64 /**同时监听多个事件**/ 65 function on(node,eventType,handler){ 66 node = typeof node == "string" ? document.getElementById(node) : node; 67 if(document.all){ 68 node.attachEvent("on" + eventType, handler); 69 }else{ 70 node.addEventListener(eventType, handler, false); 71 } 72 } 73 74 /**去除首位空白**/ 75 function trim(ostr){ 76 return ostr.replace(/^s+|s+$/g,""); 77 } 78 79 /**判断是否为某类型**/ 80 function isNumber(s){ 81 return !isNaN(s); 82 } 83 function isString(s){ 84 return typeof s === "string"; 85 } 86 87 function isBoolean(s){ 88 return typeof s === "boolean"; 89 } 90 91 function isFunction(s){ 92 return typeof s === "function"; 93 } 94 95 function isNull(s){ 96 return s === null; 97 } 98 99 function isUndefined(s){ 100 return typeof s === "undefined"; 101 } 102 103 function isEmpty(s){ 104 return /^s*$/.test(s); 105 } 106 107 function isArray(s){ 108 return s instanceof Array; 109 } 110 111 /**get**/ 112 function get(node){ 113 node = typeof node == "string" ? document.getElementById(node) : node; 114 return node; 115 } 116 function $(node){ 117 node = typeof node == "string" ? document.getElementById(node) : node; 118 return node; 119 } 120 121 /**getElementsByClassName**/ 122 function getElementsByClassName(str,root,tag){ 123 if(root){ 124 root = typeof root == "string" ? document.getElementById(root) : root; 125 }else{ 126 root = document.body; 127 } 128 tag = tag || "*"; 129 var els = root.getElementsByTagName(tag), arr=[]; 130 for(var i = 0, n = els.length; i < n; i++){ 131 for(var j = 0, k = els[i].className.split(" "), l = k.length; j < l; j++){ 132 if(k[j] === str){ 133 arr.push(els[i]); 134 break; 135 } 136 } 137 } 138 return arr; 139 } 140 141 /**extend**/ 142 function extend(subClass,superClass){ 143 var F = function(){}; 144 F.prototype = superClass.prototype; 145 subClass.prototype = new F(); 146 subClass.prototype.constructor = subClass; 147 subClass.superclass = superClass.prototype; 148 if(superClass.prototype.constructor == Object.prototype.constructor){ 149 superClass.prototype.constructor = superClass; 150 } 151 } 152 153 /****/
//20:33 2014/1/19 星期日 //base层:a兼容性处理;b扩展接口 //liulele622@163.com //可以使用命名空间,诸如GLOBAL.Dom GLOBAL.Event GLOBAL.lang /**cookie操作**/ GLOBAL.namespace("Cookie"); GLOBAL.Cookie = { read : function(name){ var cookieStr = "; " + document.cookie + "; "; var index = cookieStr.indexOf("; " + name + "="); //console.log(document.cookie); if(index != -1){ var s = cookieStr.substring(index + name.length + 3, cookieStr.length); return unescape(s.substring(0,s.indexOf("; "))); }else{ return null; } }, set : function(name, value, expires){ var expDays = expires * 24 * 60 * 60 * 1000; var expDate = new Date(); expDate.setTime(expDate.getTime() + expDays); var expString = expires ? "; expires=" + expDate.toGMTString() : ""; var pathString = "; path=/"; cookie = name + "=" + escape(value) + expString + pathString; document.cookie = cookie; //console.log(cookie); }, del: function(name){ var exp = new Date(new Date().getTime() - 1); var s = this.read(name); if(s != null){ document.cookie = name + "=" + s + "; expires=" + exp.toGMTString() + "; path=/"; } } } /**Ajax**/ GLOBAL.namespace("Ajax"); GLOBAL.Ajax = function(url,fnSucc,fnFaild){ //创建ajax对象 if(window.XMLHttpRequest){ var oAjax = new XMLHttpRequest(); }else{ var oAjax = ActiveXObject("Microsoft.XMLHTTP"); } //连接服务器 oAjax.open('get',url,true); //发送 oAjax.send(); //接收 oAjax.onreadystatechange = function(){ if(oAjax.readyState == 4){ if(oAjax.status == 200){ fnSucc(oAjax.responseText); }else{ if(fnFaild){ fnFaild(); } } } } } /**运动**/ GLOBAL.namespace("Move"); GLOBAL.Move = { getStyle: function(obj,name){ if(obj.currentStyle){ return obj.currentStyle[name]; }else{ return getComputedStyle(obj,false)[name]; } }, startMove: function(obj,json,fnEnd){ clearInterval(obj.timer); obj.timer = setInterval(function(){ var bStop = true; for(var attr in json){ var cur = 0; if(attr =='opacity'){ cur = Math.round(parseFloat(GLOBAL.Move.getStyle(obj,attr))*100); }else{ cur = parseInt(GLOBAL.Move.getStyle(obj,attr)); } var speed=(json[attr]-cur)/6; speed = speed>0 ? Math.ceil(speed) : Math.floor(speed); console.log("%s,%s",cur,json[attr]); if(cur != json[attr]) bStop = false; if(attr == 'opacity'){ obj.style.filter='alpha(opacity:'+(cur+speed)+')'; obj.style.opacity=(cur+speed)/100; }else{ obj.style[attr] = cur + speed + 'px'; } } if(bStop){ clearInterval(obj.timer); if(fnEnd) fnEnd(); } }, 30); } }