2019.04.04 防抖和节流
栏目: JavaScript · 发布时间: 6年前
内容简介:只记录简单实现方法、用以明白原理debounce,去抖动。策略是当事件被触发时,设定一个周期延迟执行动作,若期间又被触发,则重新设定周期,直到周期结束,执行动作。 这是debounce的基本思想,在后期又扩展了前缘debounce,即执行动作在前,然后设定周期,周期内有事件被触发,不执行动作,且周期重新设定
只记录简单实现方法、用以明白原理
防抖
debounce,去抖动。策略是当事件被触发时,设定一个周期延迟执行动作,若期间又被触发,则重新设定周期,直到周期结束,执行动作。 这是debounce的基本思想,在后期又扩展了前缘debounce,即执行动作在前,然后设定周期,周期内有事件被触发,不执行动作,且周期重新设定
// 暴力版: 定时器期间,有新操作时,清空旧定时器,重设新定时器 var debounce = (fn, wait) => { let timer, timeStamp=0; let context, args; let run = ()=>{ timer= setTimeout(()=>{ fn.apply(context,args); },wait); } let clean = () => { clearTimeout(timer); } return function(){ context=this; args=arguments; let now = (new Date()).getTime(); if(now-timeStamp < wait){ console.log('reset',now); clean(); // clear running timer run(); // reset new timer from current time }else{ console.log('set',now); run(); // last timer alreay executed, set a new timer } timeStamp=now; } }
节流
throttling,节流的策略是,固定周期内,只执行一次动作,若有新事件触发,不执行。周期结束后,又有事件触发,开始新的周期。 节流策略也分前缘和延迟两种。与debounce类似,延迟是指 周期结束后执行动作,前缘是指执行动作后再开始周期。
简单版: 定时器期间,只执行最后一次操作 var throttling = (fn, wait) => { let timer; let context, args; let run = () => { timer=setTimeout(()=>{ fn.apply(context,args); clearTimeout(timer); timer=null; },wait); } return function () { context=this; args=arguments; if(!timer){ console.log("throttle, set"); run(); }else{ console.log("throttle, ignore"); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Vue.js前端开发
陈陆扬 / 人民邮电出版社 / 2017-2-1 / CNY 45.00
本书分为10章,包括简介、基础特性、指令、过滤器、过渡、组件、状态管理、常用插件、工程实例和Weex打包。本书从简单的单个实例和基础语法,到工程实例,将系统地讲述Vue.js在项目中的适用场景和具体操作。本书的特点在于案例详实,使读者体会到框架的优点和便捷之处,提升开发效率,最后能将Vue.js运用到实际项目中,避免纸上谈兵的尴尬。一起来看看 《Vue.js前端开发》 这本书的介绍吧!