当前位置:   article > 正文

JS手写——防抖与节流_js手写防抖

js手写防抖

一、什么是防抖和节流

防抖(debounce):每次触发定时器后,取消上一个定时器,然后重新触发定时器。防抖一般用于用户未知行为的优化,比如搜索框输入弹窗提示,因为用户接下来要输入的内容都是未知的,所以每次用户输入就弹窗是没有意义的,需要等到用户输入完毕后再进行弹窗提示。

节流(throttle):每次触发定时器后,直到这个定时器结束之前无法再次触发。一般用于可预知的用户行为的优化,比如为scroll事件的回调函数添加定时器。

二、手写

防抖:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <button id="btn">clickMe</button>
  11. </body>
  12. <script>
  13. let btn = document.getElementById('btn')
  14. function debounce(fn,delay=200){
  15. let timer = null
  16. return function(...args){
  17. if(timer){
  18. clearTimeout(timer)
  19. timer = null
  20. }
  21. timer = setTimeout(()=>{
  22. fn.apply(this,args)
  23. clearTimeout(timer)
  24. timer = null
  25. },delay)
  26. }
  27. }
  28. btn.addEventListener('click', debounce((e) => {
  29. console.log(e.target)
  30. }, 1000))
  31. </script>
  32. </html>

节流

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <button id="btn">clickMe</button>
  11. </body>
  12. <script>
  13. let btn = document.getElementById('btn')
  14. function throttle(fn,delay=200){
  15. let flag = true
  16. return function(...args){
  17. if(!flag){
  18. return
  19. }
  20. flag = false
  21. setTimeout(()=>{
  22. fn.apply(this,args)
  23. flag = true
  24. },delay)
  25. }
  26. }
  27. btn.addEventListener('click', throttle((e) => {
  28. console.log(1)
  29. }, 1000))
  30. </script>
  31. </html>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/716491
推荐阅读
相关标签
  

闽ICP备14008679号