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 去抖动方法

作者:admin,如若转载,请注明出处:https://www.web176.com/coffeescript/10644.html

(0)
打赏 支付宝 支付宝 微信 微信
adminadmin
上一篇 2023年2月26日
下一篇 2023年2月26日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注