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成功。

  • 相关阅读:
    01-SCOTT-SQL建表语句
    面试小题
    Swagger2使用API
    Elasticsearch单机安装_集群搭建_索引基本操作_Head插件安装与基本操作_ik分词器配置_logstash实现数据同步_教程
    45个非常有用的 Oracle 查询语句小结
    oracle获取定时时间段
    彻底理解webservice SOAP WSDL
    MySQL 1045登录失败
    quartz定时任务时间设置
    map 遍历的四种方式
  • 原文地址:https://www.cnblogs.com/sunnyCx/p/8434727.html
Copyright © 2011-2022 走看看