防抖
// 防抖
export function debounce(func, delay) {
let timer
return function (...args) {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
func.apply(this, args)
}, delay)
}
}
节流
// 节流
export function throttle(fn, delay) {
let previous = 0;
// 使用闭包返回一个函数并且用到闭包函数外面的变量previous
return function() {
let args = arguments;
let now = new Date();
if(now - previous > delay) {
fn.apply(this, args);
previous = now;
}
}
}
图片转base64
// 转base64
export function fileToBase64(filePath){
return new Promise((resolve) => {
let fileManager = Taro.getFileSystemManager();
fileManager.readFile({
filePath,
encoding: 'base64',
success: (e) => {
resolve(e.data);
}
});
});
}
获取地址栏参数
export function GetRequest(url){
let theRequest={}
if(url.indexOf("?")!=-1){
const str=url.split('?')[1];
theRequest.url =url.split('?')[0];
const strs=str.split("&");
strs.forEach(item=>{
theRequest[item.split("=")[0]]= item.split("=")[1]
})
}
return theRequest;
}
时间格式转换
export const formatTime = (date, format) => {
console.log(date);
const year = date.getFullYear( )
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
switch (format) {
case 'YYYY-MM-dd HH:mm:ss':
return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
case 'YYYY-MM-dd':
return [year, month, day].map(formatNumber).join('-')
case 'YYYY.MM.dd HH:mm':
return [year, month, day].map(formatNumber).join('.') + ' ' + [hour, minute].map(formatNumber).join(':')
}
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
储存信息
/**
* 储存信息
* @param {*} key
* @param {*} data
*/
export function setStorage(key, data) {
const value = JSON.stringify(data);
try {
Taro.setStorageSync(key, value)
} catch (e) {
}
}
获取储存信息
/**
* 获取储存信息
* @param {*} key
* @returns
*/
export function getStorage(key) {
try {
var value = Taro.getStorageSync(key)
if (value) {
return JSON.parse(value)
}
} catch (e) {
console.log(e)
}
}
复制文本
/**
* 复制文本
* @param {*} data
*/
export function copyText(data) {
Taro.setClipboardData({
data: data,
success: function (res) {
console.log(res);
Taro.showToast({
title: '已复制',
icon: 'success',
duration: 2000
})
// Taro.getClipboardData({
// success: function (res) {
// console.log(res.data) // data
// }
// })
}
})
}
获取高亮字符串
// 获取高亮状态的字符串
export const getHighLightArr = (str, content) => {
if (content == null) {
return ''
}
let i = content.indexOf(str)
if (str.length == 0 || content.length == 0 || i == -1) {
return ['', '', content]
}
if (i == 0) {
return ['', str, content.slice(str.length)]
} else if (i == content.length - 1 - str.length) {
return [content.slice(0, content.length - str.length - 1), str, content.slice(i + str.length)]
} else {
return [content.slice(0, i), str, content.slice(i + str.length)]
}
}
export const replaceHttp = (url) => {
if (url == '' || url == null) {
return ''
}
let newUrl = url.replace('http://', 'https://')
return newUrl
}
// 过滤枚举
// 过滤枚举
export const findName = (datalist, data) => {
if (data === null || undefined) {
return '- / -'
}
if (datalist && datalist.length > 0) {
const filterData = datalist.filter((value) => value.code === Number(data))
if (filterData && filterData.length > 0) {
return filterData[0]
} else {
return '- / -'
}
} else {
return null
}
}
// 数组去重
const uniqueArray = arr => [...new Set(arr)];
// 从url获取参数,并且转换成对象
const getParameters = URL => JSON.parse(`{"${decodeURI(URL.split("?")[1]).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"')}"}`)
//检查对象是否为空
const isEmpty = obj => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object
//检查是否为对象
const isObject = obj => !(Object.keys(obj).length === 0)
//字符串反转
const reverseString = str => str.split('').reverse().join('')
//随机生成十六进制颜色值
const randomHexColor = () => `#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0')}`
//检查当前选项卡是否在后台
const isTabActive = () => !document.hidden;
//检查元素是否处于焦点
const eleIsInFocus = el => (el.document.activeElement)
//检查设备类型
const judgeDeviceType = () => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|OperaMini/i.test(navigator.userAgent) ? 'Mobile' : 'PC';
//文字复制到剪切板
const copyText = async text => await navigator.clipboard.writeText(text)
// 返回选中的内容
const getSelectedText = () => window.getSelection().toString();
//查询某天是否为工作日
const isWeekday = (date) => date.getDay() % 6 !== 0;
//两日期之间相差的天数
const dayDiff = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000);
//检查日期是否有效
const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf());
// 计算两个日期之间的间隔
const dayDif = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000)
//查找日期位于一年中的第几天
const dayOfYear = (date) => Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);
//时间格式化
const timeFromDate = date => date.toTimeString().slice(0, 8);
//字符串首字母大小
const firstUpper = str => str.charAt(0).toUpperCase() + str.slice(1);
//随机字符串
const randomString = () => Math.random().toString(36).slice(2)
//去除字符串中的html
const striphtml = html => html(new DOMParser().parseFromString(html, 'text/html').body.textContent || '')
//判断数组是否为空
const isNotEmpty = array => Array.isArray(array) && array.length > 0
//合并两个数组
const merge = (a, b) => a.concat(b)
const mergeArr = (a, b) => [...a, ...b]
//获取一组数据的平均值
const average = (...args) => args.reduce((a, b) => a + b) / args.length
//取两个整数之间的随机值
const randomNumber = (min, max) => Math.floor(Math.random() * (max - min + 1) + min)
//指定位数的四舍五入
const roundNumber = (n, d) => Number(Math.round(n + "e" + d) + 'e-' + d)
//将RGB转化为十六机制
const rgbaToHex = (r, g, b, a) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)
//清除所以cookie
const clearCookies = document.cookie.split(';').forEach(cookie => document.cookie = cookie.replace(/^ +/, '').replace(/=.*/, `=;expires=${new Date(0).toUTCString()};path=/`));
//检测是否是黑暗模式
const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
//滚动到顶部
const goToTop = () => window.screenTop(0, 0)
//判断是否滚动到底部
const scrolledToBottom = () => document.documentElement.clientHeight + window.scrollY >= document.documentElement.scrollHeight;
//重定向到一个url
const redirectToUrl = (url) => window.location.href = url
//打开浏览器的打印页面
const showPrintDialog = () => window.print()
//随机布尔值
const randomBoolean = () => Math.random() >= 0.5
//变量交换
let a = 1, b = 2;
[a, b] = [b, a]
//获取变量的类型
const trueTypeOf = (obj) => Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();