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
})()
})()
class方法封装工具库
最新推荐文章于 2023-05-02 15:02:51 发布