mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
83 lines
2.0 KiB
JavaScript
83 lines
2.0 KiB
JavaScript
// https://github.com/component/debounce/
|
|
|
|
/**
|
|
* 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
|
|
*/
|
|
export function debounce(func, wait, immediate)
|
|
{
|
|
var timeout, args, context, timestamp, result;
|
|
if (null == wait) wait = 100;
|
|
|
|
function later()
|
|
{
|
|
var last = Date.now() - timestamp;
|
|
|
|
if (last < wait && last >= 0)
|
|
{
|
|
timeout = setTimeout(later, wait - last);
|
|
} else
|
|
{
|
|
timeout = null;
|
|
if (!immediate)
|
|
{
|
|
result = func.apply(context, args);
|
|
context = args = null;
|
|
}
|
|
}
|
|
};
|
|
|
|
var debounced = function ()
|
|
{
|
|
context = this;
|
|
args = arguments;
|
|
timestamp = Date.now();
|
|
var callNow = immediate && !timeout;
|
|
if (!timeout) timeout = setTimeout(later, wait);
|
|
if (callNow)
|
|
{
|
|
result = func.apply(context, args);
|
|
context = args = null;
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
debounced.clear = function ()
|
|
{
|
|
if (timeout)
|
|
{
|
|
clearTimeout(timeout);
|
|
timeout = null;
|
|
}
|
|
};
|
|
|
|
debounced.flush = function ()
|
|
{
|
|
if (timeout)
|
|
{
|
|
result = func.apply(context, args);
|
|
context = args = null;
|
|
|
|
clearTimeout(timeout);
|
|
timeout = null;
|
|
}
|
|
};
|
|
|
|
return debounced;
|
|
};
|
|
export default {
|
|
export: {
|
|
debounce,
|
|
},
|
|
}; |