常用工具类函数

// 获取地址栏参数
function getQueryString(name) {
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
var r = window.location.search.substr(1).match(reg);
if (r != null) {
return unescape(r[2]);
}
return null;
}
// 判断浏览器内核,手机类型
function checkVersion(){
var u = navigator.userAgent, app = navigator.appVersion;
return {
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, //android终端
iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
weixin: u.indexOf('MicroMessenger') > -1, //是否微信
qq: u.match(/\sQQ/i) == " qq", //是否QQ
app: u.indexOf('erbanApp') > -1 //是否在app内
};
}

// 图片预加载
function preloadImage(obj){
var loadLength = 0,newImages = [];
for(var i = 0;i < obj.imageArr.length;i++){
newImages[i] = new Image();
newImages[i].src = obj.imageArr[i];
newImages[i].onload = newImages[i].onerror = function(){
loadLength++;
typeof obj.preloadPreFunc === 'function' && obj.preloadPreFunc(loadLength);
if(loadLength == obj.imageArr.length){
typeof obj.doneFunc === 'function' && obj.doneFunc();
}
}
}
}

// 判断是否在App内
function isApp() {
var androidBol = false;
var osBol = false;
if(window.androidJsObj && typeof window.androidJsObj === 'object'){
androidBol = true;
}
if(window.webkit){
osBol = true;
}
return (androidBol || osBol);
}
//获得某个元素距离目标元素的左边和上面的距离
function offset(dom,parentDom) {
var offsetL = 0,
offsetT = 0,
parentDom=parentDom||window.document.body,
obj = {};

while (dom != parentDom && dom != null) {
offsetL += dom.offsetLeft
offsetT += dom.offsetTop
dom = dom.offsetParent
}
obj.top = offsetT;
obj.left = offsetL;
return obj
}

//获得哈希值
function getHash() {
var url = location.hash; //获取url中"#"符后的字串 
var theHash = {};
var str = url.substr(1);
if(str.length<1)return {};
var strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theHash[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
}
return theHash;
}
//删除哈希值
function delHash(k) {
var hash = getHash()||{};
var str = '';
if(hash[k]){
delete hash[k];
}
for (var key in hash) {
str += key + '=' + hash[key] + '&';
}
location.hash = str.substr(0, str.length - 1);
}

//添加哈希值
function addHash(key, value) {
var hash = getHash()||{};
var str = '';
hash[key] = value;
for (var key in hash) {
str += key + '=' + hash[key] + '&';
}
location.hash = str.substr(0, str.length - 1);
}

//动态加载js
function loadScript(src, callback) {
var script = document.createElement("script")
script.type = "text/javascript";
if (script.readyState) { //IE 
script.onreadystatechange = function() {
if (script.readyState == "loaded" ||
script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else { //Others: Firefox, Safari, Chrome, and Opera 
script.onload = function() {
callback();
};
}
script.src = src;
document.body.appendChild(script);
}
//拷贝数据,仅限数组和对象
function copy(obj) {
return JSON.parse(JSON.stringify(obj));
}

//浏览器隐藏显示tab的回调
function handleVisibilityChange(visibleCallback, hiddenCallback) {
var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") {
hidden = "hidden";
visibilityChange = "visibilitychange";
} else if (typeof document.msHidden !== "undefined") {
hidden = "msHidden";
visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
}

if (typeof document[hidden] === "undefined") {
console.log("This browser not support visibilityChange");
} else {
//document.addEventListener(visibilityChange, handleVisibilityChange, false); 
addEvent(document, visibilityChange, function() {
if (document[hidden]) {
hiddenCallback();
} else {
visibleCallback();
}
})
}
}

//添加事件监听兼容性写法
function addEvent() {
if (document.addEventListener) {
return function(el, type, fn) {
el.addEventListener(type, fn, false);
};
} else {
return function(el, type, fn) {
el.attachEvent('on' + type,
function() {
return fn.call(el, window.event);
});
};
}
};
function setCookie(name,value){
document.cookie = name + "="+ escape (value);
}

function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}

function base64_encode(input) {
var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
}
return output;
};

function utf8_encode(string) {
string = string.replace(/\r\n/g,"\n");
let utftext = "";
for (let n = 0; n < string.length; n++) {
let c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}

}
return utftext;
}
function base64_decode (input) { // 解码,配合decodeURIComponent使用
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = base64EncodeChars.indexOf(input.charAt(i++));
enc2 = base64EncodeChars.indexOf(input.charAt(i++));
enc3 = base64EncodeChars.indexOf(input.charAt(i++));
enc4 = base64EncodeChars.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
return utf8_decode(output);
}

function isObj(obj){
return Object.prototype.toString.call(obj) == '[object Object]';
}

function isFun(fun){
return Object.prototype.toString.call(fun) == '[object Function]';
}

function isArr(arr){
return Object.prototype.toString.call(arr) == '[object Array]';
}

function isNum(arr){
return Object.prototype.toString.call(arr) == '[object Number]';
}

//是否是json字符串
function isJSONStr(str) {
if (typeof str == 'string') {
try {
var obj = JSON.parse(str);
if (typeof obj == 'object') {
return true;
} else {
return false;
}

} catch (e) {
return false;
}
} else {
return false;
}
}
export {
offset,
isApp,
preloadImage,
checkVersion,
getQueryString,
getHash,
delHash,
addHash,
loadScript,
copy,
handleVisibilityChange,
addEvent,
base64_encode,
utf8_encode,
base64_decode,
isObj,
isFun,
isArr,
isNum,
isJSONStr
}

 

posted @ 2019-02-21 17:25  乐莫乐兮新相知  阅读(235)  评论(0编辑  收藏  举报