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;