首页 > 其他分享 >js函数节流(Throttle)

js函数节流(Throttle)

时间:2022-08-23 18:11:58浏览次数:61  
标签:浏览器 节流 param js delay context Throttle fn

在浏览器 DOM 事件里面,有一些事件会随着用户的操作不间断触发。比如:重新调整浏览器窗口大小(resize),浏览器页面滚动(scroll),鼠标移动(mousemove),输入框监听(oninput)等。

也就是说用户在触发这些浏览器操作的时候,如果脚本里面绑定了对应的事件处理方法,这个方法就不停的触发。而当事件处理比较复杂的时候浏览器不断执行计算,从而导致浏览器性能降低甚至卡死,影响用户体验。

下面我们就针对这一情况做函数的节流处理

1.利用闭包进行改进

onSearch(e) {
  this.throttle(this.queryData, 800);
},
/** 
 * 函数的节流处理
 * @param fn  节流后处理的方法
 * @param delay  操作时间1000=1s
 */
throttle(fn, delay) {
  var timer = null;
  return function(){
    clearTimeout(timer);
    timer = setTimeout(() => {
      fn();
    }, delay);
  }
},
queryData(e) {
  console.log('1111111')
},

2.利用函数的私有变量保存tId

onSearch(e) {
  this.throttle(this.queryData, null, 800, e.detail);
},
/** 
 * 函数的节流处理
 * @param fn  节流后处理的方法
 * @param context  保存this指向,可以传null
 * @param delay  操作时间1000=1s
*/ throttle(fn, context, delay, text) {   clearTimeout(fn.tId);   fn.tId = setTimeout(() => {     fn.call(context, text);   }, delay); }, queryData(e) {   console.log('1111111') },

注意:普通页面和组件间可能存在this指向问题,所以需要传context参数

 

标签:浏览器,节流,param,js,delay,context,Throttle,fn
From: https://www.cnblogs.com/czhowe/p/16617329.html

相关文章

  • JS中的流程控制
    1.顺序结构 2.分支结构if{}if{}else{}if{}elseif{} 3.三元表达式条件表达式?表达式1(true):表达式2(false) 4.switch(值必须是全相等)switch......
  • 01-React基础(JSX, State, Refs, Props组件交互, Event, 生命周期)
    引入JS#react开发JSreact.development.js#reactdom渲染JSreact-dom.development.js#jsx语法转换JSbabel.min.js#参数传值校验JSprop-types.jsJSX语法#......
  • 记C# 通过JObject 读取 json对象(Newtonsoft.Json.Linq.JObject.this[string].get 返回
    json对象"RequestHeaders":{ "Host":"tool.kkbmtj.com", "Referer":"https://m.kkbmtj.com/ys/shortindex?origin=kktj&xcx", }代码:HeaderLogheaderLog......
  • JS基础点
    JS的特点解释型语言:不用编译直接运行类似于C和Java的语法结构动态语言:可以保存任意类型的数据基于原型的面向对象script标签js代码需要编写到script标签中......
  • package.json和package-lock.json的区别(转载)
    package.json记录当前项目所依赖模块的版本信息,更新模块时锁定模块的大版本号(版本号的第一位),不能锁定后面的小版本,package-lock.jsonpackage-lock.json是在`npminst......
  • 函数式编程与 JS 异步编程、手写 Promise
    目录函数式编程与JS异步编程、手写Promise简答题函数式编程与JS异步编程、手写Promise简答题谈谈你是如何理解JS异步编程的?EventLoop、消息队列都是做什么的?......
  • SpreadJS
    //varspread=GC.Spread.Sheets.findControl(document.getElementById('ss'));//获取spread对象//spread.options.tabStripVisible=false......
  • Vue项目跑不起来 Uncaught SyntaxError: The requested module '/node_modules/.vit
    一:问题介绍vue项目运行跑不起来提示Browserslist:caniuse-liteisoutdated.Pleaserunnpxbrowserslist@latest--update-db遇到这个情况首先想到重新安装依赖重启项目......
  • AJAX概念、AJAX实现_原生js方式1
    AJAX概念1.概念︰ASynchronousJavascriptAndXML异步的Javascript和XAL1.异步和同步:客户端和服务器端相互通信的基础上*客户端必须等待服务器端的响应。在等待的期......
  • fastjson反序列化CNVD-2019-22238
    漏洞原理:fastjson是阿里的开源json解析库,用来将json字符串反序列化为JavaBean类,或者将JavaBean类序列化为json字符串。在java审计中,需要关注的关键字:JSON.parse,......