<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width: 400px;
height: 400px;
background-color:red;
}
</style>
</head>
<body>
<div id="div1"></div>
<!-- 防抖节流封装的js包 -->
<script type="text/javascript" src="./lodash.js"></script>
<script type="text/javascript">
let div1=document.getElementById("div1")
function func1 (argument) {
console.log('aaa')
}
// 使用lodash包实现的防抖和节流
// 防抖:_.debounce(function(){需要设置防抖的函数},延迟时间)
// div1.οnclick=_.debounce(func,1000)
// 节流:_.throttle(function(){需要设置防抖的函数},延迟时间)
// div1.οnclick=_.throttle(func,1000)
// 手写防抖和节流
// 防抖:
function fangdou(func,timeout){
let a;
return function(){
if(a)clearTimeout(a)
a=setTimeout(()=>{
func()
},timeout)
}
}
// div1.οnclick=fangdou(func1,1000)
// div1.onclick接收的是一个函数,然后回调这个函数,所以fangdou的返回值必须是一个函数
// 节流
function jieliu(func,timeout){
let a=true;
return function(){
if(a){
a=false
setTimeout(()=>{
a=true
func()
}, timeout)
}
}
}
div1.onclick=jieliu(func1,1000)
/*
节流和防抖的区别:
1、防抖(debounce):触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间
举例:就好像在百度搜索时,每次输入之后都有联想词弹出,这个控制联想词的方法就不可能是输入框内容一改变就触发的,他一定是当你结束输入一段时间之后才会触发。
2.节流(thorttle):高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执行频率
举例:预定一个函数只有在大于等于执行周期时才执行,周期内调用不执行。就好像你在淘宝抢购某一件限量热卖商品时,你不断点刷新点购买,可是总有一段时间你点上是没有效果,这里就用到了节流,就是怕点的太快导致系统出现bug。
3、区别:防抖动是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行。
节流和防抖的主要应用场景:
*/
</script>
</body>
</html>
js节流与防抖
最新推荐文章于 2025-03-03 13:41:54 发布