mirror of
https://github.com/zclzone/vue-naive-admin.git
synced 2025-05-01 14:49:00 +08:00
77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
import dayjs from 'dayjs'
|
||
|
||
/**
|
||
* @desc 格式化时间
|
||
* @param {(Object|string|number)} time
|
||
* @param {string} format
|
||
* @returns {string | null}
|
||
*/
|
||
export function formatDateTime(time = undefined, format = 'YYYY-MM-DD HH:mm:ss') {
|
||
return dayjs(time).format(format)
|
||
}
|
||
|
||
export function formatDate(date = undefined, format = 'YYYY-MM-DD') {
|
||
return formatDateTime(date, format)
|
||
}
|
||
|
||
/**
|
||
* @desc 函数节流
|
||
* @param {Function} fn
|
||
* @param {Number} wait
|
||
* @returns {Function}
|
||
*/
|
||
export function throttle(fn, wait) {
|
||
var context, args
|
||
var previous = 0
|
||
|
||
return function () {
|
||
var now = +new Date()
|
||
context = this
|
||
args = arguments
|
||
if (now - previous > wait) {
|
||
fn.apply(context, args)
|
||
previous = now
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @desc 函数防抖
|
||
* @param {Function} func
|
||
* @param {number} wait
|
||
* @param {boolean} immediate
|
||
* @return {*}
|
||
*/
|
||
export function debounce(method, wait, immediate) {
|
||
let timeout
|
||
return function (...args) {
|
||
let context = this
|
||
if (timeout) {
|
||
clearTimeout(timeout)
|
||
}
|
||
// 立即执行需要两个条件,一是immediate为true,二是timeout未被赋值或被置为null
|
||
if (immediate) {
|
||
/**
|
||
* 如果定时器不存在,则立即执行,并设置一个定时器,wait毫秒后将定时器置为null
|
||
* 这样确保立即执行后wait毫秒内不会被再次触发
|
||
*/
|
||
let callNow = !timeout
|
||
timeout = setTimeout(() => {
|
||
timeout = null
|
||
}, wait)
|
||
if (callNow) {
|
||
method.apply(context, args)
|
||
}
|
||
} else {
|
||
// 如果immediate为false,则函数wait毫秒后执行
|
||
timeout = setTimeout(() => {
|
||
/**
|
||
* args是一个类数组对象,所以使用fn.apply
|
||
* 也可写作method.call(context, ...args)
|
||
*/
|
||
method.apply(context, args)
|
||
}, wait)
|
||
}
|
||
}
|
||
}
|