JavaScript 防抖节流

一、防抖

           定义:指一定时间内,同一事件多次触发时,只执行最后一次。

           看了定义很多新手同鞋可能还是一头雾水,防抖,到底防的是个啥?很好理解,其实就是防的事件的高频触发,不限时间,要是一直以高频率触发同一事件,那就会进入我们的防抖设置,怎么实现,看下面例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<style>
	.btn{
	  width: 120px;
	  height: 40px;
	  border: 1px solid skyblue;
	  background: #f2f3f8;
	  border-radius: 3px;
	  margin: 50px 0 0 50px;
	  cursor: pointer;
	  transition: 300ms;
	  line-height: 40px;
	  text-align: center;
	}
	.btn:hover{
	  background: #ccc;
	  border-color: #fff;
	}
	.showNum{
	  width: 120px;
	  height: 40px;
	  border: 1px solid #000;
	  margin-left: 50px;
	  line-height: 40px;
	  text-align: center;
	  color: green;
	  font-size: 20px;
	}
	</style>
	<body>
		<p class="btn" >add</p>
		<p class="showNum" >0</p>
	</body>
</html>
<script>
let btn = document.getElementsByClassName('btn')[0]
let showNum = document.getElementsByClassName('showNum')[0]

let addNum = 0
let timer = ''
btn.addEventListener('click', function(e) {
  clearTimeout(timer)
  timer = setTimeout(() => {
    addNum++
    showNum.innerHTML = addNum
  }, 300) // 300ms内如果又点击了按钮,就会被认定为高频操作
})

</script>

           这里就不截效果图了,可以直接复制上面的代码自己去运行亲自己试试

           防抖一般常用场景:

           1、搜索框搜索输入;

           2、手机号、邮箱号等输入检测;

           3、窗口大小的调整;

二、节流

            定义:指在一定时间内,只能触发一次事件。

            这里也许很多新手同鞋会搞混,这看起来都差不多嘛,其实不然啊,注意仔细看定义。那么我们还是以上面的代码修改下为例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<style>
	.btn{
	  width: 120px;
	  height: 40px;
	  border: 1px solid skyblue;
	  background: #f2f3f8;
	  border-radius: 3px;
	  margin: 50px 0 0 50px;
	  cursor: pointer;
	  transition: 300ms;
	  line-height: 40px;
	  text-align: center;
	}
	.btn:hover{
	  background: #ccc;
	  border-color: #fff;
	}
	.showNum{
	  width: 120px;
	  height: 40px;
	  border: 1px solid #000;
	  margin-left: 50px;
	  line-height: 40px;
	  text-align: center;
	  color: green;
	  font-size: 20px;
	}
	</style>
	<body>
		<p class="btn" >add</p>
		<p class="showNum" >0</p>
	</body>
</html>
<script>
let btn = document.getElementsByClassName('btn')[0]
let showNum = document.getElementsByClassName('showNum')[0]

let addNum = 0
let isclick = false
let timer = ''
btn.addEventListener('click', function(e) {
	if (timer !== '') return
    timer = setTimeout(() => {
		addNum++
		showNum.innerHTML = addNum
		isclick = true
		timer = ''
    }, 2000) // 2秒内只允许触发一次事件
	isclick = false
})

</script>

           同上,直接复制代码去运行试效果,当然,写法多样化,还要靠自己探索

           节流一般常用场景:

            1、阻止用户同一条件连击事件造成系统不必要的开支;

            2、滚动条监听事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中的防抖节流是为了控制函数的执行频率,以提高性能和优化用户体验。 防抖(debounce)是指在一定的时间间隔内,只执行最后一次操作。引用提供了一个自定义的防抖函数示例。该函数接受两个参数:待执行的函数和延迟时间。在函数调用时,如果在延迟时间内再次触发了函数调用,则会清除之前的定时器,重新设置一个新的定时器,以延迟函数的执行。 节流(throttle)是指在一定的时间间隔内,限制函数的执行频率。引用和提供了两个不同的节流函数示例。这些节流函数都可以指定一个时间间隔,只有在这个时间间隔内函数没有被执行过才能继续执行。其中,引用实现了一个基于定时器的节流函数,而引用则是一个基础版的节流函数,使用了时间戳来判断是否达到执行条件。 需要注意的是,防抖节流可以根据具体的需求和场景来选择使用,以达到更好的效果。防抖适用于需要等待用户停止操作后才执行的场景,而节流适用于需要限制函数执行频率的场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [JavaScript 防抖节流的实现](https://blog.csdn.net/weixin_43853746/article/details/122654312)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【JavaScript防抖(debounce)、节流(throttling)](https://blog.csdn.net/qq_46658751/article/details/123386755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值