一些常用的原生js方法(函數)


1. addLoadEvent解決window.onload=fn在頁面加載執行一次,addLoadEvent(fn)可以直接綁定多個函數在加載后執行

 1 function addLoadEvent(fn) {
 2         var oldLoad = window.onload; //把之前window.onload調用的函數保存起來
 3         if( typeof window.onload != "function") { //如果window.onload還未指向function
 4             window.onload = fn ;
 5         } else {
 6             window.onload = function() { //
 7                 oldLoad();
 8                 fn();
 9             }
10         }
11     }

 

 

2.getElementsByClassName ,HTML5新增了此方法,使用這個方法可以帶多個類名,如getElementsByClassName(" sale active ") 順序不重要,為了使用老瀏覽器

 1 function getElementsByClassName(node,className) {
 2     if(node.getElementsByClassName) {
 3         //使用h5現有方法
 4         return node.getElementsByClassName(className);
 5     } else {
 6         var result = new Array();
 7         var elems = node.getElementsByTagName("*");
 8         for( var i=0; i<elems.length; i++) {
 9             if(elems[i].className.indexOf(className) != -1) {
10                 result[result.length] = elems[i]; // 或result.push(elems[i]);
11             }
12         }
13         return result;
14     }
15 }

 

 

3.getStyle(obj,attr)獲取對象屬性

1 function getStyle(obj,attr){
2         if(obj.currentStyle){
3             return obj.currentStyle[attr];
4         }
5         else{
6             return getComputedStyle(obj,false)[attr];
7         }
8     }

 

4.css(obj,attr,valve),上面的增強版,獲取和設置一個對象的CSS屬性 

 1 function css(obj, attr, value)
 2 {
 3     switch (arguments.length)
 4     {
 5         case 2:     
 6             if(typeof arguments[1] == "object") //2個參數,第一個參數為obj,第二個參數為json(對象)格式{attr:value,attr2:value}
 7             {    
 8                 for (var i in attr) i == "opacity" ? (obj.style["filter"] = "alpha(opacity=" + attr[i] + ")", obj.style[i] = attr[i] / 100) : obj.style[i] = attr[i];
 9             }
10             else     //否則,2個參數一般為獲取obj.attr值
11             {    
12                 return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, null)[attr]
13             }
14             break;
15         case 3:     //3個參數為直接設置屬性 obj.style[attr] = value
16             attr == "opacity" ? (obj.style["filter"] = "alpha(opacity=" + value + ")", obj.style[attr] = value / 100) : obj.style[attr] = value;
17             break;
18     }
19 };

 

5. insertAfter,DOM有insertBefore方法,沒有 insertAfter方法。我們完全可以利用已有DOM方法和屬性編寫一個insertAfter()函數

 1 function insertAfter(newElement, targetElement) {
 2         var parent = targetElement.parentNode ;
 3         // 如果父元素最后的子節點就是 目標節點 , 則直接追加到父元素后面
 4         if( parent.lastChild == targetElement ) {
 5             parent.appendChild(newElement);
 6         } else {
 7             //否則將新元素插入到目標元素的下一個元素之前
 8             parent.insertBefore(newElement,targetElement.nextSibling);
 9         }
10     }

 

6.借助call或apply用其它對象的方法來操作某個函數,

1 function bind(obj,fn) {
2     return function(){
3         fn.apply(obj,arguments); //相當於obj.fn 
4     }
5 }

 

7.事件對象綁定與解除

 1 /*-------------------------- +
 2   事件綁定, 刪除
 3  +-------------------------- */
 4 var EventUtil = {
 5     addHandler: function (oElement, sEvent, fnHandler) {
 6         oElement.addEventListener ? oElement.addEventListener(sEvent, fnHandler, false) : (oElement["_" + sEvent + fnHandler] = fnHandler, oElement[sEvent + fnHandler] = function () {oElement["_" + sEvent + fnHandler]()}, oElement.attachEvent("on" + sEvent, oElement[sEvent + fnHandler]))
 7     },
 8     removeHandler: function (oElement, sEvent, fnHandler) {
 9         oElement.removeEventListener ? oElement.removeEventListener(sEvent, fnHandler, false) : oElement.detachEvent("on" + sEvent, oElement[sEvent + fnHandler])
10     },
11     addLoadHandler: function (fnHandler) {
12         this.addHandler(window, "load", fnHandler)
13     }
14 };

 

8.萬能運動方法

 1 function startMove(obj,json,endFn){
 2     
 3         clearInterval(obj.timer);
 4         
 5         obj.timer = setInterval(function(){
 6             
 7             var bBtn = true;
 8             
 9             for(var attr in json){
10                 
11                 var iCur = 0;
12             
13                 if(attr == 'opacity'){
14                     if(Math.round(parseFloat(getStyle(obj,attr))*100)==0){
15                     iCur = Math.round(parseFloat(getStyle(obj,attr))*100);
16                     
17                     }
18                     else{
19                         iCur = Math.round(parseFloat(getStyle(obj,attr))*100) || 100;
20                     }    
21                 }
22                 else{
23                     iCur = parseInt(getStyle(obj,attr)) || 0;
24                 }
25                 
26                 var iSpeed = (json[attr] - iCur)/8;
27             iSpeed = iSpeed >0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
28                 if(iCur!=json[attr]){
29                     bBtn = false;
30                 }
31                 
32                 if(attr == 'opacity'){
33                     obj.style.filter = 'alpha(opacity=' +(iCur + iSpeed)+ ')';
34                     obj.style.opacity = (iCur + iSpeed)/100;
35                     
36                 }
37                 else{
38                     obj.style[attr] = iCur + iSpeed + 'px';
39                 }
40                 
41                 
42             }
43             
44             if(bBtn){
45                 clearInterval(obj.timer);
46                 
47                 if(endFn){
48                     endFn.call(obj);
49                 }
50             }
51             
52         },30);
53     
54     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM