<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="text" id="input" />
</body>
<script>
//防抖:刚开始也是输入后等一定时间后触发
// function debounce(fn, delay) {
// let timer = null;
// return (args) => { //形成闭包这样可以放置执行完毕后,变量回收
// if (timer) {
// clearTimeout(timer)
// }
// timer = setTimeout(() => {
// fn(args);
// }, delay);
// }
// }
//第一次立即触发
// function debounce(fn, delay, immediate) {
// let timer = null;
// return (args) => { //形成闭包这样可以放置执行完毕后,变量回收
// if (timer) {
// clearTimeout(timer)
// }
// if (immediate) {
// immediate = false;
// fn(args);
// }
// timer = setTimeout(() => {
// immediate = true;
// fn(args);
// }, delay);
// }
// }
//节流:连续触发函数时,在规定单位时间内只会触发一次。
function throttle(fn, delay) {
let timer; // 定时器
return function (args) {
// 如果timer存在,说明函数还未该执行 也就是距离上次函数执行未间隔指定的时间
if (timer) return;
// 如果函数执行之后还有函数还在触发,再延迟执行。
timer = setTimeout((...args) => {
// 当函数执行时,让timer为null。
timer = null;
fn(args);
}, delay);
}
}
let handler = debounce(handleSendPhone, 500, true);
let ipt = document.getElementById('input');
ipt.addEventListener('input', function () {
let val = this.value;
handler(val)
});
function handleSendPhone(val) {
console.log(val)
}
</script>
</html>