js中的防抖和节流

js中的防抖和节流

1、防抖

1.1 什么是防抖

简单来说就是一个事件被频繁触发,但是不希望它一直做某种操作,而只是在我完成这个事件的时候才做这样一个操作。也就是说在我快速的触发事件的时候,我的下一次事件触发会取消上一次的事件

js中的防抖和节流

1.2 应用场景

1、搜索输入框,每输入一次实时的出现一个菜单,用户希望输入完了值之后才有菜单,不希望每输入一个字母就有一个菜单

1.3 代码展示

如下代码需求:
	1、当我在500秒以内输入值算作没有输入完成
	2、没有输入完成的话不能在控制台打印
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>防抖操作</title>
	</head>
	<body>
		<input id="test" />
	</body>
	<script>
		window.onload = function() {
			let test = document.getElementById("test")
			let timer = null
			
			function throttle() {
				clearTimeout(timer) 
				timer = setTimeout(function() {
					yewu()
				},500)
			} 
			test.onkeydown = function(ev) {
				throttle()
			}
			
			function yewu() {
				console.log(test.value)
			}
			
		}
	</script>
</html>

2、节流

2.1 什么是节流

节流就是在某一段时间内,只执行一次操作,节省资源

js中的防抖和节流

2.2应用场景

1、懒加载计算滚动条的位置,不必每次都要去计算
2、疯狂触发某个事件时,某个间隔中,只运行一次

2.3代码实现

需求:
	1、鼠标移动的时候,方块也移动
	2、减少鼠标移动时,事件的执行次数
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>节流操作</title>
		<style>
			#test {
				width: 100px;
				height: 100px;
				background-color: #FF0000;
			}
		</style>
	</head>
	<body>
		<div id="test"></div>
	</body>
	<script>
	
		let test = document.getElementById("test")
		let timer = null
		document.onmousemove = function(ev) {
			if(timer) return 
			timer = setTimeout(function() {
				moveTest(ev.pageX,ev.pageY)
				timer = null
			},200)
		}
		
		function moveTest(X,Y) {
			console.log("111")
			test.style.transform = "translate("+X+"px,"+Y+"px)"
		}
		
	</script>
</html>

3、防抖和节流的区别

1、防抖只执行最后一次操作。
2、节流是在某一段时间内只执行一次操作,这个操作往往是第一次。
上一篇:linux服务器HTTP协议内容、实现程序代码


下一篇:菜刀数据包分析--详解一句话木马