自己封装的api

114 阅读1分钟
var myJs = {  /*   * 格式化日期   * @param dt 日期对象   * @returns {string} 返回值是格式化的字符串日期   */  getDates: function (dt) {    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  },  /**   * 获取指定标签对象   * @param id 标签的id属性值   * @returns {Element}根据id属性值返回指定标签对象   */  my$: function (id) {    return document.getElementById(id)  },  /**   * 设置元素的文本内容   * @param element 任意元素   * @param text 任意文本内容   */  setInnerText: function (element, text) {    if (typeof (element.textContent) === 'undefined') {      element.innerText = text    } else {      element.textContent = text    }  },  /**   * 获取元素的文本内容   * @param element 任意元素   * @returns {*} 任意元素中的文本内容   */  getInnerText: function (element) {    if (typeof (element.textContent) === 'undefined') {      return element.innerText    } else {      return element.textContent    }  },  /**   * 获取父级元素中的第一个子元素   * @param element 父级元素   * @returns {*} 父级元素中的子级元素   */  getFirstElement: function (element) {    if (element.firstElementChild) {      return element.firstElementChild    } else {      var node = element.firstChild      while (node && node.nodeType != 1) {        node = node.nextSibling      }      return node    }  },  /**   * 获取父级元素中的最后一个子元素   * @param element 父级元素   * @returns {*} 最后一个子元素   */  getLastElement: function (element) {    if (element.lastElementChild) {      return element.lastElementChild    } else {      var node = element.lastChild      while (node && node.nodeType != 1) {        node = node.previousSibling      }      return node    }  },  /**   * 获取某个元素的前一个兄弟元素   * @param element 某个元素   * @returns {*} 前一个兄弟元素   */  getPreviousElement: function (element) {    if (element.previousElementSibling) {      return element.previousElementSibling    } else {      var node = element.previousSibling      while (node && node.nodeType != 1) {        node = node.previousSibling      }      return node    }  },  /**   * 获取某个元素的后一个兄弟元素   * @param element 某个元素   * @returns {*} 后一个兄弟元素   */  getNextElement: function (element) {    if (element.nextElementSibling) {      return element.nextElementSibling    } else {      var node = element.nextSibling      while (node && node.nodeType != 1) {        node = node.nextSibling      }      return node    }  },  /**   * 获取某个元素的所有兄弟元素   * @param element 某个元素   * @returns {Array} 兄弟元素   */  getSiblings: function (element) {    if (!element) return    var elements = []    var ele = element.previousSibling    while (ele) {      if (ele.nodeType === 1) {        elements.push(ele)      }      ele = ele.previousSibling    }    ele = element.nextSibling    while (ele) {      if (ele.nodeType === 1) {        elements.push(ele)      }      ele = ele.nextSibling    }    return elements  },  /**   * 返回当前浏览器是什么类型的浏览器   */  userBrowser: function () {    var browserName = navigator.userAgent.toLowerCase()    if (/msie/i.test(browserName) && !/opera/.test(browserName)) {      console.log('IE')    } else if (/firefox/i.test(browserName)) {      console.log('Firefox')    } else if (/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName)) {      console.log('Chrome')    } else if (/opera/i.test(browserName)) {      console.log('Opera')    } else if (/webkit/i.test(browserName) && !(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName))) {      console.log('Safari')    } else {      console.log('不知道什么鬼!')    }  },  // 缓动动画函数的封装  // 获取元素样式计算后的值  getStyle: function (element, attr) {    return element.currentStyle ? element.currentStyle.attr : window.getComputedStyle(element, null)[attr]  },  // 缓动动画函数的封装  animate: function (element, json, fn) {    clearInterval(element.timeId)    element.timeId = setInterval(function () {      var flag = true      for (var attr in json) {        if (attr == 'opacity') {          var current = getStyle(element, attr) * 100          var target = json[attr] * 100          // 每次移动的步数          var step = (target - current) / 10          // 每次移动步数都是整数(比较大的数字)          step = step > 0 ? Math.ceil(step) : Math.floor(step)          current += step // 移动后的当前的像素          element.style[attr] = current / 100        } else if (attr == 'zIndex') {          element.style[attr] = json[attr]        } else {          var current = parseInt(getStyle(element, attr))          var target = json[attr]          // 每次移动的步数          var step = (target - current) / 10          // 每次移动步数都是整数(比较大的数字)          step = step > 0 ? Math.ceil(step) : Math.floor(step)          current += step // 移动后的当前的像素          element.style[attr] = current + 'px'        }        if (current != target) { // 到达目标后停止计时器          flag = false        }      }      if (flag) {        clearInterval(element.timeId) // 清理计时器        if (fn) {          fn()        }      }      // console.log("target:" + target + ",current:" + current + ",step:" + step);    }, 20)  },  /* 去除空格 */  //  type 1-所有空格  2-前后空格  3-前空格 4-后空格  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    }  },  /* 字符串循环复制 */  // repeatStr(str->字符串, count->次数)  // repeatStr('123',3)  // "123123123"  repeatStr: function (str, count) {    var text = ''    for (var i = 0; i < count; i++) {      text += str    }    return text  },  // 字符串替换(字符串,要替换的字符,替换成什么)  replaceAll: function (str, AFindText, ARepText) {    raRegExp = new RegExp(AFindText, 'g')    return str.replace(raRegExp, ARepText)  },  /* 替换 *  */  // replaceStr(字符串,字符格式, 替换方式,替换的字符(默认*))  replaceStr: function (str, regArr, type, ARepText) {    var regtext = ''    var Reg = null    var replaceText = ARepText || '*'    // replaceStr('18819322663',[3,5,3],0)    // 188*****663    // repeatStr是在上面定义过的(字符串循环复制),大家注意哦    if (regArr.length === 3 && type === 0) {      regtext = '(\\w{' + regArr[0] + '})\\w{' + regArr[1] + '}(\\w{' + regArr[2] + '})'      Reg = new RegExp(regtext)      var replaceCount = repeatStr(replaceText, regArr[1])      return str.replace(Reg, '$1' + replaceCount + '$2')    }    // replaceStr('asdasdasdaa',[3,5,3],1)    //* **asdas***    else if (regArr.length === 3 && type === 1) {      regtext = '\\w{' + regArr[0] + '}(\\w{' + regArr[1] + '})\\w{' + regArr[2] + '}'      Reg = new RegExp(regtext)      var replaceCount1 = repeatSte(replaceText, regArr[0])      var replaceCount2 = repeatSte(replaceText, regArr[2])      return str.replace(Reg, replaceCount1 + '$1' + replaceCount2)    }    // replaceStr('1asd88465asdwqe3',[5],0)    //* ****8465asdwqe3    else if (regArr.length === 1 && type == 0) {      regtext = '(^\\w{' + regArr[0] + '})'      Reg = new RegExp(regtext)      var replaceCount = repeatSte(replaceText, regArr[0])      return str.replace(Reg, replaceCount)    }    // replaceStr('1asd88465asdwqe3',[5],1,'+')    // "1asd88465as+++++"    else if (regArr.length === 1 && type == 1) {      regtext = '(\\w{' + regArr[0] + '}$)'      Reg = new RegExp(regtext)      var replaceCount = repeatSte(replaceText, regArr[0])      return str.replace(Reg, replaceCount)    }  },  /* 检测字符串 */  // checkType('165226226326','phone')  // false  // 大家可以根据需要扩展  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    }  },  /* 检测密码强度 */  // checkPwd('12asdASAD')  // 3(强度等级为3)  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  },  /* 随机码 */  // count取值范围0-36  // randomNumber(10)  // "2584316588472575"  // randomNumber(14)  // "9b405070dd00122640c192caab84537"  // Math.random().toString(36).substring(2);  // "83vhdx10rmjkyb9"  randomNumber: function (count) {    return Math.random().toString(count).substring(2)  },  /* 查找字符串出现次数 */  countStr: function (str, strSplit) {    return str.split(strSplit).length - 1  },  // var strTest = 'sad44654blog5a1sd67as9dablog4s5d16zxc4sdweasjkblogwqepaskdkblogahseiuadbhjcibloguyeajzxkcabloguyiwezxc967'  // countStr(strTest,'blog')  // 6  /* 数组去重 */  // ES6新增的Set数据结构,类似于数组,但是里面的元素都是唯一的 ,其构造函数可以接受一个数组作为参数  // let arr=[1,2,1,2,6,3,5,69,66,7,2,1,4,3,6,8,9663,8]  // let set = new Set(array);  // {1,2,6,3,5,69,66,7,4,8,9663}  // ES6Array新增了一个静态方法from,可以把类似数组的对象转换为数组  // Array.from(set)  // [1,2,6,3,5,69,66,7,4,8,9663]  removeRepeatArray: function (arr) {    return Array.from(new Set(arr))  },  /* 数组顺序打乱 */  upsetArr: function (arr) {    return arr.sort(function () {      return Math.random() - 0.5    })  },  /* 数组最大值最小值 */  // 这一块的封装,主要是针对数字类型的数组  maxArr: function (arr) {    return Math.max.apply(null, arr)  },  minArr: function (arr) {    return Math.min.apply(null, arr)  },  /* 数组求和,平均值 */  // 这一块的封装,主要是针对数字类型的数组  // 求和  sumArr: function (arr) {    var sumText = 0    for (var i = 0, len = arr.length; i < len; i++) {      sumText += arr[i]    }    return sumText  },  // 平均值,小数点可能会有很多位,这里不做处理,处理了使用就不灵活了!  covArr: function (arr) {    var sumText = sumArr(arr)    var covText = sumText / length    return covText  },  /* 从数组中随机获取元素 */  // randomOne([1,2,3,6,8,5,4,2,6])  // 8  // randomOne([1,2,3,6,8,5,4,2,6])  // 1  randomOne: function (arr) {    return arr[Math.floor(Math.random() * arr.length)]  },  /* 返回数组(字符串)出现的次数 */  // getEleCount('asd56+asdasdwqe','a')  // 3  // getEleCount([1,2,3,4,5,66,77,22,55,22],22)  // 2  getEleCount: function (obj, ele) {    var num = 0    for (var i = 0, len = obj.length; i < len; i++) {      if (ele == obj[i]) {        num++      }    }    return num  },  /* 返回数组(字符串)出现最多的元素和次数 */  // 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),只返回出现次数排序(升序)前三的  getCount: function (arr, rank, ranktype) {    var obj = {}    var k; var 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)  },  /* 得到n1-n2下标的数组 */  // getArrayNum([0,1,2,3,4,5,6,7,8,9],5,9)  // [5, 6, 7, 8, 9]  // getArrayNum([0,1,2,3,4,5,6,7,8,9],2) 不传第二个参数,默认返回从n1到数组结束的元素  // [2, 3, 4, 5, 6, 7, 8, 9]  getArrayNum: function (arr, n1, n2) {    var arr1 = []    var len = n2 || arr.length - 1    for (var i = n1; i <= len; i++) {      arr1.push(arr[i])    }    return arr1  },  /* 筛选数组 */  // 删除值为'val'的数组元素  // removeArrayForValue(['test','test1','test2','test','aaa'],'test','%')  // ["aaa"]   带有'test'的都删除  // removeArrayForValue(['test','test1','test2','test','aaa'],'test')  // ["test1", "test2", "aaa"]  //数组元素的值全等于'test'才被删除  removeArrayForValue: function (arr, val, type) {    arr.filter(function (item) {      return type === '%' ? item.indexOf(val) !== -1 : item !== val    })  },  /* 现金额大写转换 */  // 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(/^整$/, '零元整')  },  /* 设置,获取URL参数 */  // 获取url参数  // getUrlPrmt('segmentfault.com/write?draftId=122000011938')  // Object{draftId: "122000011938"}  getUrlPrmt: function (url) {    url = url || window.location.href    const _pa = url.substring(url.indexOf('?') + 1)    const _arrS = _pa.split('&')    const _rs = {}    for (let i = 0, _len = _arrS.length; i < _len; i++) {      const pos = _arrS[i].indexOf('=')      if (pos == -1) {        continue      }      const name = _arrS[i].substring(0, pos)      const 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) {    const _rs = []    for (const p in obj) {      if (obj[p] != null && obj[p] != '') {        _rs.push(p + '=' + obj[p])      }    }    return _rs.join('&')  },  /* 随机返回一个范围内的数字 */  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)    }  },  /* 适配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    var win = window    var docEl = doc.documentElement    var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'    var 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)  }}