JS功能封装

适配rem

    /*适配rem*/
    //使用方式很简单,比如效果图上,有张图片。宽高都是100px;
    //样式写法就是
    // img{
    //     width:1rem;
    //     height:1rem;
    // }
    //这样的设置,比如在屏幕宽度大于等于750px设备上,1rem=100px;图片显示就是宽高都是100px
    //比如在iphone6(屏幕宽度:375)上,375/750*100=50px;就是1rem=50px;图片显示就是宽高都是50px;
    getFontSize: function() {
        var doc = document,
            win = window;
        var docEl = doc.documentElement,
            resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
            recalc = function() {
                var clientWidth = docEl.clientWidth;
                if (!clientWidth) return;
                //如果屏幕大于750(750是根据我效果图设置的,具体数值参考效果图),就设置clientWidth=750,防止font-size会超过100px
                if (clientWidth > 750) {
                    clientWidth = 750
                }
                //设置根元素font-size大小
                docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
            };
        //屏幕大小改变,或者横竖屏切换时,触发函数
        win.addEventListener(resizeEvt, recalc, false);
        //文档加载完成时,触发函数
        doc.addEventListener('DOMContentLoaded', recalc, false);
    },

判断是否是微信浏览器

function isWechat() {
    var ua = navigator.userAgent.toLowerCase();
    if (ua.match(/MicroMessenger/i) == 'micromessenger') {
        return true;
    } else {
        return false;
    }
}

判断是否是PC/WAP端

function isPC() {
    var userAgentInfo = navigator.userAgent;
    var Agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod'];
    var flag = true;
    for (var v = 0; v < Agents.length; v++) {
        if (userAgentInfo.indexOf(Agents[v]) > 0) {
            flag = false;
            break;
        }
    }
    return flag;
}

URL参数

    /*设置,获取URL参数*/
    //获取url参数
    //getUrlPrmt('segmentfault.com/write?draftId=122000011938')
    //Object{draftId: "122000011938"}
    getUrlPrmt: function(url) {
        url = url ? url : window.location.href;
        let _pa = url.substring(url.indexOf('?') + 1),
            _arrS = _pa.split('&'),
            _rs = {};
        for (let i = 0, _len = _arrS.length; i < _len; i++) {
            let pos = _arrS[i].indexOf('=');
            if (pos == -1) {
                continue;
            }
            let name = _arrS[i].substring(0, pos),
                value = window.decodeURIComponent(_arrS[i].substring(pos + 1));
            _rs[name] = value;
        }
        return _rs;
    },
    //设置url参数
    //setUrlPrmt({'a':1,'b':2})
    //a=1&b=2
    setUrlPrmt: function(obj) {
        let _rs = [];
        for (let p in obj) {
            if (obj[p] != null && obj[p] != '') {
                _rs.push(p + '=' + obj[p])
            }
        }
        return _rs.join('&');
    },

判断是否为空

function isEmpty(val){
    if(typeof val == "undefined" || val == null || val == ""){
        return true;
    } else {
        return false;
    }
}

设置、获取、删除、清除sessionStorage(localStorage也是同样操作)

function setSessionStorage(key, value) {
  sessionStorage.setItem(key, value)//设置
}

function getSessionStorage(key) {
  return sessionStorage.getItem(key)//获取
}

function delSessionStorage(key) {
  sessionStorage.removeItem(key) //清除单个
}

function clearSessionStorage() {
  sessionStorage.clear()//清除全部
}
//

数组方法封装

// 数组最小值
function arrayMin(arr) {
  return Math.min.apply(null, arr)
}
// 数组并集
function arrayUnion(arr1, arr2) {
  return [...new Set([...arr1, ...arr2])]
}
// 数组交集
function arrayIntersect(arr1, arr2) {
  // let arr3 = [...arr1].filter(value => arr2.includes(value))
  // return [...new Set([...arr3])]
  return [...new Set([...arr1].filter(value => arr2.includes(value)))]
}
// 数组差集
function arrayDiff(arr1, arr2) {
  return [...new Set([...arr1].filter(value => !arr2.includes(value)))]
}
// 数组去重
function arrayUnique(arr) {
  return Array.from(new Set(arr))
}

正则匹配

      /*检测字符串*/
      //checkType('165226226326','phone')
      //false
      //大家可以根据需要扩展
      var checkType = function(str, type) {
          switch (type) {
              case 'email'://邮箱
                  return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
              case 'phone'://手机
                  return /^1[3|4|5|7|8][0-9]{9}$/.test(str);
              case 'tel'://座机?
                  return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
              case 'number'://数字
                  return /^[0-9]$/.test(str);
              case 'english'://英语
                  return /^[a-zA-Z]+$/.test(str);
              case 'chinese'://中文
                  return /^[\u4E00-\u9FA5]+$/.test(str);
              case 'lower'://小写
                  return /^[a-z]+$/.test(str);
              case 'upper'://大写
                  return /^[A-Z]+$/.test(str);
              default:
                  return true;
          }
      }
  //身份证格式验证
  function checkIdCard (idCard) {
    var regIdCard = /^(^[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])$)$/
    //如果通过该验证,说明身份证格式正确,但准确性还需计算
    if (regIdCard.test(idCard)) {
      if (idCard.length == 18) {
        var idCardWi = new Array(7,  9,  10,  5,  8,  4,  2,  1,  6,  3,  7,  9,  10,  5,  8,  4,  2)  //将前17位加权因子保存在数组里
        var idCardY = new Array(1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2) //这是除以11后,可能产生的11位余数、验证码,也保存成数组
        var idCardWiSum = 0 //用来保存前17位各自乖以加权因子后的总和
        for (var i = 0; i < 17; i++) {
          idCardWiSum += idCard.substring(i, i + 1) * idCardWi[i]
        }
        var idCardMod = idCardWiSum % 11 //计算出校验码所在数组的位置
        var idCardLast = idCard.substring(17) //得到最后一位身份证号码
        //如果等于2,则说明校验码是10,身份证号码最后一位应该是X
        if (idCardMod == 2) {
          if (idCardLast == 'X' || idCardLast == 'x') {
            return true
          } else {
            return false
          }
        } else {
          //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
          if (idCardLast == idCardY[idCardMod]) {
            return true
          } else {
            return false
          }
        }
      }
    } else {
      return false
    }
  }

检测密码强度

    /*检测密码强度*/
    //checkPwd('12asdASAD')
    //3(强度等级为3)
    var checkPwd = function(str) {
        var nowLv = 0;
        if (str.length < 6) {
            return nowLv
        };
        if (/[0-9]/.test(str)) {
            nowLv++
        };
        if (/[a-z]/.test(str)) {
            nowLv++
        };
        if (/[A-Z]/.test(str)) {
            nowLv++
        };
        if (/[\.|-|_]/.test(str)) {
            nowLv++
        };
        return nowLv;
    }

日期格式化

//格式如:2020-08-17 16:11:18
var curentTime = function (time) {
var d = time ? new Date(time) : new Date();
var localTime = d.getTime();
var localOffset = d.getTimezoneOffset() * 60000; //获得当地时间偏移的毫秒数
var utc = localTime + localOffset + 3600000 * 8;
var now = new Date(utc);

var year = now.getFullYear(); //年
var month = now.getMonth() + 1; //月
var day = now.getDate(); //日
var hh = now.getHours(); //时
var mm = now.getMinutes(); //分
var ss = now.getSeconds(); //秒

var clock = year + "-";

if (month < 10)
clock += "0";

clock += month + "-";

if (day < 10)
clock += "0";

clock += day + " ";

if (hh < 10)
clock += "0";

clock += hh + ":";

if (mm < 10)
clock += "0";

clock += mm + ":";

if (ss < 10)
clock += "0";

clock += ss;

return (clock);
}
//格式如 2020年08月17日 16:19:54
    var getDates = function(data) {
        var str = ""; //存储时间的字符串
        //获取年
        var year = dt.getFullYear();
        //获取月
        var month = dt.getMonth() + 1;
        //获取日
        var day = dt.getDate();
        //获取小时
        var hour = dt.getHours();
        //获取分钟
        var min = dt.getMinutes();
        //获取秒
        var sec = dt.getSeconds();
        month = month < 10 ? "0" + month : month;
        day = day < 10 ? "0" + day : day;
        hour = hour < 10 ? "0" + hour : hour;
        min = min < 10 ? "0" + min : min;
        sec = sec < 10 ? "0" + sec : sec;
        str = year + "年" + month + "月" + day + "日 " + hour + ":" + min + ":" + sec;
        return str;
    }

去除空格

    //  type 1-所有空格  2-前后空格  3-前空格 4-后空格
    var trim = function(str, type) {
        switch (type) {
            case 1:
                return str.replace(/\s+/g, "");
            case 2:
                return str.replace(/(^\s*)|(\s*$)/g, "");
            case 3:
                return str.replace(/(^\s*)/g, "");
            case 4:
                return str.replace(/(\s*$)/g, "");
            default:
                return str;
        }
    }

字符串处理

    /*type
    1:首字母大写   
    2:首页母小写 其他大写
    3:大小写转换
    4:全部大写
    5:全部小写
     */
    //changeCase('asdasd',1)
    //Asdasd
    changeCase: function(str, type) {
        function ToggleCase(str) {
            var itemText = ""
            str.split("").forEach(
                function(item) {
                    if (/^([a-z]+)/.test(item)) {
                        itemText += item.toUpperCase();
                    } else if (/^([A-Z]+)/.test(item)) {
                        itemText += item.toLowerCase();
                    } else {
                        itemText += item;
                    }
                });
            return itemText;
        }

        switch (type) {
            case 1:
                return str.replace(/^(\w)(\w+)/, function(v, v1, v2) {
                    return v1.toUpperCase() + v2.toLowerCase();
                });
            case 2:
                return str.replace(/^(\w)(\w+)/, function(v, v1, v2) {
                    return v1.toLowerCase() + v2.toUpperCase();
                });
            case 3:
                return ToggleCase(str);
            case 4:
                return str.toUpperCase();
            case 5:
                return str.toLowerCase();
            default:
                return str;
        }
    },

返回数组(字符串)出现最多的元素和次数

    /*返回数组(字符串)出现最多的元素和次数*/
    //arr, rank->长度,默认为数组长度,ranktype,排序方式,默认降序
    //getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2])默认情况,返回所有元素出现的次数
    //getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3)传参(rank=3),只返回出现次数排序前三的
    //getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],null,1)传参(ranktype=1,rank=null),升序返回所有元素出现次数
    //getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3,1)传参(rank=3,ranktype=1),只返回出现次数排序(升序)前三的
    var getCount = function(arr, rank,ranktype) {
        var obj = {};
        var k, arr1 = [];
        //记录每一元素出现的次数
        for (var i = 0, len = arr.length; i < len; i++) {
            k = arr[i];
            if (obj[k]) {
                obj[k]++;
            } else {
                obj[k] = 1;
            }
        }
        //保存结果{el-'元素',count-出现次数}
        for (var o in obj) {
            arr1.push({
                el: o,
                count: obj[o]
            });
        }
        //排序(降序)
        arr1.sort(function(n1, n2) {
            return n2.count - n1.count
        });
        //如果ranktype为1,则为升序,反转数组
        if (ranktype === 1) {
            arr1 = arr1.reverse();
        }
        var rank1 = rank || arr1.length;
        return arr1.slice(0, rank1);
    }

随机返回一个范围内的数字

    /*随机返回一个范围内的数字*/
    randomNumber: function(n1, n2) {
        //randomNumber(5,10)
        //返回5-10的随机整数,包括5,10
        if (arguments.length === 2) {
            return Math.round(n1 + Math.random() * (n2 - n1));
        }
        //randomNumber(10)
        //返回0-10的随机整数,包括0,10
        else if (arguments.length === 1) {
            return Math.round(Math.random() * n1)
        }
        //randomNumber()
        //返回0-255的随机整数,包括0,255
        else {
            return Math.round(Math.random() * 255)
        }
    },

现金汉字大写转换

    /*现金额大写转换*/
    //upDigit(168752632)
    //"人民币壹亿陆仟捌佰柒拾伍万贰仟陆佰叁拾贰元整"
    //upDigit(1682)
    //"人民币壹仟陆佰捌拾贰元整"
    //upDigit(-1693)
    //"欠人民币壹仟陆佰玖拾叁元整"
    upDigit: function(n) {
        var fraction = ['角', '分', '厘'];
        var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
        var unit = [
            ['元', '万', '亿'],
            ['', '拾', '佰', '仟']
        ];
        var head = n < 0 ? '欠人民币' : '人民币';
        n = Math.abs(n);
        var s = '';
        for (var i = 0; i < fraction.length; i++) {
            s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
        }
        s = s || '整';
        n = Math.floor(n);
        for (var i = 0; i < unit[0].length && n > 0; i++) {
            var p = '';
            for (var j = 0; j < unit[1].length && n > 0; j++) {
                p = digit[n % 10] + unit[1][j] + p;
                n = Math.floor(n / 10);
            }
            //s = p.replace(/(零.)*零$/, '').replace(/^$/, '零')+ unit[0][i] + s; 
            s = p + unit[0][i] + s;
        }
        return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
    },

生成六位不重复验证码函数

 function methods() {
                //定义存储6位验证码的字符串
                var a = "";
                //定义计数器
                var count = 0;
                while(true) { //生成验证码
                    var y = parseInt(Math.random() * 10);
                    //不重复判断,将生成的验证码y和最后的a去对比
                    if(a.indexOf(y) == -1) {
                        a = a + y;
                        count++;
                    }
                    if(count == 6) //判断验证码是不是6位
                    {
                        break;
                    }
                }
                return a;
            }

   console.log(methods());

获取验证码流程

    var _code = "";
    var isClick = true;
    function GetCode(ele) {

        var phone = $("#phone").val();

        if (phone == "") {
            window.wxc.xcConfirm("请输入手机号!", { title: "提示:" });
            return;
        }
        if (!(/^1[34578]\d{9}$/.test(phone))) {
            window.wxc.xcConfirm("手机号不合法!", { title: "提示:" });
            return;
        }

        if (isClick) {
            isClick = false;
            var timer;
            var n = 60;
            if (n == 60) {
                clearInterval(timer)
            };
            var that = ele;
            timer = setInterval(function () {
                n--;
                if (n == 0) {
                    clearInterval(timer);
                    that.innerHTML = "重新获取";
                    isClick = true;
                    n = 60;
                } else {
                    n >= 10 ? that.innerHTML = n + 's后重发' : that.innerHTML = '0' + n + 's后重发';
                }
            }, 1000);
        }
    }

防抖,节流

//节流
function throttle(fn, interval = 500) {
                let run = true;
                return function() {
                    if(!run) return;
                    run = false;
                    setTimeout(() => {
                        fn.apply(this, arguments);
                        run = true;
                    }, interval);
                };
  }
//防抖
 function debounce(fn, interval = 500) {
              let timeout = null;
            
              return function () {
                clearTimeout(timeout);
                timeout = setTimeout(() => {
                  fn.apply(this, arguments);
                }, interval);
              };
   }

获取设备号,安卓,ios,web

function getDeviceType() {
  var deviceType = 'WEB' //其他
  var u = navigator.userAgent
  var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1 
  var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) 
  if (isAndroid) {
    deviceType = 'ANDROID'
  } else if (isiOS) {
    deviceType = 'IOS'
  }
  return deviceType
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值