JS常见通用方法总结

2019-10-30  本文已影响0人  小碗吃不了

获取上传图片宽高

 <input
      type="file"
      accept="image/*"
      multiple     
      @change="getPicture($event)"
   > //  multiple 允许选择多个值

getPicture: function (e) {
    //获取上传图片宽高
    var file = e.target.files;
    var ImgSize = [];
    for(var n = 0; n<file.length; n++){
      let imgSrc = window.URL.createObjectURL(file[n]);
      let img = new Image();
      img.src=imgSrc;
      img.onload = function(){
          ImgSize.push({w:img.width,h:img.height});
      }
    }
}

判断发布帖子距现在的时间

function GetDateDiff(date) {
  if (date) {
      return date.replace(/\-/g, "/");
    }
};
//特殊时间格式转换正常格式 如2019-11-07T07:02:27.000+0000,IOS不兼容,最后后台转
function renderTime(date) {
    var time= new Date(date).toJSON();
    return new Date(+new Date(time) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}
function filtDate(val) {
  var today = new Date().getTime();
  if(val.indexOf("T") != -1){
      val = renderTime(val)
  }
  var oldTime = new Date(GetDateDiff(val)).getTime();
  var limit = today - oldTime;
  var content = "";
  if (limit < 60000) {
    content = "刚刚";
  } else if (limit >= 60000 && limit < 3600000) {
    content = Math.floor(limit / 60000) + "分钟前";
  } else if (limit >= 3600000 && limit < 86400000) {
    content = Math.floor(limit / 3600000) + "小时前";
  } else if (limit >= 86400 && limit < 172800000) {
    content = "昨天";
  } else if (limit >= 172800000 && limit < 2592000000) {
    content = Math.floor(limit / 86400000) + "天前";
  } else if (limit >= 2592000000 && limit < 31104000000) {
    content = Math.floor(limit / 2592000000) + "个月前";
  } else {
    content = "很久前";
  }
    return content;
}

电话过滤器,中间4位*

function filtPhone(tel) {
  if (tel) {
    tel = tel.split("");
    tel.splice(3, 4, "****");
    return tel.join("");
  } else {
    return ""
  }
}

获取当前时间(年月日),格式YYYY-MM-DD

function getNowFormatDate() {
  var date = new Date();
  var seperator = "-";
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var strDate = date.getDate();
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = "0" + strDate;
  }
  var currentdate = year + seperator + month + seperator + strDate;
  return currentdate;
}

获取当前时间(年月日时分秒),格式YYYY-MM-DD hh:mm:ss

function getNowFormatDateTime() {
  var date = new Date();
  var seperator1 = "-";
  var seperator2 = ":";
  var month = date.getMonth() + 1;
  var strDate = date.getDate();
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = "0" + strDate;
  }
  var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate +
        " " + date.getHours() + seperator2 + date.getMinutes() + seperator2 + date.getSeconds();
  return currentdate;
}

判断对象内每个值是否为空,空返回false

function isObjNull(obj) {
  if (obj) {
    if (JSON.stringify(obj) == "{}") {
      return false
    } else {
    for (let key in obj) {
      if (!obj[key]) {
        return false
      }
    }
  }
    return true
} else {
    return false
  }
}

查询时间间隔天数(用于时间间隔限制)

  时间格式需为:2020-05-01 00:00:00


  var startTime = new Date(
      Date.parse(params.getTime[0].replace(/-/g, "/"))
    ).getTime();
    var endTime = new Date(
      Date.parse(params.getTime[1].replace(/-/g, "/"))
    ).getTime();
    var dates = Math.abs(startTime - endTime) / (1000 * 60 * 60 * 24);
    if (dates > 3) {
      this.$message({
        type: "warning",
        message: "查询间隔不超过三天"
      });
      return;
    }

查询指定(当前日期)往后一周

    var today=new Date();
    var dateArr=[]
    for(var i=0;i<7;i++){
        var newDate=new Date(today.getTime()+i*1000*60*60*24)
        var year=newDate.getFullYear()
        var month=(parseInt(newDate.getMonth())+1)>9?(parseInt(newDate.getMonth())+1):"0"+(parseInt(newDate.getMonth())+1)
        var day=(newDate.getDate())>9?newDate.getDate():"0"+newDate.getDate()
        var fullDate=`${year}-${month}-${day}`
        dateArr.push(fullDate)
    }
    console.log(dateArr)

比较时间大小

  时间格式需为:2020-05-01 00:00:00
 compareDate(d1, d2) {
  let reg = new RegExp("-", "g");
  return new Date(d1.replace(reg, "/")) > new Date(d2.replace(reg, "/"));
},
查最近几天(用于echarts图最近七天或一个月时间)
 // 最近七天
getBeforeDate(n) {
  var n = n;
  // console.log(n);
  var d = new Date();
  var year = d.getFullYear();
  var mon = d.getMonth() + 1;
  var day = d.getDate();
  if (day <= n) {
    if (mon > 1) {
      mon = mon - 1;
    } else {
      year = year - 1;
      mon = 12;
    }
  }
  d.setDate(d.getDate() + n); //很重要,+n取得是前一天的时间
  year = d.getFullYear();
  mon = d.getMonth() + 1;
  day = d.getDate();
  var s = (mon < 10 ? "0" + mon : mon) + "-" + (day < 10 ? "0" + day : day);
  return s;
},
引用示例
判断值是否为空
validatenull(val) {
if (typeof val == 'boolean') {
    return false;
}
if (typeof val == 'number') {
    return false;
}
if (val instanceof Array) {
    if (val.length == 0) return true;
} else if (val instanceof Object) {
    if (JSON.stringify(val) === '{}') return true;
} else {
    if (val == 'null' || val == null || val == 'undefined' || val == undefined || val == '') return true;
    return false;
}
  return false;
}
判断是否为整数
export function validatenum(num) {
let regName = /[^\d.]/g;
if (!regName.test(num)) {
   return false;
} else {
   return true;
  }
}
判断是否为小数
export function validatenumord(num) {
let regName = /[^\d.]/g;
    if (!regName.test(num)) return false;
    else  return true;
}
判断设备 验证pad还是pc
export const vaildatePc = function () {
const userAgentInfo = navigator.userAgent;
const Agents = ["Android", "iPhone",
    "SymbianOS", "Windows Phone",
    "iPad", "iPod"
];
let flag = true;
for (var v = 0; v < Agents.length; v++) {
    if (userAgentInfo.indexOf(Agents[v]) > 0) {
        flag = false;
        break;
    }
}
return flag;
}
判断URL地址
export function isURL(s) {
   return /^http[s]?:\/\/.*/.test(s)
}
判断身份证号码
export function cardid(code) {
let list = [];
let result = true;
let msg = '';
var city = {
    11: "北京",
    12: "天津",
    13: "河北",
    14: "山西",
    15: "内蒙古",
    21: "辽宁",
    22: "吉林",
    23: "黑龙江 ",
    31: "上海",
    32: "江苏",
    33: "浙江",
    34: "安徽",
    35: "福建",
    36: "江西",
    37: "山东",
    41: "河南",
    42: "湖北 ",
    43: "湖南",
    44: "广东",
    45: "广西",
    46: "海南",
    50: "重庆",
    51: "四川",
    52: "贵州",
    53: "云南",
    54: "西藏 ",
    61: "陕西",
    62: "甘肃",
    63: "青海",
    64: "宁夏",
    65: "新疆",
    71: "台湾",
    81: "香港",
    82: "澳门",
    91: "国外 "
};
if (!validatenull(code)) {
    if (code.length == 18) {
        if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
            msg = "证件号码格式错误";
        } else if (!city[code.substr(0, 2)]) {
            msg = "地址编码错误";
        } else {
            //18位身份证需要验证最后一位校验位
            code = code.split('');
            //∑(ai×Wi)(mod 11)
            //加权因子
            var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
            //校验位
            var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x'];
            var sum = 0;
            var ai = 0;
            var wi = 0;
            for (var i = 0; i < 17; i++) {
                ai = code[i];
                wi = factor[i];
                sum += ai * wi;
            }
            if (parity[sum % 11] != code[17]) {
                msg = "证件号码校验位错误";
            } else {
                result = false;
            }

        }
    } else {
        msg = "证件号码长度不为18位";
    }

} else {
    msg = "证件号码不能为空";
}
list.push(result);
list.push(msg);
return list;
}
根据字典的value查找对应的index
export const findArray = (dic, value) => {
for (let i = 0; i < dic.length; i++) {
    if (dic[i].value == value) {
        return i;
    }
}
return -1;
};
// dic 为对象
根据字典的value显示label
// validatenull判空方法
export const findByvalue = (dic, value) => {
let result = '';
if (validatenull(dic)) return value;
if (typeof (value) == 'string' || typeof (value) == 'number' || typeof (value) == 'boolean') {
    let index = 0;
    index = findArray(dic, value);
    if (index != -1) {
        result = dic[index].label;
    } else {
        result = value;
    }
} else if (value instanceof Array) {
    result = [];
    let index = 0;
    value.forEach(ele => {
        index = findArray(dic, ele);
        if (index != -1) {
            result.push(dic[index].label);
        } else {
            result.push(value);
        }
    });
    result = result.toString();
}
return result;
};
判断路由是否相等
export const diff = (obj1, obj2) => {
delete obj1.close;
var o1 = obj1 instanceof Object;
var o2 = obj2 instanceof Object;
if (!o1 || !o2) { /*  判断不是对象  */
    return obj1 === obj2;
}

if (Object.keys(obj1).length !== Object.keys(obj2).length) {
    return false;
    //Object.keys() 返回一个由对象的自身可枚举属性(key值)组成的数组
    //例如:数组返回下表:let arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2;
}

for (var attr in obj1) {
    var t1 = obj1[attr] instanceof Object;
    var t2 = obj2[attr] instanceof Object;
    if (t1 && t2) {
        return diff(obj1[attr], obj2[attr]);
    } else if (obj1[attr] !== obj2[attr]) {
        return false;
    }
}
return true;
}
动态插入css
export const loadStyle = url => {
  const link = document.createElement('link');
  link.type = 'text/css';
  link.rel = 'stylesheet';
  link.href = url;
  const head = document.getElementsByTagName('head')[0];
  head.appendChild(link);
};
浏览器全屏
export const reqFullScreen = () => {
if (document.documentElement.requestFullScreen) {
    document.documentElement.requestFullScreen();
} else if (document.documentElement.webkitRequestFullScreen) {
    document.documentElement.webkitRequestFullScreen();
} else if (document.documentElement.mozRequestFullScreen) {
    document.documentElement.mozRequestFullScreen();
}
};
浏览器退出全屏
export const exitFullScreen = () => {
if (document.documentElement.requestFullScreen) {
    document.exitFullScreen();
} else if (document.documentElement.webkitRequestFullScreen) {
    document.webkitCancelFullScreen();
} else if (document.documentElement.mozRequestFullScreen) {
    document.mozCancelFullScreen();
}
};
倒计时60秒重新获取验证码(接入网易易盾,图形验证)
<van-popup v-model="showPopup" safe-area-inset-bottom duration="0.3" position="center" lock-scroll lazy-render
        round close-on-popstate :close-on-click-overlay="false" :style="{height: '61vw',width:'68%' }">
        <h3 style="margin-bottom: 15px">登录</h3>
        <input type="tel" maxlength="11" placeholder="请输入手机号" v-model="phone">
        <div class="code-box">
            <input type="tel" maxlength="11" id="code" class="c_code" v-model="code" placeholder="请输入验证码">
            <input type="button" v-model="count" class="c_code-button" id="btnSendCode1" @click="getCodes"
                :disabled="disabled"></input>
        </div>
        <button type="button" class="login_con" @click="login">确认</button>
    </van-popup>
动态引入易盾 加时间戳
  <script>
    var url = 'https://cstaticdun.126.net/load.min.js' + '?t=' + (new Date()).getTime()
    document.writeln('<script src="' + url + '">' + '</' + 'script>');
  </script>

data() {
    return {
        allCount:60,
        phone:"",
        code:"",
        captchaIns :""//易盾实例
    }
}
created: function () {
    this.getInter();//初始化易盾
},
methods: {
     // 易盾
     getInter() {
          let that = this;
                initNECaptcha({
                    element: '#captcha',
                    captchaId: '5fd47b149907473182065fedc5f243fa',
                    mode: 'popup',
                    width: '220px',
                    protocol: 'https',
                    onClose: function () {
                    },
                    onVerify: function (err, res) {
                        if (res) {
                            that.getbikeAsyncAjaxApi2('mego-user/wxUser/wyVerify', 'post', {
                                mobile: that.phone.trim(),
                                validate: res.validate
                            }, (data) => {
                                //设置button效果,开始计时
                                that.disabled = true
                                that.count = that.curCount1 + "秒再获取"
                                that.InterValObj1 = setInterval(that.SetRemainTime1, 1000); //启动计时器,1秒执行一次
                                vant.Toast.success('发送成功')
                            })
                        }
                    }
                }, function (instance) {
                    that.captchaIns = instance;
                }, function (err) {
                    // 初始化失败后触发该函数,err对象描述当前错误信息
                })
            },
    //倒计时60
    SetRemainTime: function () {
         if (this.allCount == 0) {
                this.disabled = false //必须为input
                clearInterval(this.InterValObj1); //停止计时器
                this.count = "重新发送";
         } else {
                this.allCount= this.allCount- 1;
                this.count = this.allCount+ "秒再获取"
            }
        },
         // 验证码时间
            getCodes() {
                if (!this.phone.trim()) return vant.Toast('请输入手机号');
                if (!/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(this.phone.trim())) return vant.Toast('手机号格式错误');
                //调取易盾前刷新
                this.captchaIns && this.captchaIns.refresh()
                this.captchaIns && this.captchaIns.popUp()
            },
}
获取当前网址内传参值(以对象形式返回)
 getQueryString: function () {
      var theRequest = {}
      var r = window.location.search;
      if (r.indexOf("?") != -1) {
            var str = r.substr(1);
             str = str.replace("?", "&");
             strs = str.split("&");
             for (var i = 0; i < strs.length; i++) {
                  theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
              }
         }
       return theRequest;
      }
获取当前时间或指定开始时间至指定结束时间的秒数(用于活动开奖后至结束倒计时)
  this.endtime = '2020-08-10 14:50:00' //示例
  getM() {
    let date = new Date()
    let now = date.getTime()
     // let now = new Date(this.nowtime.replace(/-/g, '/'))   
     let endDate = new Date(this.endtime.replace(/-/g, '/'))   //兼容ios
     let end = endDate.getTime(); 
     let leftTime = end - now;
     if (leftTime > 0) {
           let d =  Math.floor(leftTime / 1000 / 60 / 60 / 24);
           let h = Math.floor(leftTime / 1000 / 60 / 60 % 24)
           let m = Math.floor(leftTime / 1000 / 60 % 60)
           let s = Math.floor(leftTime / 1000 % 60)
           this.totalTime = s + m * 60 + h * 60 * 60 + d * 24 * 60 * 60;
           console.log(this.totalTime)
      }
 }
活动开始倒计时
 this.startime = '2020-08-10 14:50:00' //示例

根据判断条件开启活动倒计时定时
this.isCountTime = setInterval(this.countTime, 1000)

 countTime() {
      let that = this;
      let date = new Date()
      let now = date.getTime()
      let endDate = new Date(this.startime.replace(/-/g, '/'))
      let end = endDate.getTime();
      let leftTime = end - now;
      if (leftTime > 0) {
          this.day = Math.floor(leftTime / 1000 / 60 / 60 / 24)
          let h = Math.floor(leftTime / 1000 / 60 / 60 % 24)
          this.hour = h < 10 ? '0' + h : h
          let m = Math.floor(leftTime / 1000 / 60 % 60)
          this.min = m < 10 ? '0' + m : m
          let s = Math.floor(leftTime / 1000 % 60)
          this.second = s < 10 ? '0' + s : s;
          console.log("剩下时间-" + this.hour + ':' + this.min + ':' + this.second)
       } else {
          window.clearInterval(this.isCountTime);
           //此处用于启动开奖至结束倒计时
      }
    },
判断当前时间是否存在两个时间之内
  //时间格式  2020-08-06 16:50:00
 isDuringDate(beginDateStr, endDateStr) {
     var curDate = new Date(),
     beginDate = new Date(beginDateStr),
     endDate = new Date(endDateStr);
     if (curDate >= beginDate && curDate <= endDate) {
             return true;
      }
       return false;
  },
判断pc还是手机端加载不同地址
if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
         // window.location.href = "http://127.0.0.1:8848/web-mego/web-phone/index.html"
         console.log("移动端")
         window.location.href = "https://m.megobike.com/"
 }else{
        // window.location.href = "http://127.0.0.1:8848/web-mego/megobike-web/index.html"
        window.location.href = "http://www.megobike.com";
}
上一篇下一篇

猜你喜欢

热点阅读