前端工具函数

// 判断是否是PC
export function IsPC() {
  const userAgentInfo = navigator.userAgent;
  const agentList = new Array('Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod');
  let flag = true;
  for (let i = 0; i < agentList.length; i++) {
    if (userAgentInfo.indexOf(agentList[i]) > 0) {
      flag = false;
      break;
    }
  }
  return flag;
}

//设置meta属性,实现适配
export function setMeta(isDefault) {
  const _meta = document.querySelector("meta[name='viewport']");
  if (isDefault) {
    _meta.setAttribute('content', 'width=device-width, initial-scale=1.0');
  } else {
    const _vwidth = window.screen.width;
    const _scale = _vwidth / 1080;
    _meta.setAttribute('content', 'width=device-width,user-scalable=no,initial-scale=' + _scale);
  }
}

//拷贝
export function copy(text: string): Promise<void> {
  if (navigator.clipboard.writeText) {
    try {
      return navigator.clipboard.writeText(text);
    } catch (err) {
      // fall through...
    }
  }
  legacyCopy(text);
}

function legacyCopy(text: string): void {
  const input = document.createElement('input');
  document.body.appendChild(input);
  try {
    input.value = text;
    input.focus();
    if (input.setSelectionRange) {
      input.setSelectionRange(0, input.value.length);
    } else {
      input.select();
    }
    const result = document.execCommand('copy');
    if (!result) {
      throw new Error('unsupported');
    }
  } finally {
    document.body.removeChild(input);
  }
}

//判断两个数组是否相等
export function arrayEqual(arr1,arr2){
  if(arr1 === arr2) return true;
  if(arr1.length !== arr2.length) return false;
  for(let i = 0; i < arr1.length; i++){
    if(arr1[i] !== arr2[i]) return false
  }
  return true;
}

//获取Cookie
export function getCookie(name) {
	var arr = document.cookie.replace(/\s/g, "").split(';');
	for (var i = 0; i < arr.length; i++) {
		var tempArr = arr[i].split('=');
		if (tempArr[0] == name) {
			return decodeURIComponent(tempArr[1]);
		}
	}
	return '';
}

// 设置cookie
export function setCookie(name, value, days) {
    var date = new Date();
    date.setDate(date.getDate() + days);
    document.cookie = name + '=' + value + ';expires=' + date;
}

// 删除cookie
export function removeCookie(name) {
    // 设置已过期,系统会立刻删除cookie
    setCookie(name, '1', -1);
}

// url参数转对象
export function parseQueryString(url) {
    url = !url ? window.location.href : url;
    if(url.indexOf('?') === -1) {
        return {};
    }
    var search = url[0] === '?' ? url.substr(1) : url.substring(url.lastIndexOf('?') + 1);
    if (search === '') {
        return {};
    }
    search = search.split('&');
    var query = {};
    for (var i = 0; i < search.length; i++) {
        var pair = search[i].split('=');
        query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');
    }
    return query;
}

// 对象序列化
export function stringfyQueryString(obj) {
    if (!obj) return '';
    var pairs = [];

    for (var key in obj) {
        var value = obj[key];

        if (value instanceof Array) {
            for (var i = 0; i < value.length; ++i) {
                pairs.push(encodeURIComponent(key + '[' + i + ']') + '=' + encodeURIComponent(value[i]));
            }
            continue;
        }

        pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
    }

    return pairs.join('&');
}

// 判断是否为16进制颜色,rgb 或 rgba
function isColor(str) {
	return /^(#([0-9a-fA-F]{3}){1,2}|[rR][gG][Bb](\((\s*(2[0-4]\d|25[0-5]|[01]?\d{1,2})\s*,){2}\s*(2[0-4]\d|25[0-5]|[01]?\d{1,2})\s*\)|[Aa]\((\s*(2[0-4]\d|25[0-5]|[01]?\d{1,2})\s*,){3}\s*([01]|0\.\d+)\s*\)))$/.test(str);
}

//判断是否为邮箱地址
function isEmail(str) {
    return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(str);
}

//判断是否为身份证号
function isIdCard(str) {
    return /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/.test(str)
}

//判断是否为手机号
function isPhoneNum(str) {
    return /^(\+?0?86\-?)?1[3456789]\d{9}$/.test(str)
}

//判断是否为URL地址
function isUrl(str) {
    return /[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/i.test(str);
}

// 判断`obj`是否为空
function isEmptyObject(obj) {
    if (!obj || typeof obj !== 'object' || Array.isArray(obj))
        return false
    return !Object.keys(obj).length
}
//深拷贝,支持常见类型

function deepClone(values) {
    var copy;

    // Handle the 3 simple types, and null or undefined
    if (null == values || "object" != typeof values) return values;

    // Handle Date
    if (values instanceof Date) {
        copy = new Date();
        copy.setTime(values.getTime());
        return copy;
    }

    // Handle Array
    if (values instanceof Array) {
        copy = [];
        for (var i = 0, len = values.length; i < len; i++) {
            copy[i] = deepClone(values[i]);
        }
        return copy;
    }

    // Handle Object
    if (values instanceof Object) {
        copy = {};
        for (var attr in values) {
            if (values.hasOwnProperty(attr)) copy[attr] = deepClone(values[attr]);
        }
        return copy;
    }

    throw new Error("Unable to copy values! Its type isn't supported.");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值