0

我正在尝试将以下 JS 片段转换为 CoffeeScript:

$(document).ready(function(){
  window.setTimeout(function(){
    $('#flash').slideUp('slow', function(){
      $(this).remove();
    })
  }, 1000)
})

我试过这个:

$(document).ready ->
  window.setTimeout ->
    $('#flash').slideUp 'slow', (-> $(this).remove()), 1000

这导致以下JS代码:

(function() {
  $(document).ready(function() {
    return window.setTimeout(function() {
      return $('#flash').slideUp('slow', (function() {
        return $(this).remove();
      }), 1000);
    });
  });
}).call(this);

看起来和我很相似,但它根本不起作用。该片段的目的是,在 id 为 #flash 的 div 上执行 slideUp 动画,并在动画完成后移除元素。纯 JS Snippet 工作正常,但我不明白,为什么编译后的 CS 不能正常工作

我对 JavaScript 或 CoffeeScript 一点经验都没有,所以我很乐意在这里给点提示。

4

1 回答 1

3

您的原始代码相当于 CoffeeScript

$(document).ready ->
  window.setTimeout (->
    $('#flash').slideUp 'slow', (-> $(this).remove())
  ), 1000

相反,您1000为该函数添加了第三个参数slideUp。由于setTimeout需要时间参数,因此没有任何反应。

请注意,setTimeout为了便于阅读,我喜欢围绕交换两个参数创建一个包装函数:

window.delay = (ms, func) -> setTimeout func, ms

一旦定义好了,你就可以写

$(document).ready ->
  delay 1000, -> $('#flash').slideUp 'slow', (-> $(this).remove())
于 2011-08-08T13:52:36.043 回答