【问题标题】:Coffeescript function runs as soon as page is loaded, but I don't want it to do soCoffeescript 函数在页面加载后立即运行,但我不希望它这样做
【发布时间】:2014-05-17 16:58:05
【问题描述】:

所以我有这个功能

$ ->
  paper = Snap("#svg")
  circ = paper.circle(100, 100, 50)
  circ.click(-> circ.animate({r: 200}, 1000))

它使用 Snap.svg 库。它在页面上选择一个 svg 元素并在那里画一个圆圈。当您单击圆时,半径会增加。

如果我想拉出circ.click() 里面的函数,我不能让它正常工作。要么这样

$ ->
  foo = (circle) ->
    circ.animate

  paper = Snap("#svg")
  circ = paper.circle(100, 100, 50)
  circ.click(foo(circ))

或者像这样

foo = (circ) ->
  circ.animate

$ ->
  paper = Snap("#svg")
  circ = paper.circle(100, 100, 50)
  circ.click(foo(circ))

发生的情况是foo() 在页面加载后立即运行,但我想要它做的是等到我点击圆圈。

【问题讨论】:

    标签: ruby-on-rails coffeescript snap.svg


    【解决方案1】:

    试试这个。 circ.click(-> foo(circ))

    【讨论】:

    • 修复了它。你能解释一下为什么会这样吗?我不确定为什么必须将函数调用包装在另一个函数中。
    • click 接受函数作为参数,以便稍后在单击事件时调用它。但是在您的示例中,您立即调用函数。不要混淆函数声明和函数调用,这是两个不同的东西。
    【解决方案2】:

    每个 JavaScript 文件在加载后立即运行。在您的原始代码中:

    $ ->
      ...
    

    $ 是一个方法,它会立即执行,下面的匿名函数作为参数传递。

    【讨论】:

    • 定义的函数不是用 () 运行的,所以它不会在加载时执行
    • 在 Coffee 中,$ -> ... 转换为 $(function(){...}),基本上是对 $ 的调用。
    猜你喜欢
    • 2013-05-01
    • 2016-04-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多