day9(2017.10.23)

2017-10-23  本文已影响9人  晴_eeca

经典的函数封装

点击div随机改变颜色
//js
        var div = document.getElementsByTagName('div')[0];
        function randomNum(a){
            str = "#";
            for(var i=0;i<6;i++){
                str += Math.round(Math.random()*a).toString(16) 
                //Math.round(Math.random()*a)获取一个随机数 //toString(16)转换成16进制
                //Math.round(0.6)获取四舍五入的整数//Math.random()获取0~1之间的随机数
            }
            return str;
        }
        div.onclick = function(){
            console.log(randomNum(16))
            div.style.background = randomNum(16);
        }
递归求斐波那契数列
//js
//斐波那契数列  第三项等于前两项的和
//1,1,2,3,5,8,13,21,34,55,89,144....
        function feibo(n){
            if(n==1){
                return 1;
            }
            if(n==2){
                return 1;
            }
            return feibo(n-1)+feibo(n-2);
        }
        console.log(feibo(8));  //21
bom操作location.search获取地址栏
//js
function getPara(paraName){
    if(location.search.indexOf("?") == -1){  
       return;
    }
    var str = location.search.slice(1);  //获取地址栏并且去掉?
    str = str.replace(/&/g,"\",\"");   //将&替换成,
    str = str.replace(/=/g,"\":\"");  // 将=替换成:
    str = "{\""+str+"\"}"   //字符串拼接
    return JSON.parse(str)[paraName];  //JOSN.parse()将字符串转为对象
}
DOM2级事件添加封装函数
//js
function addEvent(obj,event,fun){
      if(obj.addEventListener){  //兼容IE意外的浏览器  this指向对象
            obj.addEventListener(event,fun,false);  //点三个参数false表示事件是冒泡模型  true表示事件是捕获模型
      }else if(obj.attachEvent){  //IE浏览器   this指向window
            obj.attachEvent("on"+event,function(){
                fun.call(obj);   //call能在调用函数的时候改变this指向
            });  //不需要第三个参数,IE的事件模型是冒泡事件
       }else{
            obj["on"+event];//DOM一级事件  兼容任何浏览器
      }

}
DOM2级事件移除封装函数
//js
function removeEvent(obj,event,fun){
            if(obj.removeEventListener){  //兼容IE意外的浏览器
                obj.removeEventListener(event,fun,false);  //点三个参数false表示事件是冒泡模型  true表示事件是捕获模型
            }else if(obj.detachEvent){  //IE浏览器
                obj.detachEvent("on"+event,function(){
                    fun.call(obj);
                });  //不需要第三个参数,IE的事件模型是冒泡事件
            }else{
                obj["on"+event] = null; //DOM一级事件  兼容任何浏览器
            }

        }
阻止事件冒泡
//js
function preventBubble(ev){   //阻止事件冒泡
      console.log(event)
      var e = ev||event;
      if(e.stopPropagation){  //标准浏览器
            e.stopPropagation();
      }else{
            e.cancelBubble = true;  //IE
      }
}
阻止默认行为
//js
         var a = document.getElementsByTagName('a')[0];
         a.onclick = function(){
            if(!confirm("确定去百度吗?")){
                prevent();
            }
         }
         function prevent(ev){
            var e = ev||event
            if(e.preventDefault){
                e.preventDefault()  //阻止默认行为  标准浏览区
            }else{           //IE
                e.returnValue = false;
            }
         }
元素移动封装函数
//js
 function move(obj,target){
       clearInterval(obj.timer);  //保证一个时刻只开启一个定时器
       obj.timer = setInterval(function(){
        //速度是正值向上取整 速度是负值向下取整
       var speed=(target-obj.offsetLeft)/10;
       if(speed>0){
               speed=Math.ceil(speed);
        }
        else{
                  speed=Math.floor(speed);
        }
        obj.style.left=(obj.offsetLeft+speed)+"px";
        if(obj.offsetLeft==target){ //到达目标点就停止
                  clearInterval(obj.timer);
        }
        },30);
 }
//js
            function move(obj,attrObj){
            clearInterval(obj.timer);  //清除定时
            obj.timer = setInterval(function(){
                flag = true
                for(var x in attrObj){
                    var icur = parseInt(getStyle(obj,x));   //获取对象当前位置
                    if(attrObj[x] != icur){
                        flag = false;
                    }
                    var speed = (attrObj[x]-icur)/10;
                    speed = speed>0?Math.ceil(speed):Math.floor(speed);  //速度取整
                    obj.style[x] = icur + speed + "px";
                }
                if(flag){
                    clearInterval(obj.timer);  //到达终点目标 清除定时器  不然定时器一直在计时  提升性能
                }
            },30);
         }
获取内容的宽度的函数封装
//js
         function getStyle(obj,attr){
            if(obj.currentStyle){   //IE
                return obj.currentStyle[attr]
            }else{  //标准浏览器
                return getComputedStyle(obj,null)[attr]
            }
         }
上一篇下一篇

猜你喜欢

热点阅读