一、节流(throttle)

用来实现阻止在短时间内重复多次触发同一个函数。主要用途:防止使用脚本循环触发网络请求的函数的恶意行为,确保请求的真实性(当然也包括其他阻止高频触发行为的应用);

实现原理图:

代码实现:

 //节流函数
function throttle(handler,wait){
var lastDate = 0;
return function(){
var newDate = new Date().getTime();
if(newDate - lastDate > wait){
handler.apply(this,arguments);
}
lastDate = newDate;
}
}

节流函数测试:

 function foo(nub){
console.log(nub);
}
var han = throttle(foo,1000); //设置节流时间为1000毫秒
for(var i = 0; i < 100; i++){
han("1");//使用for调用执行节流函数han只能第一次被触发,因为程序的执行速度是微秒级的速度
}

二、防抖

用来实现高频触发函数调用时,实际只调用最后一次函数执行。主要用途:用于可能出现高频触发DOM结构或样式修改,导致的页面高频重排重绘,严重影响页面性能,同时也导致操作的DOM闪烁抖动的情况,造成体验效果差。(也包括其他阻止高频触发的用途)

代码实现:

 //防抖函数
function antishake(handler,interval){
var lastDate = 0;
var time ;
return function(){
var self = this;
var args = arguments;
clearTimeout(time);
time = setTimeout(function(){
handler.apply(self,args);
},interval);
}
}

防抖函数测试:

 <div id="nub">0</div>
<button id="but">点我</button>
<script>
var odiv = document.getElementById("nub");
var oBut = document.getElementById("but");
oBut.onclick = antishake(fun,1000);//一秒以内的连续点击只会触发一次
var num = 0;
function fun(){
odiv.innerText = ++num;
}
</script>

最新文章

  1. Web服务器之iis,apache,tomcat三者之间的比较
  2. curl operate elasticsearch
  3. Chrome开发工具Elements面板(编辑DOM和CSS样式)详解
  4. python学习第一天
  5. Walkthrough: Arranging Controls on Windows Forms Using Snaplines
  6. rpm命令数据库修复日志
  7. hdu 1063 Exponentiation 大数
  8. oracle varchar2 和varchar 区别
  9. JVM类加载机制---类加载的过程
  10. JQuery官方学习资料(译):CSS
  11. 基于 WebGL 3D 的 HTML5 档案馆可视化管理系统
  12. 为什么Vuex内数据改变了而组件没有进行更新?
  13. 爬虫入门实例:利用requests库爬取笔趣小说网
  14. mysql引擎和事务
  15. iCOM组件(iComponent,应用或学习组件)
  16. LHC大神问的矩阵转置问题
  17. centos 6.5安装rvm 配置 Ruby开发环境
  18. centos 系统软件包管理 yum 本地yum配置 扩展源epel rpm 清除yum缓存 yum provides &quot;*/vim&quot; 第十节课
  19. 【OC底层】一个OC对象占用多少内存?
  20. ① 设计模式的艺术-01.单例(Singleton)模式

热门文章

  1. based on Greenlets (via Eventlet and Gevent) fork 孙子worker 比较
  2. jQuery的html()、text()和val()的使用和区别
  3. C++ remove remove_if erase
  4. Qt编写自定义控件27-颜色按钮面板
  5. Ubuntu+Django+uWSGI+Nginx部署Django项目
  6. 从MOV PC,PC;(或者ADDPC,PC,#4 )看ARM的三级流水线过程
  7. HANA数据自助查询
  8. shell脚本中set -e作用
  9. Fastjson反序列化漏洞
  10. 解决element-ui按需引入不了Scrollbar的问题