JavaScript节流与防抖函数封装
js节流与防抖函数封装
常见应用场景:
- window的 resize 和 scroll 事件;
- 文字输入时的 keyup 事件;
- 元素拖拽、移动时的 mousemove 事件;
防抖
- 定义:多次触发事件后,事件处理函数只执行一次,并且是在触发操作结束时执行
- 原理:对处理函数进行延时操作,若设定的延时到来之前,再次触发事件,则清除上一次的延时操作定时器,重新定时。
- 经典案例:百度输入内容自动搜索
/**
*防抖函数
*@param fn 事件触发的操作
*@param delay 多少毫秒内连续触发事件,不会执行
*@returns {Function}
*/
function debounce(fn,delay){
let timer = null;
return function(){
let self = this,
args = arguments;
timer && clearTimeout(timer);
timer = setTimeout(function(){
fn.apply(self,args);
},delay);
}
}
window.onscroll = debounce(function(){
let scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
console.log(scrollTop)
},200)
节流
- 定义:触发函数事件后,短时间间隔内无法连续调用,只有上一次函数执行后,过了规定的时间间隔,才能进行下一次的函数调用。
- 原理:对处理函数进行延时操作,通过设定时间片,控制事件函数间断性的触发。
- 经典案例:按钮可以多次点击发送请求问题
/**
* 节流函数
* @param fn 事件触发的操作
* @param mustDelay 间隔多少毫秒需要触发一次事件
*/
function throttle(fn,mustDelay){
let timer,
start = 0;
return function (){
let now = new Date().getTime(),
self = this,
args = arguments;
if(now > start + mustDelay){
fn.apply(self,args)
start = now;
}
}
}
window.onscroll =throttle(function(){
let scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
console.log(scrollTop)
},200)
JavaScript节流与防抖函数封装的更多相关文章
- js节流与防抖函数封装
js节流与防抖函数封装 常见应用场景: window的 resize 和 scroll 事件: 文字输入时的 keyup 事件: 元素拖拽.移动时的 mousemove 事件: 防抖 定义:多次触发事 ...
- [JavaScript] 节流(throttle)-防抖(debounce) 不懵圈指北
网易云课堂 > 微专业 > 前端高级开发工程师 01.前端高级-JavaScript进阶 > 3.函数式编程 Underscore源码分析 > 3.4.3 throttle 与 ...
- javaScript 节流与防抖
首先 我们要知道 节流与防抖可以干什么. 优化网络请求性能——节流 优化页面请求性能——防抖 举两个简单的小例子: 节流: 例如 有些购物页面,会有一些让你抢购的活动,到点的时候,需要你快速的点某个按 ...
- JS节流和防抖函数
一. 实现一个节流函数 // 思路:在规定时间内只触发一次function throttle (fn, delay) { // 利用闭包保存时间 let prev = Date.now() re ...
- javaScript节流与防抖
一.节流(throttle) 用来实现阻止在短时间内重复多次触发同一个函数.主要用途:防止使用脚本循环触发网络请求的函数的恶意行为,确保请求的真实性(当然也包括其他阻止高频触发行为的应用): 实现原理 ...
- javascript中常见的函数封装 :判断是否是手机,判断是否是微信,获取url地址?后面的具体参数值,毫秒格式化时间,手机端px、rem尺寸转换等
// 判断是否是手机function plat_is_mobile(){ var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad ...
- [手写系列] Spirit带你实现防抖函数和节流函数
前言 防抖函数和节流函数,无论是写业务的时候还是面试的时候,想必大家已经听过很多次了吧.但是大家在用到的时候,有了解过他们之间的区别嘛,他们是如何实现的呢?还是说只是简单的调用下像lodash和und ...
- 当Flutter遇到节流与防抖
相信web前端的开发者都或多或少的遇到过节流与防抖的问题.函数节流和函数防抖,两者都是优化执行代码效率的一种手段.在一定时间内,代码执行的次数不一定是越多越好.相反,频繁的触发或者执行代码,会造成大量 ...
- [JavaScript] 函数节流(throttle)和函数防抖(debounce)
js 的函数节流(throttle)和函数防抖(debounce)概述 函数防抖(debounce) 一个事件频繁触发,但是我们不想让他触发的这么频繁,于是我们就设置一个定时器让这个事件在 xxx 秒 ...
随机推荐
- Filder配置及使用教程
https://www.cnblogs.com/woaixuexi9999/p/9247705.html
- 基于JS实现归并排序算法
/*********************************************JS归并排序************************************************ ...
- html恶搞之无限弹窗
啦啦啦啦啦 恶搞别人吗? 把下面代码做成html文件发给别人,用浏览器打开就可以看见效果了 <!DOCTYPE html> <html><head><meta ...
- 团队第一次作业(By七个小矮人)
一.团队简介 1.团队名称:七个小矮人 2.团队成员列表 201731024137 马驰(队长) 201731021227 于丁 201731024114 杨汶桐 201731024125 李朋珂 2 ...
- c#数字图像处理(九)图像镜像
private void mirror_Click(object sender, EventArgs e) { if (curBitmap!=null) { mirror mirForm = new ...
- Spring整合Spring-data-jpa项目所遇到的坑
1.异常信息: 错误原因:缺少spring-aop包 解决: <dependency> <groupId>org.springframework</groupId> ...
- AcWing 785.快速排序
AcWing 785.快速排序题解 题目描述 给定你一个长度为n的整数数列. 请你使用快速排序对这个数列按照从小到大进行排序. 并将排好序的数列按顺序输出. 输入格式 输入共两行,第一行包含整数 n. ...
- vmware安装kvm虚拟机
1. 概述 本篇博客主要使用运行在win10专业版上的vmware workstation 15 pro虚拟化软件,安装centos7.7最小化系统,并在centos7上安装kvm虚拟机,实现快速创建 ...
- 安装MySQL出现[Errno 256] No more mirrors to try
今天安装数据库时出现错误提示,如下图: 解决办法如下: yum clean all #清除仓库缓存 yum makecache #将服务器包信息缓存到本地 然后再执行数据库安装指令 yum insta ...
- 手把手教你用C#做疫情传播仿真
手把手教你用C#做疫情传播仿真 在上篇文章中,我介绍了用C#做的疫情传播仿真程序的使用和配置,演示了其运行效果,但没有着重讲其中的代码. 今天我将抽丝剥茧,手把手分析程序的架构,以及妙趣横生的细节. ...