zoukankan      html  css  js  c++  java
  • javascript常用函数封装——运动、cookie、ajax、获取行内样式兼容写法、拖拽

    运动、cookie、ajax、获取行内样式兼容写法、拖拽封装大合集。

    //url,data,type,timeout,success,error
    function ajax(options){
        //-1  整理options
        options=options||{};
        options.data=options.data||{};
        options.timeout=options.timeout||0;
        options.type=options.type||'get';
        
        //0 整理data
        var arr=[];
        for(var key in options.data){
            arr.push(key+'='+encodeURIComponent(options.data[key]));    
        }
        var str=arr.join('&');
        
        //1    创建ajax对象
        if(window.XMLHttpRequest){
            var oAjax=new XMLHttpRequest();//[object XMLHttpRequest]
        }else{
            var oAjax=new ActiveXObject('Microsoft.XMLHTTP')
        }
        
        if(options.type=='get'){
            //2.
            oAjax.open('get',options.url+'?'+str,true);
            //3.
            oAjax.send();
        }else{
            //2.
            oAjax.open('post',options.url,true);
            //设置请求头
            oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            oAjax.send(str);//身子
        }
        
        //3.5    超时
        if(options.timeout){
            var timer=setTimeout(function(){
                alert('超时了');
                oAjax.abort();//中断ajax请求    
            },options.timeout);
        }
        
        
        //4.
        oAjax.onreadystatechange=function(){//当准备状态改变时
            if(oAjax.readyState==4){//成功失败都会有4
                clearTimeout(timer);
                if(oAjax.status>=200 && oAjax.status<300 || oAjax.status==304){
                    options.success && options.success(oAjax.responseText);
                }else{
                    options.error && options.error(oAjax.status);//http    0
                }
            }
        };
        
        
    };
    
    
     
    function ajax(url,fnWin,fnFaild){
        //1.创建ajax对象
        var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
        //2.与服务器建立连接
        xhr.open("GET",url,true);
        //3.发送请求
        xhr.send();
        //4.接收服务器返回的信息
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4){
                if(xhr.status == 200){
                    fnWin && fnWin(xhr.responseText);
                }
            }else{
                fnFaild && fnFaild();
            }
        }
    }






    //创建cookie
    function createCookie(key,value,expires,domain,secure){
        var cookieText = encodeURIComponent(key) + "=" + encodeURIComponent(value) + ";path=/";
        if(!isNaN(expires)){
            if(typeof expires == "number" && expires > 0){
                var date = new Date();
                date.setDate(date.getDate() + expires);
                cookieText += ";expires=" + date;
            }
        }
        if(domain){
            cookieText += ";domain=" + domain;
        }
        if(secure){
            cookieText += ";secure";
        }
        document.cookie = cookieText;
    }
    
    //获取cookie
    function getCookie(key){
        var keyText = encodeURIComponent(key) + "="
        var start = document.cookie.indexOf(keyText); //找到开始位置
        if(start != -1){
            var end = document.cookie.indexOf(";",start); //找到结束位置
            if(end == -1){
                end = document.cookie.length;
            }
            var cookieValue = decodeURIComponent(document.cookie.substring(start + keyText.length,end));
        }
        return cookieValue;
    }
    
    //删除cookie
    function removeCookie(key){
        document.cookie = key + "=;expires=" + new Date(0) + ";path=/";
    }






    function drag(obj){
        var arr = [];
        obj.onmousedown = function(event){
            arr = []; //清空数组
            var e = event || window.event;
            var disX = e.offsetX;
            var disY = e.offsetY;
            document.onmousemove = function(evt){
                var e = evt || window.event;
                var L = e.clientX - disX;
                var T = e.clientY - disY;
                if(L < 0){
                    L = 0; //左边界
                }else if(L > document.documentElement.clientWidth - obj.offsetWidth){ //右边界
                    L = document.documentElement.clientWidth - obj.offsetWidth;
                }
                if(T < 0){
                    T = 0;  //上边界
                }else if(T > document.documentElement.clientHeight - obj.offsetHeight){ //下边界
                    T = document.documentElement.clientHeight - obj.offsetHeight;
                }
                obj.style.left = L + "px";
                obj.style.top = T + "px";
                arr.push({"left":obj.offsetLeft,"top":obj.offsetTop});
            }
            document.onmouseup = function(){
                document.onmousemove = null;
            }
        }
    }






    function drag(obj){
        obj.onmousedown = function(evt){
            var e = evt || window.event;
            //获取鼠标当前的相对坐标值
            var disX = e.offsetX;
            var disY = e.offsetY;
            document.onmousemove = function(evt){
                var e = evt || window.event;
                obj.style.left = e.clientX - disX + "px";
                obj.style.top = e.clientY - disY + "px";
            }
            document.onmouseup = function(){
                document.onmousemove = null;
            }
        }
        //去掉拖拽的默认行为(禁拖行为);
        document.ondragstart = function(){
            return false;
        }
    }






    /*
     * 一、获取非行内样式
     *     1. 兼容
     *     IE     对象.currentStyle.属性
     *     标准          getComputedStyle(对象,1).属性
     * 二、运动框架
     * 1.计时器
     *         1》设置开关:作用何时退出计时器
     *         2》遍历json
     *             (1)获取对象属性的当前值
     *                 注:兼容
     *                     透明度(处理小数)
     *                     其它属性值(处理单位)
     *             (2)计算速度
     *                 匀速运动(处理停止条件)
     *                 缓冲运动(处理小数)
     *             (3)判断json中所有的属性是否达到目标值
     *             (4)设置运动(改变CSS值)
     *         3》检测停止(当开关为true时,停止计时器)
     */
    //获取非行内样式的兼容
    function getStyle(obj,attr){
        return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,true)[attr];
    }
    function sport(obj,json,fn){
        clearInterval(obj.timer);
        obj.timer = setInterval(function(){
            var stop = true;
            for(var attr in json){
                //获取当前值
                var current = 0;
                if(attr == "opacity"){
                    current = parseInt(parseFloat(getStyle(obj,attr)) * 100);
                }else{
                    current = parseInt(getStyle(obj,attr));
                }
                //计算速度
                //缓冲运动
                var speed = (json[attr] - current) / 8;
                speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
                if(current != json[attr]){
                    stop = false;
                }
                if(attr == "opacity"){
                    obj.style.opacity = (current + speed) / 100;
                    obj.style.filter = "alpha(opacity=" + (current + speed) + ")";
                }else{
                    obj.style[attr] = current + speed + "px";
                }
            }
            if(stop){
                clearInterval(obj.timer);
                fn && fn();
            }
        },30);
    }






     
  • 相关阅读:
    jQuery
    BOM与DOM操作
    剑指offer 面试题10.1:青蛙跳台阶
    剑指offer 面试题10:斐波那契数列
    剑指offer 面试题9.1:用两个队列实现栈
    剑指offer 面试题9.1:用两个队列实现栈
    剑指offer 面试题9:用两个栈实现队列
    剑指offer 面试题8:二叉树的下一个节点
    剑指offer 面试题7:重建二叉树
    剑指offer 树的基本操作:四种遍历方式
  • 原文地址:https://www.cnblogs.com/LLLLily/p/7364138.html
Copyright © 2011-2022 走看看