javaScript节流与防抖
2024-09-05 06:18:43
一、节流(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>
最新文章
- Web服务器之iis,apache,tomcat三者之间的比较
- curl operate elasticsearch
- Chrome开发工具Elements面板(编辑DOM和CSS样式)详解
- python学习第一天
- Walkthrough: Arranging Controls on Windows Forms Using Snaplines
- rpm命令数据库修复日志
- hdu 1063 Exponentiation 大数
- oracle varchar2 和varchar 区别
- JVM类加载机制---类加载的过程
- JQuery官方学习资料(译):CSS
- 基于 WebGL 3D 的 HTML5 档案馆可视化管理系统
- 为什么Vuex内数据改变了而组件没有进行更新?
- 爬虫入门实例:利用requests库爬取笔趣小说网
- mysql引擎和事务
- iCOM组件(iComponent,应用或学习组件)
- LHC大神问的矩阵转置问题
- centos 6.5安装rvm 配置 Ruby开发环境
- centos 系统软件包管理 yum 本地yum配置 扩展源epel rpm 清除yum缓存 yum provides ";*/vim"; 第十节课
- 【OC底层】一个OC对象占用多少内存?
- ① 设计模式的艺术-01.单例(Singleton)模式
热门文章
- based on Greenlets (via Eventlet and Gevent) fork 孙子worker 比较
- jQuery的html()、text()和val()的使用和区别
- C++ remove remove_if erase
- Qt编写自定义控件27-颜色按钮面板
- Ubuntu+Django+uWSGI+Nginx部署Django项目
- 从MOV PC,PC;(或者ADDPC,PC,#4 )看ARM的三级流水线过程
- HANA数据自助查询
- shell脚本中set -e作用
- Fastjson反序列化漏洞
- 解决element-ui按需引入不了Scrollbar的问题