Files
myprojplanet_vite/src/common/debounce.ts

60 lines
1.6 KiB
TypeScript
Raw Normal View History

2021-08-31 18:09:59 +02:00
/**
* Returns a function, that, as long as it continues to be invoked, will not
* be triggered. The function will be called after it stops being called for
* N milliseconds. If `immediate` is passed, trigger the function on the
* leading edge, instead of the trailing. The function also has a property 'clear'
* that is a function which will clear the timer to prevent previously scheduled executions.
*
* @source underscore.js
* @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/
* @param {Function} function to wrap
* @param {Number} timeout in ms (`100`)
* @param {Boolean} whether to execute at the beginning (`false`)
* @api public
*/
2021-09-16 21:08:02 +02:00
// eslint-disable-next-line @typescript-eslint/ban-types
2021-08-31 18:09:59 +02:00
export function Debounce(func: Function, wait?: number, immediate?: boolean) {
// @ts-ignore
let timeout: any,
args: any,
context: any,
timestamp: any,
result: any
if (wait == null) wait = 100
function later() {
const last = Date.now() - timestamp
// @ts-ignore
if (last < wait && last > 0) {
// @ts-ignore
timeout = setTimeout(later, wait - last)
} else {
timeout = null
if (!immediate) {
result = func.apply(context, args)
context = args == null
}
}
}
2022-05-05 23:56:23 +02:00
/*return function a2() {
2021-08-31 18:09:59 +02:00
// @ts-ignore
context = this
// @ts-ignore
// args = arguments
timestamp = Date.now()
const callNow = immediate && !timeout
if (!timeout) {
timeout = setTimeout(later, wait)
}
if (callNow) {
result = func.apply(context, args)
context = args == null
}
return result
2022-05-05 23:56:23 +02:00
}*/
2021-08-31 18:09:59 +02:00
}