zoukankan      html  css  js  c++  java
  • 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={
        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
  • 相关阅读:
    IOS中延迟执行的几种方法
    Xcode6中如何去掉默认的Main.storyboard
    IOS7.0 UILabel实现自适应高度的新方法
    UITabBarController常见代理方法的使用
    Infopath 2010 接收SQL Server数据
    olsr学习之一:Ubuntu10.04下ns2-allinone-2.34安装方法
    常用工具遇到的错误以及解决方法
    笔记本电脑选购个人的一些浅见
    嵌入式题目集锦
    关于网络传输字节顺序的问题: hton? or ntoh?
  • 原文地址:https://www.cnblogs.com/ShawnYang/p/8871932.html
Copyright © 2011-2022 走看看