项目中常用的方法

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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容