阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      CoffeeScript 去抖动函数

      去抖动函数

      问题

      你想只执行某个函数一次,在开始或结束时把多个连续的调用合并成一个简单的操作。

      解决方案

      使用一个命名函数:

      debounce: (func, threshold, execAsap) ->
        timeout = null
        (args...) ->
          obj = this
          delayed = ->
            func.apply(obj, args) unless execAsap
            timeout = null
          if timeout
            clearTimeout(timeout)
          else if (execAsap)
            func.apply(obj, args)
          timeout = setTimeout delayed, threshold || 100
      mouseMoveHandler: (e) ->
        @debounce((e) ->
          # 只能在鼠标光标停止 300 毫秒后操作一次。
        300)
      
      someOtherHandler: (e) ->
        @debounce((e) ->
          # 只能在初次执行 250 毫秒后操作一次。
        250, true)
      

      讨论

      可参阅John Hann的博客文章,了解JavaScript 去抖动方法

      目录
      目录