抖动

涵义

在一个周期结束后触发,如果周期结束前被调用,则重置周期。

  1. function debounce(handler, period, ...arg){
  2. let timer;
  3. return function(evt){
  4. if(timer) {
  5. clearTimeout(timer);
  6. timer = setTimeout(function(){
  7. timer = null;
  8. handler.call(this, evt, ...arg)
  9. }, period)
  10. } else {
  11. timer = setTimeout(function(){
  12. handler.call(this, evt, ...arg)
  13. }, period)
  14. }
  15. }
  16. }

节流

涵义

在一个周期内,无论调用多少次,只触发一次。

  1. function throttle(handler, delay = 200, ...args) {
  2. let timer, last=0,
  3. return function (evt) {
  4. let now = Date.now()
  5. if (now - last > delay) {
  6. last = now;
  7. handler(evt, ...args)
  8. }
  9. }
  10. }