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 スニペットは正常に動作しますが、コンパイルされた CS が機能しない理由がわかりません

私は JavaScript や CoffeeScript の経験がまったくないので、ここでヒントをいただければ幸いです。

4

1 に答える 1

3

元のコードはCoffeeScriptと同等です

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

代わりに1000、関数に対して3番目の引数を作成しましたslideUp。時間引数が必要なためsetTimeout、何も起こりません。

setTimeout読みやすくするために、2つの引数を交換するラッパー関数を作成するのが好きであることに注意してください。

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

それが定義されたら、あなたは書くことができます

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