jQuery setTimeout()回调不起作用

时间:2017-03-19 06:54:23

标签: javascript jquery

我无法弄清楚$("identifier").remove如何与setTimeout()一起使用。下面的代码试图为雪花下拉动画

    //construct a html string
    var html_str = "<img class='snowflakes' src = 'snowflake1.png' style='position: absolute; left: " + String(pos_x) + "px'> "

    //Append the element to field
    var flake = $(html_str).appendTo('#field');

    flake.animate({top: String(FIELD_SIZE-FLAKE_SIZE)+'px'}, 
                    drop_speed,

                    //callback function when finished animating
                    function(){
                        setTimeout(function(){flake.remove();},1000);
                    }
    );

我不知道如何

    setTimeout(function(){flake.remove();},1000); //this works
    setTimeout(flake.remove,1000); //but this doesn't remove the element

在我看来,两者都应该执行相同的功能。这是怎么回事?

1 个答案:

答案 0 :(得分:3)

第二个没有用,因为它是在全球范围内执行的。以下是关于传递给setTimeout的函数中this上下文的文章,根据MDN (Check 'The "this" problem)'

如果以这种方式编写代码,您的代码将起作用:

setTimeout(flake.remove.bind(flake),1000);