1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| /**
| * 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.
| *
| * @param {function} func
| * @param {number} wait
| * @param {boolean} immediate
| */
| export function debounce(func, wait, immediate = false) {
| let timeout;
|
| return function (...args) {
| const later = () => {
| timeout = null;
| if (!immediate) {
| func.apply(this, args);
| }
| };
| const callNow = immediate && !timeout;
|
| clearTimeout(timeout);
| timeout = setTimeout(later, wait);
| if (callNow) func.apply(this, args);
| };
| }
|
|