javascript通用代码合集

1.逐一绑定操作到window.onload上

//func:新函数
function addLoadEvent(func){
    //把现有的window.onload事件处理函数的值存入变量oldonload
    var oldload = window.onload;
    //如果在这个处理函数上还没有绑定任何函数,就像平时那样把新函数添加给它
    if(typeof oldload !== 'function'){
        window.onload = func;
    } else {
        //如果在这个处理函数上已经绑定了一些函数,就把新函数追加到现有指令的末尾
        window.onload = function(){
            oldload();
            func();
        }
    }
}

2.插入一个元素到另一个元素的后面

  虽然dom没有提供直接的方法,但是提供了这一操作的所有“原材料”

//首先,这个函数有两个参数:一个是将被插入的新元素,另一个是目标元素。
function insertAfter(newElement, targetElement){
    //把目标元素的parentNode属性值保存到变量parent里
    var parent = targetElement.parentNode;
    //检查目标元素是不是parent的最后一个元素
    if(parent.lastChild === targetElement){
        //如果是,则追加
        parent.appendChild(newElement);
    } else {
        //如果不是,则把新元素插入到目标元素和目标元素的下一个兄弟元素之间。
        parent.insertBefore(newElement,targetElement.nextSibling);
    }
}

 3.获取一个元素的下一个元素(不是节点,节点包括:文本节点,属性节点,元素节点)

//把当前元素的nextSibling节点作为参数传递给getNextElement函数
function getNextElement(node){
    if(node.nodeType === 1){
        return node;
    }
    if(node.nextSibling){
        return getNextElement(node.nextSibling);
    }
    return null;
}

 4.为一个元素添加className

//参数一:需要添加新class的元素
//参数二:新的class设置值
function addClass(element,value){
    //检查className属性的值是否为null
    if(element.className === null){
        //如果是,把新的class设置值直接赋值给className属性
        element.className = value;
    } else {
        //如果不是,把一个空格和新的class设置值追加到className属性上去
        var newClassName = element.className;
        newClassName += " ";
        newClassName += value;
        element.className = newClassName;
    }
}

 5.移动页面元素:前提是元素能够移动,比如postion:absolute,父元素为postion:relative

//移动元素到指定位置
//参数:
//elementID 元素ID
//final_x 目标位置横坐标
//final_y 目标位置纵坐标
//interval 计时器timeout时长
function moveElement(elementID,final_x,final_y,interval){
    if(!document.getElementById) return false;
    if(!document.getElementById(elementID)) return false;
    
    var elem = document.getElementById(elementID);
    //清除掉元素下所有计时器,重新开始,防止多个计时器混乱
    if(elem.movement){
        clearTimeout(elem.movement);
    }
    var xpos,ypos;
    //如果属性值为null,设置为0
    if(!elem.style.left){
        elem.style.left = "0px";
    }
    if(!elem.style.top){
        elem.style.top = "0px";
    }
    xpos = parseInt(elem.style.left);
    ypos = parseInt(elem.style.top);
    if(xpos == final_x && ypos == final_y){
        return true;
    }
    /*if(xpos < final_x){
        xpos ++;
    }*/
    var dist;
    if(xpos < final_x){
        //实现由快到慢的动画效果
        dist = Math.ceil((final_x - xpos)/10);
        xpos += dist;
    }
    /*if(xpos > final_x){
        xpos --;
    }*/
    if(xpos > final_x){
        dist = Math.ceil((xpos - final_x)/10);
        xpos -= dist;
    }
    /*if(ypos < final_y){
        ypos ++;
    }*/
    if(ypos < final_y){
        dist = Math.ceil((final_y - ypos)/10);
        ypos += dist;
    }
    /*if(ypos > final_y){
        ypos --;
    }*/
    if(ypos > final_y){
        dist = Math.ceil((ypos - final_y)/10);
        ypos -= dist;
    }
    elem.style.left = xpos + "px";
    elem.style.top = ypos + "px";
    var repeat = "moveElement('" + elementID + "'," + final_x + "," + final_y + "," + interval + ")";
    elem.movement = setTimeout(repeat,interval);
}

 6.创建XMLHttpRequest对象

function getHTTPObject(){
    //检测浏览器是否存在XMLHttpRequest对象
    if(typeof window.XMLHttpRequest === "undefined"){
        XMLHttpRequest = function(){
            try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");} catch(e){}
            try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");} catch(e){}
            try{return new ActiveXObject("Msxml2.XMLHTTP");} catch(e){}
            return false;
        }
    }
    return new XMLHttpRequest();
}

 7.获取一个元素的样式

function getStyle(obj,target){
    if(obj.currentStyle){
        return obj.currentStyle[target];
    } else {
        return getComputedStyle(obj,null)[target];
    }
}

 8.基于html4+css2的完美运动框架

//获取元素样式
function getStyle(obj,target){
    if(obj.currentStyle){
        return obj.currentStyle[target];
    } else {
        return getComputedStyle(obj,null)[target];
    }
}

/**
obj:要操作的对象
json:格式如下
var json={
    width:300,
    height:300
}
fnEnd:回调函数
*/
function startMove(obj,json,fnEnd){
    if(obj.timer){clearInterval(obj.timer);}
    
    obj.timer = setInterval(function(){
        var bStop = true;            //假设:所有的操作都执行完毕(测试所有属性都设置好的解决方案有很多,这里取其中一种比较巧的方式)
        for(var v in json){
            var attr = v;
            var iTarget = json[v];
            bStop = oper(obj,attr,iTarget,bStop);//执行缓冲运动
        }
        if(bStop){
            clearInterval(obj.timer);
            if(fnEnd){fnEnd();}
        }
    },30);
}

function oper(obj,attr,iTarget,bStop){
    var cur = 0;
    if(attr === 'opacity'){
        cur = Math.round(parseFloat(getStyle(obj,'opacity'))*100);
    } else {
        cur = parseInt(getStyle(obj,attr));
    }
    var speed = (iTarget-cur)/10;
    speed = speed>0?Math.ceil(speed):Math.floor(speed);
    
    if(cur !== iTarget){
        bStop = false;            //没达到目标设置为否
        if(attr === 'opacity'){
            obj.style.opacity = parseFloat((cur + speed)/100);
            obj.style.filter = 'alpha(opacity:'+(cur + speed)+')';
        } else {
            obj.style[attr] = cur + speed + 'px';
        }
    }
    
    return bStop;
}

 9 获取鼠标位置

function getPos(ev){
    var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;
    var scrollLeft = document.documentElement.scrollLeft||document.body.scrollLeft;
    return {x:scrollLeft+ev.clientX,y:scrollTop+ev.clientY};
}

 10 添加绑定事件

/*不用加on,例如:onclick写成click即可*/
function myAddEvent(obj,ev,fn){
    if(obj.attachEvent){
        obj.attachEvent('on'+ev,fn);
        return;
    }
    if(obj.addEventListener){
        obj.addEventListener(ev,fn,false);
        return;
    }
}

 11 ajax调用方法

function ajax(url,succFn,failedFn){
    //1.创建XMLHttpRequest对象
    var oAjax = null;
    if(window.ActiveXObject){
        oAjax = new ActiveXObject('MicrosoftHTTP');
    } else {
        oAjax = new XMLHttpRequest();
    }
    
    //2.连接服务器
    oAjax.open('GET',url,true);
    
    //3.发送数据
    oAjax.send();
    
    //4.接收数据
    oAjax.onreadystatechange = function(){
        //解析完毕
        if(oAjax.readyState === 4){
            if(oAjax.status === 200){//状态码为200
                succFn(oAjax.responseText);
            } else {
                if(failedFn){
                    failedFn(oAjax.status);//返回http状态码
                }
            }
        }
    }
}

 11.javascript继承示例

function Drag(id){
    var _this = this;
    this.id = id;
    this.disX = null;
    this.disY = null;
    this.oDiv = document.getElementById(id);    
    this.oDiv.onmousedown = function(ev){
        _this.fnDown(ev);
        
        return false;//阻止浏览器默认事件
    };
};

Drag.prototype.fnDown = function(ev){
    var oEvent = ev||event;
    var _this = this;
    this.disX=oEvent.clientX-this.oDiv.offsetLeft;
    this.disY=oEvent.clientY-this.oDiv.offsetTop;
    document.onmousemove = function(ev){
        _this.fnMove(ev);
    };
    document.onmouseup = function(){
        _this.fnUp();
    };
}

Drag.prototype.fnMove = function(ev){
    var oEvent = ev||event;
    this.oDiv.style.left = oEvent.clientX-this.disX + 'px';
    this.oDiv.style.top = oEvent.clientY-this.disY + 'px';
}

Drag.prototype.fnUp = function(){
    document.onmousemove = null;
    document.onmouseout = null;
}

function LimitDrag(id){
    Drag.call(this,id);//继承属性
}

//继承方法
for(var v in Drag.prototype){
    LimitDrag.prototype[v] = Drag.prototype[v];
}

LimitDrag.prototype.fnMove = function(ev){//重写方法
    var oEvent = ev||event;
    var l = oEvent.clientX-this.disX;
    var t = oEvent.clientY-this.disY;
    
    if(l<0){
        l=0;
    } else if(l>document.documentElement.clientWidth-this.oDiv.offsetWidth) {
        l=document.documentElement.clientWidth-this.oDiv.offsetWidth;
    }
    if(t<0){
        t=0;
    } else if(t>document.documentElement.clientHeight-this.oDiv.offsetHeight){
        t=document.documentElement.clientHeight-this.oDiv.offsetHeight;
    }
    
    this.oDiv.style.left = l + 'px';
    this.oDiv.style.top = t + 'px';
    
}
View Code

 

posted @ 2018-04-18 09:16  流年如水烟雨随风  阅读(296)  评论(0编辑  收藏  举报