js函数的节流和防抖
js函数的节流和防抖
用户浏览页面时会不可避免的触发一些高频度触发事件(例如页面 scroll ,屏幕
resize,监听用户输入等),这些事件会频繁触发浏览器的重拍(reflow)和重绘(repaint)这会严重耗费浏览器性能,造成页面
卡顿。
举几个例子:比如说我们在滚动事件中要做一个复杂的计算,或者做一个按钮的防二次点击操作的需求,这些需求都会在频繁的事件
回调中做复杂计算,很有可能导致页面卡顿,这时候我们可以将多次计算合并为一次计算,只在一个精确点做操作。这些事可以利用
函数的防抖来实现
函数的防抖,就是可以让这个函数每次触发的时间间隔小于wait,防抖的情况下就是假设用户一直触发我这个函数,这个函数只会调用一次,也就是在最后一次来进行调用,下面是一个简单的防抖函数代码实现
//func是你要绑定防抖操作的函数,wait是你想要这个函数多少ms之内不能连续触发,也就是假如你设置了100ms后触发,那这个函数在100ms之内如果又执行了就不会触发,直到超过100ms后这个函数才会执行
function debounce(func, wait) {
// 定时器变量
var timer
return function() {
// 每次触发绑定的函数之前先清除定时器
clearTimeout(timer)
// 指定 xx ms 后触发
timer = setTimeout(func, wait)
}
}
// 实际想绑定在 scroll 事件上的 handler
function realFunc(){
console.log("success ")
}
// 采用防抖动
window.addEventListener('scroll',debounce(realFunc,500))
假如说有现在这样一个需求,我们需要在滚动的时候实时的console.log(0),你懂得,在一次滚动过程中函数的执行频率特别快
,如果这个函数有更为复杂的方法,比如操作dom或者其他交互,会严重影响性能。这个时候我们就需要做一个节流的操作来减
少这个函数的调用频率
函数节流,就是将多次执行变成每隔一段固定的时间执行一次,会大大提高性能,比如我们可以设置一个高频率事件每隔100ms执行一次,这样性能就会得到很大的优化,下面是一个简单的节流函数的代码实现
//mustRunTime就是你想要设置的多少ms执行一次
function throttle(func, wait, mustRunTime) {
var timer,
startTime = new Date();
return function() {
var _this = this,
args = arguments,
curTime = new Date();
clearTimeout(timer);
// 如果达到了规定的触发时间间隔,就触发这个func
if(curTime - startTime >= mustRunTime){
func.apply(_this,args);
startTime = curTime;
// 没达到触发间隔,重新设定定时器
}else{
timer = setTimeout(func, wait);
}
};
};
function realFunc(){
console.log("success");
}
// 采用了节流函数
window.addEventListener('scroll',throttle(realFunc,500,1000));
以上是本人对js函数节流和防抖的一些理解,希望对你能有所帮助~~~
js函数的节流和防抖的更多相关文章
- js函数的节流与防抖
一.防抖&节流 在前端开发中有一部分用户行为会频繁的触发事件执行,而对于DOM的操作.资源加载等耗费性能的处理,很可能会导致界面卡顿,甚至浏览器奔溃.函数的节流与防抖就是为了解决类似需求而产生 ...
- js 函数节流和防抖
js 函数节流和防抖 throttle 节流 事件触发到结束后只执行一次. 应用场景 触发mousemove事件的时候, 如鼠标移动. 触发keyup事件的情况, 如搜索. 触发scroll事件的时候 ...
- js 函数的防抖(debounce)与节流(throttle) 带 插件完整解析版 [helpers.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 函数防抖与节流是做什么的?下面进行通俗的讲解. 本文借鉴:h ...
- JS奇淫巧技:防抖函数与节流函数
应用场景 实际工作中,我们经常性的会通过监听某些事件完成对应的需求,比如: 通过监听 scroll 事件,检测滚动位置,根据滚动位置显示返回顶部按钮 通过监听 resize 事件,对某些自适应页面调整 ...
- JS 函数节流与防抖
前言 事件的触发权很多时候属于用户,可能会出现下列问题: 向后台发送数据,用户频繁触发,对服务器造成压力: 一些浏览器事件,如window.onresize,window.mousemove等,触发的 ...
- js实现防抖函数和节流函数
防抖函数(debounce) 含义:防抖函数指的是在特定的时间内没有再次触发,才得以进行接下来的函数运行: 用途:当window.onresize不断的调整大小的时候,为了避免不断的重排与重绘,可以用 ...
- JS定时器实现函数节流和防抖 -简单实现对比 -适用地方
如题 (总结要点) 防止重复点击! 最近项目中遇见这个"函数抖动"的问题!快速点击前端xx按钮,造成数据多次加载进页面里,正常只显示10条数据,结果显示了20条数据,异常! 出现原 ...
- js节流与防抖函数封装
js节流与防抖函数封装 常见应用场景: window的 resize 和 scroll 事件: 文字输入时的 keyup 事件: 元素拖拽.移动时的 mousemove 事件: 防抖 定义:多次触发事 ...
- JavaScript节流与防抖函数封装
js节流与防抖函数封装 常见应用场景: window的 resize 和 scroll 事件: 文字输入时的 keyup 事件: 元素拖拽.移动时的 mousemove 事件: 防抖 定义:多次触发事 ...
随机推荐
- asp.net学习视频大全(共800集)
今天在网上找asp.net学习视频时,发现了一些好的学习资源,记录一下供大家学习. 资料名称 下载地址 <ASP.NET4.0从入门到精通>随书教学视频 http://down.51ct ...
- 01.IDEA常用快捷键
[1.查找] 当前窗口基本查找 ----------- Ctrl + F 返回上次浏览的位置 ----------- Ctrl + Alt + Left 查找类 ----------- Ctrl + ...
- python str、int、dict
一.str print(dir(int))#['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', ...
- 详解Struts1.x的运行机制及命名规则
Struts1.x 调用一个action的大致流程: 1)首先前端发送 *.do的一个action请求(通过点击表单提交按钮,js 事件等): 2)web.xml 文件通过 *.do 找到 Actio ...
- 避免Autoclose和Autoshrink选项
避免Autoclose和Autoshrink选项发布日期:2001年12月18日 问题:我在Microsoft SQL Server 2000资源工具包中读到了一个用于就应当避免使用的选项对所有数据库 ...
- ubuntu 火狐浏览器中常规方法安装flashplayer的问题
之前在网上看到很多朋友介绍了许多如何在ubuntu安装flashplayer 的方法!但是我的操作系统不知怎么的就是不能成功的安装!使我十分的苦恼!但是在我纲要邪气的时候再网上又看到一位朋友的解决方案 ...
- aws查看官方centos镜像imageid
aws ec2 describe-images --owners aws-marketplace --filters Name=product-code,Values=aw0evgkw8e5c1q41 ...
- python 正则表达式 re(邮箱匹配为例)
import rere.match(pat,string)re.compile()re.sub(pat,repl,string)re.findall(pat,text)一般字符:. 匹配任意除换行符& ...
- git相关操作(githug)
Level 15 restructure 关卡描述 你添加了一些文件到你的仓库,但现在知道你的项目需要进行调整.创建一个新的文件夹命名为“src”,使用git将所有的".html" ...
- python入门1 python手动编译py_compile,compileall
python运行之后会自动生产pyc文件,也可以手动编译生成pyc文件.代码如下: #coding:utf-8 """ 2018-11-03 dinghanhua 手动编 ...