防抖与节流
利用闭包封装一个防抖函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="text">
<script>
// 防抖: 只执行最后一次(回城)
let ipt = document.querySelector("input");
// let t = null;
ipt.oninput = debounce(function () {
// console.log("Goenitz")
console.log(this.value);
}, 500);
// 利用闭包封装防抖函数
function debounce(fn, delay) {
let t = null;// 闭包
return function () {
if (t !== null) {
clearTimeout(t);
}
t = setTimeout(() => {
console.log(this) // 指向input
fn.call(this);// 利用call将实际的this指向ipt组件
}, delay)
}
}
</script>
</body>
</html>
利用闭包封装节流函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style type="text/css">
body {
height: 2000px;
}
</style>
</head>
<body>
<script>
// 节流:控制执行次数
window.onscroll = throttle(function () {
console.log(111)
}, 500)
// 利用闭包封装节流方法
function throttle(fn, delay) {
let flag = true;
return function () {
if (flag) {
setTimeout(() => {
fn.call(this) // 利用call将实际的this指向
flag = true
}, delay)
}
flag = false
}
}
</script>
</body>
</html>