多个setTimeout函数,但会在不同的时间发生

时间:2013-05-01 14:50:11

标签: jquery

switch (e.keyCode) {

    case 32: 
        $("#Main").prepend('<div class="Bomb" style="absolute; top:' + position.top + 'px; left: '+ position.left +'px;"></div>');

        setTimeout( function(){ 

            var BombPos = $('.Bomb').position();

            var BombPosTopb = BombPos.top;
            var BombPosLeftb = BombPos.left;
            var BombPosTopt = BombPos.top;
            var BombPosLeftt = BombPos.left;
            var BombPosTopl = BombPos.top;
            var BombPosLeftl = BombPos.left;
            var BombPosTopr = BombPos.top;
            var BombPosLeftr = BombPos.left;
            $(this).remove();

            .... More stuff

            if (CheckRight == false){
                $("#Main").prepend('<div class="Effect" style="absolute; top:' + BombPosTopr + 'px; left: '+ BombPosLeftr +'px;"></div>');
                BombPosLeftr += 30;
            }
        };

        setTimeout( function(){ 
            $('.Effect').remove();
        }
        , 1000 );
    }
    , 1500 );

我的项目被称为Bomberman,我正在尝试生成多个炸弹。 这段代码的问题是:我产生了这个对象,它可以正常工作。它没有任何问题。

但是当我点击我的空格键多次并放入1个以上的炸弹时,它们会同时消失

我只是希望他们在我的每一枚小型炸弹上都有一个“单独的计时器”,所以当我点击空格键并且不是一次全部时,它们会在1-2秒之后消失。

2 个答案:

答案 0 :(得分:0)

我认为正确的方法是创建一个超时方法,只删除时间到了的炸弹。 F.E.通过记住你为每个炸弹启动计时器的时间。

答案 1 :(得分:0)

将你的炸弹变成物体。

你需要一个记住所有炸弹的var:

var arrBombs = new Array();

然后在keypress上添加一个新对象:

case 32:
    arrBombs.push(new objBomb());

然后为你的objBomb提供一个包含代码的函数:

function objBomb(){
    var self = this;
    self.el = $('<div/>');
    self.el.addClass('bomb')
    self.el.css({position : 'absolute', top : position.top + 'px', left : position.left+'px'})
    $("#Main").prepend(self.el);

    self.explosionTime = setTimeout( function(){ 

        self.BombPos = self.el.position();

        self.BombPosTopb = self.BombPos.top;
        self.BombPosLeftb = self.BombPos.left;
        self.BombPosTopt = self.BombPos.top;
        self.BombPosLeftt = self.BombPos.left;
        self.BombPosTopl = self.BombPos.top;
        self.BombPosLeftl = self.BombPos.left;
        self.BombPosTopr = self.BombPos.top;
        self.BombPosLeftr = self.BombPos.left;
        $(self).remove();

        .... More stuff

        if (CheckRight == false){
            $("#Main").prepend('<div class="Effect" style="absolute; top:' + BombPosTopr + 'px; left: '+ BombPosLeftr +'px;"></div>');
            BombPosLeftr += 30;
        }
    };
}

代码可能不准确,您肯定会有错误。但对于您的项目,创建obj是最佳解决方案。

如果您不知道对象是什么,请检查MDN Working With Objects