zoukankan      html  css  js  c++  java
  • 积累js里有用的函数库

    一.兼容地获取非行间样式(兼容火狐,ie,chrome)

    function getStyle(obj,name)
    {
        if(obj.currentStyle){
            return obj.currentStyle[name];
        }else{
            return getComputedStyle(obj,false)[name];    
        }
    }
    
    //调用
    window.onload=function ()
    {
        var oDiv=document.getElementById('div1');
        alert(getStyle(oDiv,'width'));
        
    };

     说明:只能获取单一样式,不能获取复合样式。

    单一样式:width、height、position

    复合样式:background、border。例如,如果想取背景颜色,可以用backgroundColor

    二.封装getByClass

    function getByClass(oParent,sClass){
        var aEle=oParent.getElementsByTagName('*');
        var aResult=[];
        
        for(var i=0;i<aEle.length;i++){
            if(aEle[i].className==sClass){
                aResult.push(aEle[i]);    
            }    
        }
        return aResult;
    }

    三.比较完美的运动框架

    1.支持多物体,对任意属性值,链式运动,以及多个值同时运动的情况,满足80%的运动情况。

     调用:startMove(obj,json,fnEnd)。第一个参数是运动的物体。中间一个参数是传一个包含希望运动的属性的json,例如想要同时变高和宽和透明度,可以var json={'height':300,'width':300,'opacity':100};,最后一个参数是传一个函数,即执行完该运动后,想要接着执行的运动。

    2.代码:

    // JavaScript Document
    window.onload=function (){
        var oDiv1=document.getElementById('div1');
        
        oDiv1.onmouseover=function (){
            
            startMove(this,'opacity',100);
        };
            oDiv1.onmouseout=function (){
            
            startMove(this,'opacity',30);
        };
        
    };
    
    function getStyle(obj,name){
            if(obj.currentStyle){
                return obj.currentStyle[name];    
            }else{
                return getComputedStyle(obj,false)[name];    
            }
    }
    
    //例如startMove(oDiv,{400,height:400})
    function startMove(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(100*parseFloat(getStyle(obj,attr)));
                }else{
                    cur=parseInt(getStyle(obj,attr));    
                }
                var speed=(json[attr]-cur)/6;
                speed=speed>0?Math.ceil(speed):Math.floor(speed);
                
                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);
    }
    move.js

    四.获取鼠标在页面的绝对位置,消除滚动条的影响

    1.如图所示:当存在滚动条时,不能用oDiv.style.top=oEvent.clientY+'px',因为clientY是可视区的坐标,运用clientY+scrollTop即可得到鼠标的绝对坐标,将其封装为函数。

    2.代码如下:

    function getPos(ev){
        var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
        var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
        
        return {x:ev.clientX+scrollLeft,y:ev.clientY+scrollTop};
    }
    函数
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <style>
    #div1 {200px;height:200px;background:red;position:absolute;}
    </style>
    <script>
    function getPos(ev){
        var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
        var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
        
        return {x:ev.clientX+scrollLeft,y:ev.clientY+scrollTop};
    }
    
    document.onmousemove=function (){
        var oEvent=event||ev;
        var oDiv=document.getElementById('div1');
        
        var pos=getPos(oEvent);
        
        oDiv.style.left=pos.x+'px';
        oDiv.style.top=pos.y+'px';
    };
    </script>
    </head>
    
    <body style="height:2000px;">
    <div id="div1"></div>
    </body>
    </html>
    完整例子

    3.存在的问题:移动鼠标时还是会有卡顿。

    五.兼容性的绑定事件

    1.attachEvent(事件名,函数)适合于ie10及以下版本,addEventListener(事件名,函数,捕获)适合于谷歌,火狐和ie9及以上版本。

      还有一个区别在于事件名,前者是完整的事件名,如'onclick',后者是不带on的事件名,如‘click’

    2.代码:

    function myAddEvent(obj,ev,fn){
        if(obj.attachEvent){
            obj.attachEvent('on'+ev,fn);
        }else{
            obj.addEventListener(ev,fn,false);    
        }    
    }
    View Code

    说明:依次传入obj,不带on的事件名和函数即可。

    六.Ajax的库函数

    1.主要有4步:创建Ajax对象,连接到服务器,发送请求,接收返回值

    2.代码:

    function ajax(url, fnSucc, fnFailed)
    {
        //1.创建Ajax对象
        if(window.XMLHttpRequest)
        {
            var oAjax=new XMLHttpRequest();
        }
        else
        {
            var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
        }
        
        //2.连接服务器(打开和服务器的连接)
        oAjax.open('GET', url, true);
        
        
        //3.发送
        oAjax.send();
        
        //4.接收
        oAjax.onreadystatechange=function ()
        {
            if(oAjax.readyState==4)
            {
                if(oAjax.status==200)
                {
                    //alert('成功了:'+oAjax.responseText);
                    fnSucc(oAjax.responseText);
                }
                else
                {
                    //只有传入失败,才调用
                    if(fnFailed)
                    {
                        fnFailed();
                    }
                }
            }
        };
    }
    View Code

    调用:

    window.onload=function (){
        var oBtn=document.getElementById('btn1');
        
        oBtn.onclick=function (){
            ajax('a1.txt?t='+new Date().getTime(),function (str){
                alert(str);
            },function (){alert('失败');});
        };
    };
    View Code

    其中第三个参数(失败的参数)可以省略。

    七.封装cookie。

    1.代码:(包括设置cookie(包括过期时间),读取cookie和删除cookie)

    //设置cookie的过期时间
    function setCookie(name,value,iDay){
        var oDate=new Date();
        oDate.setDate(oDate.getDate()+iDay);
        
        document.cookie=name+'='+value+    ';expires='+oDate;
    }
    
    //读取cookie
    function getCookie(name){
        //cookie的格式:username=cx; password=11
        //注意这里的空格
        var arr=document.cookie.split('; ');
        for(var i=0;i<arr.length;i++){
            var arr2=arr[i].split('=');
            if(arr2[0]==name){
                return arr2[1];        
            }
        }
        return '';
    }
    
    //删除cookie
    function removeCookie(name){
        setCookie(name,1,-1);
    }
    View Code

    测试

    //测试读取cookie
    //alert(getCookie('sex'));
    
    //测试设置cookie
    //setCookie('username','cx',12);
    //setCookie('password','11',1);
    
    //测试删除cookie
    removeCookie('username');
    alert(document.cookie);
    View Code

    依次打开火狐浏览器->右键查看页面信息->安全->查看cookie,可以看到下图,即设置cookie成功。

  • 相关阅读:
    D. Constructing the Array
    B. Navigation System
    B. Dreamoon Likes Sequences
    A. Linova and Kingdom
    G. Special Permutation
    B. Xenia and Colorful Gems
    Firetrucks Are Red
    java getInstance()的使用
    java 静态代理和动态代理
    java 类加载机制和反射机制
  • 原文地址:https://www.cnblogs.com/sunnyCx/p/8434727.html
Copyright © 2011-2022 走看看