项目中常用的方法

const tool = {

  // 获取网页地址参数

  getQueryString: (name) => {

    const search = window.location.search;

    const matched = search

      .slice(1)

      .match(new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"));

    return search.length ? matched && matched[2] : null;

  },

  /**

  * 切除字符串,当字符串大于最大长度时,截取字符串拼接'...'

  */

  getSliceStr: (str, maxLength) => {

    if (str) {

      if (str.length > maxLength) {

        str = str.slice(0, maxLength) + "...";

      }

    }

    return str;

  },

  /**获取字符串长度,1个中文字符算2个长度 */

  getStrLength: (str) => {

    if (str) {

      var count = str.length;

      for (var i = 0; i < str.length; i++) {

        if (str.charCodeAt(i) > 255) {

          count++;

        }

      }

      return count;

    }

    console.error("获取字符串长度失败,字符串不存在!!请检查!!----->");

    return null;

  },

  /**鼠标点击延迟,name:节点的类名,delay:延迟时间(ms) */

  clickDelay: (name, delay = 1200) => {

    let nodeArr;

    nodeArr = document.getElementsByClassName(name);

    if (!nodeArr || nodeArr.length <= 0) {

      console.warn("鼠标点击延迟添加失败,节点不存在!!!!请查看----->");

      return;

    }

    for (let i = 0; i < nodeArr.length; i++) {

      let node = nodeArr[i];

      node.style.pointerEvents = "none";

      setTimeout(() => {

        if (node) node.style.pointerEvents = "";

      }, delay);

    }

  },

  /**禁用点击事件 */

  disableClick: (name) => {

    let node;

    node = document.getElementsByClassName(name)[0];

    node.style.pointerEvents = "none";

  },

  /**启用点击事件 */

  enableClick: (name) => {

    let node;

    node = document.getElementsByClassName(name)[0];

    node.style.pointerEvents = "";

  },

  /**

  * 在一个数组中寻找对应值的元素

  * @param {寻找的值} value

  * @param {数组列表} list

  * @param {寻找的值对应的键值} key

  */

  findData(value, list, key) {

    const result = list.filter((i) => i[key] == value);

    if (!result || result.length == 0)

      throw new Error(`不存在key=${key}的任务,请检查接口`);

    return result[0];

  },

  /**

  * 获取日期-日-月

  * @param {2020-08-13} date

  *

  * return 08月13日

  */

  getDateToDayMonth: (date) => {

    let dateStrs = date.split("-");

    return dateStrs[1] + "月" + dateStrs[2] + "日";

  },

  /**根据时间戳获取日期-月-日 */

  getDateDayMonthByTime: (time) => {

    let date = new Date(time);

    let year = date.getFullYear();

    let month = date.getMonth() + 1;

    let day = date.getDate();

    let hour = date.getHours();

    let minutes = date.getMinutes();

    let seconds = date.getSeconds();

    month = month < 10 ? "0" + month : month;

    day = day < 10 ? "0" + day : day;

    hour = hour < 10 ? "0" + hour : hour;

    minutes = minutes < 10 ? "0" + minutes : minutes;

    // date = year + '/' + month + '/' + day + ' ' + hour + ':' + minutes;

    let data = {

      year: year,

      month: month,

      day: day,

      hours: hour,

      minutes: minutes,

      seconds: seconds,

    };

    console.log("计算的时间", data);

    return data;

  },

  /**通过秒数获取日期 */

  getDateBySeconds: (value) => {

    var seconds = parseInt(value); // 秒

    var minutes = 0; // 分

    var hour = 0; // 小时

    if (seconds > 60) {

      minutes = parseInt(seconds / 60);

      seconds = parseInt(seconds % 60);

      if (minutes > 60) {

        hour = parseInt(minutes / 60);

        minutes = parseInt(minutes % 60);

      }

    }

    let data = {

      hours: hour,

      minutes: minutes,

      seconds: seconds,

    };

    // console.log('time-=--->',value,data)

    return data;

  },

  isArray: (o) => {

    return Object.prototype.toString.call(o) == "[object Array]";

  },

  // 二次贝塞尔,用于做曲线运动

  bezier: (t, p0, p1, p2) => {

    // (1-t)^2 P0 + 2(1-t)tP1+ t^2P2

    return Math.pow(1 - t, 2) * p0 + 2 * (1 - t) * t * p1 + Math.pow(t, 2) * p2;

  },

  /**计算两个时间戳相差的时间,小时,分,秒 */

  compareTime: (startTime, endTime) => {

    let between = (endTime - startTime) / 1000;

    let hours = Math.floor((between % (24 * 36000)) / 3600);

    let minutes = Math.floor((between % 3600) / 60);

    let seconds = Math.floor((between % 60) / 60);

    let date;

    date = {

      hours: hours,

      minutes: minutes,

      seconds: seconds,

    };

    return date;

  },

  //计算时间多少天时分秒

  intervalOneTime: (time) => {

    var date3 = time; //时间差的毫秒数

    //计算出相差天数

    var days = Math.floor(date3 / (24 * 3600 * 1000));

    //计算出小时数

    var leave1 = date3 % (24 * 3600 * 1000); //计算天数后剩余的毫秒数

    var hours = Math.floor(leave1 / (3600 * 1000));

    //计算相差分钟数

    var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数

    var minutes = Math.floor(leave2 / (60 * 1000));

    //计算相差秒数

    var leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数

    var seconds = Math.floor(leave3 / 1000);

    let result1 = {

      days: days,

      hours: hours,

      minutes: minutes,

      seconds: seconds,

    };

    console.log("单个时间计算的时间");

    return result1;

  },

  /**判断是否是微信环境 */

  isWX() {

    var ua = window.navigator.userAgent.toLowerCase();

    return ua.match(/MicroMessenger/i) == "micromessenger";

  },

  /**获取渠道参数 */

  getChannel() {

    return tool.getQueryString("channel");

  },

  /**

  * 数字补0 例:(num = 2, length = 2) -> 02

  * @param num 数字

  * @param length 位数

  * @private

  */

  prefixInteger: (num, length) => {

    return (Array(length).join("0") + num).slice(-length);

  },

  /**

  * 随机获取数组中六个值

  */

  getRandomArrayElements: (arr, count) => {

    var shuffled = arr.slice(0),

      i = arr.length,

      min = i - count,

      temp,

      index;

    while (i-- > min) {

      index = Math.floor((i + 1) * Math.random());

      temp = shuffled[index];

      shuffled[index] = shuffled[i];

      shuffled[i] = temp;

    }

    return shuffled.slice(min);

  },

  /**

  * 格式化时间 format Time - type 01

  * @param {Number} time

  */

  formatTime: (time, type = "") => {

    time = parseInt(time);

    if (!time) return null;

    const yy = new Date(time).getFullYear();

    const mm = new Date(time).getMonth() + 1;

    const dd = new Date(time).getDate();

    let t2 = new Date(time).getHours() + ""; //获取时

    let t3 = new Date(time).getMinutes() + ""; //获取分

    let t1;

    if (type === "s") {

      t1 = `${yy}年${mm}月${dd}日${t2}时${t3}秒`;

    } else if (type === "h") {

      t1 = `${yy}年${mm}月${dd}日${t2}时`;

    } else {

      t1 = `${yy}年${mm}月${dd}日`;

    }

    // console.log(new Date(time).toLocaleDateString())

    // const t1 = new Date(time).toLocaleDateString() + ''//获取年月日

    // const t4 = new Date(time).getMilliseconds() + ''//获取秒

    // if (parseInt(t2) < 10) t2 = '0'+t2

    // if (parseInt(t3) < 10) t3 = '0'+t3

    // time = t1 + ' ' + t2 + ':' + t3

    time = t1;

    // console.log('time', time, t1 + ' ' + t2 + ':' + t3)

    return time;

  },

  throttle: (fun, delay = 2000) => {

    let last, deferTimer;

    return function () {

      let now = +new Date();

      if (last && now < last + delay) {

        clearTimeout(deferTimer);

        deferTimer = setTimeout(() => {

          last = now;

        }, delay);

      } else {

        last = now;

        fun.apply(this, arguments);

      }

    };

  },

};

export default tool;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容