节流:规定时间内,只触发一次。
<!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>
h3 {
height: 400px;
}
</style>
</head>
<body>
<h3>hah</h3>
<h3>hah</h3>
<h3>hah</h3>
<h3>hah</h3>
<h3>hah</h3>
<script>
function jieliu(fun, delay) { //节流:规定时间内只运行一次
var temp = true; //判断后面定时器是否运行的关键索引
return function () {
if (!temp) { //if语句的意义:如果temp为false,则取消在定时器延迟时间内再次触发所引发的函数运行
return false; //跳出程序
}
temp = false; //若前面的if语句没有运行,则运行这个,防止定时器延迟时间内再次触发所引发的函数运行,和if语句相呼应
setTimeout(function () {
//定时器
fun();
temp = true; //定时器运行完成后,要将之前temp=false改成true,方便下一个定时器运行
}, delay);
}
}
window.onscroll = jieliu(getscroll, 1000);//第一个参数函数名不加(),滚动事件
function getscroll() { //打印网页向下滚动距离的函数
var sn = document.documentElement.scrollTop;
console.log(sn);
}
</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>
h3 {
height: 400px;
}
</style>
</head>
<body>
<h3>hah</h3>
<h3>hah</h3>
<h3>hah</h3>
<h3>hah</h3>
<h3>hah</h3>
<script>
function fangdou(fun, delay) {//防抖
var fun1 = null;//创建一个标记存放定时器返回值
return function () {
if (fun1) {//这个if是防抖的关键
clearTimeout(fun1);//每当用户触发事件,把前一个定时器清除掉
}
fun1 = setTimeout(fun, delay);//再建一个新的定时器
}
}
window.onscroll = fangdou(getscroll, 200);//不加括号
function getscroll() {
var temp = document.documentElement.scrollTop;
console.log(temp);
}
</script>
</body>
</html>
最后
以上就是单薄饼干最近收集整理的关于js防抖和节流的区别以及代码实列的全部内容,更多相关js防抖和节流内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复