在编写前端的过程中,经常会监听事件并执行任务,我在这抛出2个比较常见的场景:

1、输入关键字搜索
如果你监听input的chage事件,会有一个问题,在使用中文输入法时,你输入的几个拼音字母都会被触发
我作个实验,输入“毛”,这个change事件被触发了4次,拿到的值依次为 m,ma,mao,毛,这无疑会增加后端的负荷

2、地图刷新
我们需要在用户移动地图后,实时去加载当前区域内的覆盖物,在这个模式下,如果用户在短时间内多次操作地图,显然中间有一些请求是可以忽略掉的

解决办法,我们需要给任务一个缓冲区,比如定个时间,1秒内,无论方法被调用了多少次,都只会执行最后一次,忽略掉前面无效的部分。

话不多说,上代码:

/**
* [delayExcute 延时执行,在指定时间内只执行一次]
* @param {String} taskId [任务标识,区分不同任务]
* @param {Function} callback [要执行的过程]
* @param {Number} buffer [毫秒 默认500]
*/
var delayExcute = function(taskId,callback, buffer) { taskId='delayExcute_'+taskId;
buffer=buffer||500;
var timedCount = function() { clearTimeout(window[taskId]) window[taskId] = setTimeout(function() {
callback();
}, buffer)
} timedCount(); } //假如用var来申明i,会有惊喜,你可以试试
for(let i=0;i<5;i++){
delayExcute('a',function(){
console.log('任务A,第'+i+'次')
},500)
} for(let i=0;i<5;i++){
delayExcute('b',function(){
console.log('任务B,第'+i+'次')
},500)
}

运行结果:

最新文章

  1. [LeetCode] Sort Characters By Frequency 根据字符出现频率排序
  2. C语言获取时间
  3. selenium support
  4. Web 安全:隐藏服务版本号
  5. 【转载】CSS 伪类-:before和:after
  6. sgu546 Ternary Password
  7. jQuery toggle方法的一个奇怪表现。
  8. 函数WideCharToMultiByte() 详解
  9. openerp 经典收藏 Openerp开发进销存系统完毕总结(转载)
  10. A Guide to the Multiboot Process
  11. jquery easyui Accordion的使用
  12. CodeFroces--Good Bye 2016-B--New Year and North Pole(水题-模拟)
  13. style控制打印分页
  14. Python 一等函数
  15. cygwin pip安装
  16. Android&amp;Java面试题大全—金九银十面试必备
  17. centos6.5安装zabbix3.2
  18. python学习 day09打卡 初识函数
  19. CAlayer一
  20. js 判断一个元素是否在滚动的可视区域内,不在就固定到可视区域的上方。

热门文章

  1. (十九)oracle 基础使用以及sql语句基础
  2. 禁止CSRF校验实例
  3. MySQL函数使用
  4. UI界面测试
  5. Docker镜像的构建(五)
  6. 【miscellaneous】视频浓缩摘要简介
  7. iframe里访问父级里的方法属性
  8. 【leetcode算法-简单】27. 移除元素
  9. SQL常用语句简单
  10. K8S从入门到放弃系列-(4)kubernetes集群之kubectl命令行工具部署