前端常用工具函数

前端常用工具函数

  • 时间格式化
timestampToTime(timestamp) {
    var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
    var Y = date.getFullYear();
    var M = (date.getMonth() + 1 < 10 ? '0' + (date`在这里插入代码片`.getMonth() + 1) : date.getMonth() + 1);
    var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
    var H = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
    var MM = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
    return Y + '年' + M + '月' + D + '日' + H + ':' + MM;
  }
  • 获取链接参数
getUrlParam(name) {
    const search = window.location.search;
    const matched = search
      .slice(1)
      .match(new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'));
    return search.length ? matched && matched[2] : null;
  }
  • 是否ios手机
isIos() {
    var u = navigator.userAgent;
    if (u.indexOf("iPhone") > -1 || u.indexOf("iOS") > -1) {
      return true;
    }
    return false;
  }
  • 是否微信环境
getIsWxClient() {
    var ua = navigator.userAgent.toLowerCase();
    if (ua.match(/MicroMessenger/i) == "micromessenger") {
      return true;
    } else {
      return false;
    }
  }
  • 是否含有汉字
checkChinese(value) {
    if (/[\u4E00-\u9FA5]/g.test(value)) {
      return true
    } else {
      return false
    }
  }
  • 手机号码基础校验
isPoneAvailable: function (pone) {
    var myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
    if (!myreg.test(pone)) {
      return false;
    } else {
      return true;
    }
  }
  • 身份证号码校验
checkIdCard(idcard) {
    var regIdCard = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    if (!regIdCard.test(idcard)) {
      return false;
    } else {
      return true;
    }
  }
  • 六位数字
isNum6(num) {
    var reg = new RegExp("^[0-9]{6}$");
    if (!reg.test(num)) {
      return false;
    } else {
      return true;
    }
  }
  • 防抖 就是让某个时间段只执行一次
debounce(fn, delay = 200) {
    let timeout;
    return function () {
      // 重新计时
      timeout && clearTimeout(timeout);
      timeout = setTimeout(fn.bind(this), delay, ...arguments);
    }
  }
  • 节流 类似控制阀门一样定期开放的函数,也就是让函数执行一次后,在某个时间段内暂时失效,过了这段时间后再重新激活(类似于技能冷却时间)
throttle(fn, delay) {
    let valid = true
    return function () {
      if (!valid) {
        //休息时间 暂不接客
        return false
      }
      // 工作时间,执行函数并且在间隔期内把状态位设为无效
      valid = false
      setTimeout(() => {
        fn()
        valid = true;
      }, delay)
    }
  }
  • 浅拷贝
shallowClone(obj) {
    if (typeof obj !== 'object') {
      return;
    }
    // 根据obj的类型判断是新建一个数组还是对象
    var newObj = obj instanceof Array ? [] : {};
    for (let key in obj) {
      // 这一步做一个判定防止拷贝了原型链上的东西
      if (obj.hasOwnProperty(key)) {
        newObj[key] = obj[key];
      }
    }
    return newObj;
  }

深拷贝

deepClone = function (obj) {
    if (typeof obj !== 'object') {
      return;
    }
    var newObj = obj instanceof Array ? [] : {};
    for (var key in obj) {
      if (obj.hasOwnProperty(key)) {
        newObj[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key];
      }
    }
    return newObj;
  }
  • 去重1 […new Set(arr)]
unique(arr) {
    let arrLength = arr.length;
    let new_arr = [];
    for (var i = 0; i < arrLength; i++) {
      for (var j = 0; j < new_arr.length; j++) {
        if (new_arr[j] === arr[i]) {
          break;
        }
      }
      // 这里就表示循环对比完,没有相同的
      if (j == new_arr.length) {
        new_arr.push(arr[i])
      }
    }
    return new_arr
  }
  • 冒泡排序
mySort(arr) {
    let len = arr.length
    for (let i = 0; i < len; i++) {
      for (let j = 0; j < len - 1; j++) {
        if (arr[j] > arr[j + 1]) {
          let temp;
          temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp;
        }
      }
    }
  }

产生随机数

/**
 * 产生随机整数,包含下限值,包括上限值
 * @param {Number} lower 下限
 * @param {Number} upper 上限
 * @return {Number} 返回在下限到上限之间的一个随机整数
 */
function random(lower, upper) {
    return Math.floor(Math.random() * (upper - lower+1)) + lower;
}  
 
//console.log(random(1,100));

/**
 * 产生随机整数,包含下限值,但不包括上限值
 * @param {Number} lower 下限
 * @param {Number} upper 上限
 * @return {Number} 返回在下限到上限之间的一个随机整数
 */
function random(lower, upper) {
    return Math.floor(Math.random() * (upper - lower)) + lower;
}
 
//调用:console.log(random(1,100));

生成随机颜色

/**
 * 产生一个随机的rgb颜色
 * @return {String}  返回颜色rgb值字符串内容,如:rgb(201, 57, 96)
 */
function randomColor() {
    // 随机生成 rgb 值,每个颜色值在 0 - 255 之间
    var r = random(0, 256),
        g = random(0, 256),
        b = random(0, 256);
    // 连接字符串的结果
    var result = "rgb("+ r +","+ g +","+ b +")";
    // 返回结果
    return result;
}

获取url中的参数函数

function filterUrl() {
  var url = location.search; //获取url中"?"符后的字串
  var theRequest = new Object();
  if (url.indexOf("?") != -1) {
    var str = url.substr(1);
    strs = str.split("&");
    for (var i = 0; i < strs.length; i++) {
      theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
    }
  }
  return theRequest;
}

获取当前url中指定的hash值

//获取当前hash参数
function getHashParam(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
    var r = location.hash.substr(1).match(reg); //匹配目标参数
    if (r != null) {
        var ret = r[2];
        try {
            ret = decodeURIComponent(ret);
        } catch (e) {
            ret = unescape(ret);
        }
        return ret;
    }
    return null; //返回参数值
}

是否支持css动画

//是否支持css动画
function checkCssAnimation() {
    var styles = document.createElement('div').style;
    var animations = ['animation', 'webkitAnimation', "msAnimation", 'MozAnimation', '-moz-animation', '-webkit-animation'];
    for (var i = 0, len = animations.length; i < len; i++) {
        if (animations[i] in styles) {
            return true;
        }
    }
    return false;
}

终端验证mobile或者pc

//终端验证
function getPlatform() {
    var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
    var flag = "pc";
    for (var v = 0, len = Agents.length; v < len; v++) {
        if (navigator.userAgent.indexOf(Agents[v]) > 0) {
            flag = "mobile";
            break;
        }
    }
    return flag;
}

是否小程序环境

//是否小程序 
function isMiniprogram() {
	 if (/(micromessenger)\/([\w\.]+)/i.test(navigator.userAgent) && /miniprogram/i.test(navigator.userAgent)) {
	   return true;
	 }
	 return false;
}

倒计时天、时、分、秒

function countDown(diff) {
  let day,
    hour,
    minute,
    second;
  // 距离的天数
  day = parseInt(diff / 1000 / 60 / 60 / 24);
  // 小时
  hour = parseInt(diff / 1000 / 60 / 60 % 24);
  // 分钟
  minute = parseInt(diff / 1000 / 60 % 60)
  // 秒
  second = parseInt(diff / 1000 % 60)
  if (day < 10) {
    day = '0' + day
  }
  if (hour < 10) {
    hour = '0' + hour
  }
  if (minute < 10) {
    minute = '0' + minute
  }
  if (second < 10) {
    second = '0' + second
  }
  if (diff < 0) {
    day = '00';
    hour = '00';
    minute = '00';
    second = '00';
  }
  return {
    day,
    hour,
    minute: minute + "",
    second: second + ""
  }
}

生成随机手机号

function getMoble() {
  let prefixArray = new Array("130", "131", "132", "133", "135", "137", "138", "170", "187", "189");
  let i = parseInt(10 * Math.random());
  let prefix = prefixArray[i];
  for (let j = 0; j < 8; j++) {
    prefix = prefix + Math.floor(Math.random() * 10);
  }
  prefix = prefix.substr(0, 3) + '*****' + prefix.substr(8)
  return prefix;
  
}

h5复制文本到剪切板

function copyContent(content) {
  let copyDom = document.createElement('div');
  copyDom.innerText=content;
  document.body.appendChild(copyDom);
  //创建选中范围
  let range = document.createRange();
  range.selectNode(copyDom);
  //移除剪切板中内容
  window.getSelection().removeAllRanges();
  //添加新的内容到剪切板
  window.getSelection().addRange(range);
  //复制
  let successful = document.execCommand('copy');
  copyDom.parentNode.removeChild(copyDom);
  try{
      let msg = successful ? content : false;
      if(msg) {
        console.log('Copy command was : ----->>>>' + msg);
      }
  } catch(err){
      console.log('Oops , unable to copy!');
  }
}

阿拉伯数字转换为简写汉字

Arabia_To_SimplifiedChinese(Num) {
        for (var i = Num.length - 1; i >= 0; i--) {
            Num = Num.replace(",", "")//替换Num中的“,”
            Num = Num.replace(" ", "")//替换Num中的空格
        }
        if (isNaN(Num)) { //验证输入的字符是否为数字
            //alert("请检查小写金额是否正确");
            return;
        }
        //字符处理完毕后开始转换,采用前后两部分分别转换
        var part = String(Num).split(".");
        var newchar = "";
        //小数点前进行转化
        for (var i = part[0].length - 1; i >= 0; i--) {
            if (part[0].length > 10) {
                //alert("位数过大,无法计算");
                return "";
            }//若数量超过拾亿单位,提示
            var tmpnewchar = ""
            var perchar = part[0].charAt(i);
            switch (perchar) {
                case "0": tmpnewchar = "零" + tmpnewchar; break;
                case "1": tmpnewchar = "一" + tmpnewchar; break;
                case "2": tmpnewchar = "二" + tmpnewchar; break;
                case "3": tmpnewchar = "三" + tmpnewchar; break;
                case "4": tmpnewchar = "四" + tmpnewchar; break;
                case "5": tmpnewchar = "五" + tmpnewchar; break;
                case "6": tmpnewchar = "六" + tmpnewchar; break;
                case "7": tmpnewchar = "七" + tmpnewchar; break;
                case "8": tmpnewchar = "八" + tmpnewchar; break;
                case "9": tmpnewchar = "九" + tmpnewchar; break;
            }
            switch (part[0].length - i - 1) {
                case 0: tmpnewchar = tmpnewchar; break;
                case 1: if (perchar != 0) tmpnewchar = tmpnewchar + "十"; break;
                case 2: if (perchar != 0) tmpnewchar = tmpnewchar + "百"; break;
                case 3: if (perchar != 0) tmpnewchar = tmpnewchar + "千"; break;
                case 4: tmpnewchar = tmpnewchar + "万"; break;
                case 5: if (perchar != 0) tmpnewchar = tmpnewchar + "十"; break;
                case 6: if (perchar != 0) tmpnewchar = tmpnewchar + "百"; break;
                case 7: if (perchar != 0) tmpnewchar = tmpnewchar + "千"; break;
                case 8: tmpnewchar = tmpnewchar + "亿"; break;
                case 9: tmpnewchar = tmpnewchar + "十"; break;
            }
            newchar = tmpnewchar + newchar;
        }
        //替换所有无用汉字,直到没有此类无用的数字为止
        while (newchar.search("零零") != -1 || newchar.search("零亿") != -1 || newchar.search("亿万") != -1 || newchar.search("零万") != -1) {
            newchar = newchar.replace("零亿", "亿");
            newchar = newchar.replace("亿万", "亿");
            newchar = newchar.replace("零万", "万");
            newchar = newchar.replace("零零", "零");
        }
        //替换以“一十”开头的,为“十”
        if (newchar.indexOf("一十") == 0) {
            newchar = newchar.substr(1);
        }
        //替换以“零”结尾的,为“”
        if (newchar.lastIndexOf("零") == newchar.length - 1) {
            newchar = newchar.substr(0, newchar.length - 1);
        }
        return newchar;
    }

保留两位小数通过截取字符串的形式,不是四舍五入

KeepTwoDecimals(obj) {
    var regDecimal = /^\d+(.\d+)?$/;
    if (regDecimal.test(obj)) {
        if (obj.toString().indexOf(".") > 0) {
            obj = obj.toString() + "00";
            obj = obj.substring(0, obj.indexOf(".") + 3);
        } else {
            obj = obj;
            // obj = obj + ".00";
        }
    }
    return Number(obj < 0 ? "0" : obj);
}

手机号码基础校验

// 手机号码基础校验
isPoneAvailable: function (pone) {
  var myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
  if (!myreg.test(pone)) {
      return false;
  } else {
      return true;
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值