class方法封装工具库

var tool, Tool
tool = Tool = (function(){
    class Utils{
        noConflict(bool = false){
            if(!bool){
                window.tool = undefined
            }else{
                window.tool = window.Tool = undefined
                return this
            }
        }
        getRandom(a, b = 0){
            return Math.floor(Math.random() * Math.abs(a - b)) + Math.min(a, b)
        }
        getColor(){
            var color = '#'
            for(var i=0;i<3;i++){
                var hex = getRandom(0, 256).toString(16)
                color += hex.length === 1 ? '0' + hex : hex;
            }
            return color
        }
        setStyle(ele, styleObj){
            for(var key in styleObj){
                ele.style[key] = styleObj[key]
            }
        }
        animate(ele, obj, fn){ 
            var k = 0
            for(var key in obj){
                k++
                (function(key){
                    var currentStyle = getComputedStyle(ele)[key]
                    var target = obj[key]
                    if(key === 'opacity'){
                        currentStyle *= 100
                        target *= 100
                    }
                    currentStyle = parseInt(currentStyle)
                    var timerId = setInterval(function(){
                        var speed = (target - currentStyle) / 20
                        currentStyle += speed > 0 ? Math.ceil(speed) : Math.floor(speed)
                        if(key === 'opacity') ele.style[key] = currentStyle / 100
                        else ele.style[key] = currentStyle + 'px'
                        if(currentStyle === target){
                            clearInterval(timerId)
                            if(--k === 0) fn()
                        }
                    }, 20)
                })(key)
            }
        }
        getCookie(key){
            var cookie = document.cookie;
            var arr = cookie.split('; ')
            for(var i=0;i<arr.length;i++){
                var brr = arr[i].split('=')
                if(brr[0] === key){
                    return brr[1]
                }
            }
        }
        setCookie(key, value, seconds){
            var date = new Date()
            date.setTime(date.getTime()+seconds*1000-8*3600*1000)
            document.cookie = key + '='+value+';expires='+date
        }
        removeCookie(key){
            setCookie(key, null, -1)
        }
        ajax(obj){
            if(obj.url === undefined) throw new Error('请求地址不能为空')
            if(Object.prototype.toString.call(obj.url) != '[object String]') throw new Error('请求地址错误')
            if(obj.method === undefined) obj.method = 'get'
            if(obj.method.toLowerCase() != 'get' && obj.method.toLowerCase() != 'post') throw new Error('请求方式只能是get或post')
            if(obj.isAsync === undefined) obj.isAsync = true
            if(Object.prototype.toString.call(obj.isAsync) != '[object Boolean]') throw new Error('isAsync必须是布尔值')
            if(!obj.data) obj.data = null
            if(obj.success === undefined) obj.success = function(){}
            if(Object.prototype.toString.call(obj.success) != '[object Function]') throw new Error('success必须是函数')
            if(obj.error === undefined) obj.error = function(){}
            if(Object.prototype.toString.call(obj.error) != '[object Function]') throw new Error('error必须是函数')
            var data = ''
            if(obj.data != undefined){
                if(Object.prototype.toString.call(obj.data) === '[object String]'){
                    if(!obj.data.includes('=')) throw new Error('data数据是非法的!')
                    data = obj.data
                }else if(Object.prototype.toString.call(obj.data) === '[object Object]'){
                    var arr = []
                    for(var key in obj.data){
                        arr.push(key + '=' + obj.data[key])
                    }
                    data = arr.join('&')
                }else throw new Error('data必须是字符串或对象')
                if(obj.method.toLowerCase() === 'get') obj.url += '?' + data
            }
            if(obj.dataType === undefined) obj.dataType = 'json'
            if(obj.dataType.toLowerCase() != 'json' && obj.dataType.toLowerCase() != 'xml' && obj.dataType.toLowerCase() != 'text') throw new Error('dataType只接受json、text、xml')
            var xhr = new XMLHttpRequest;
            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4){
                    if(xhr.status>=200 && xhr.status<300){
                        var res = '';
                        switch(obj.dataType.toLowerCase()){
                            case 'json':
                                res = xhr.responseText
                                res = JSON.parse(res)
                            break;
                            case 'xml':
                                res = xhr.responseXML
                            break;
                            case 'text':
                                res = xhr.responseText
                            break;
                        }
                        obj.success(res)
                    }else obj.error()
                }
            }
            xhr.open(obj.method, obj.url, obj.isAsync);
            if(obj.method.toLowerCase() === 'post' && data){
                xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
                xhr.send(data)
                return
            }
            xhr.send()
        }
        ajaxPromise(obj){
            return new Promise(function(resolve, reject){
                if(obj.url === undefined) throw new Error('请求地址不能为空')
                if(Object.prototype.toString.call(obj.url) != '[object String]') throw new Error('请求地址错误')
                if(obj.method === undefined) obj.method = 'get'
                if(obj.method.toLowerCase() != 'get' && obj.method.toLowerCase() != 'post') throw new Error('请求方式只能是get或post')
                if(obj.isAsync === undefined) obj.isAsync = true
                if(Object.prototype.toString.call(obj.isAsync) != '[object Boolean]') throw new Error('isAsync必须是布尔值')
                if(!obj.data) obj.data = null
                var data = ''
                if(obj.data != undefined){
                    if(Object.prototype.toString.call(obj.data) === '[object String]'){
                        if(!obj.data.includes('=')) throw new Error('data数据是非法的!')
                        data = obj.data
                    }else if(Object.prototype.toString.call(obj.data) === '[object Object]'){
                        var arr = []
                        for(var key in obj.data){
                            arr.push(key + '=' + obj.data[key])
                        }
                        data = arr.join('&')
                    }else throw new Error('data必须是字符串或对象')
                    if(obj.method.toLowerCase() === 'get') obj.url += '?' + data
                }
                if(obj.dataType === undefined) obj.dataType = 'json'
                if(obj.dataType.toLowerCase() != 'json' && obj.dataType.toLowerCase() != 'xml' && obj.dataType.toLowerCase() != 'text') throw new Error('dataType只接受json、text、xml')
                var xhr = new XMLHttpRequest;
                xhr.onreadystatechange = function(){
                    if(xhr.readyState === 4){
                        if(xhr.status>=200 && xhr.status<300){
                            var res = '';
                            switch(obj.dataType.toLowerCase()){
                                case 'json':
                                    res = xhr.responseText
                                    res = JSON.parse(res)
                                break;
                                case 'xml':
                                    res = xhr.responseXML
                                break;
                                case 'text':
                                    res = xhr.responseText
                                break;
                            }
                            resolve(res)
                        }else reject()
                    }
                }
                xhr.open(obj.method, obj.url, obj.isAsync);
                if(obj.method.toLowerCase() === 'post' && data){
                    xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
                    xhr.send(data)
                    return
                }
                xhr.send()
            })
        }
    }
    var utils = null
    return (function(){
        if(!utils) utils = new Utils()
        return utils
    })()
})()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值