数组的Javascript setTimeout

时间:2015-04-09 14:05:56

标签: javascript arrays

这个概念是创造一个升降机操作。点击1后,显示屏应显示1,其他楼层也应如此。 我已经完成了代码。

如果我点击2,3,4连续2楼有一个10000ms的延迟,它在setTimeOut中设置,但3& 4正在立即执行。

这是我的JSFIDDLE.

有人可以帮助我在4个楼层获得相同的间隔时间。

var liftArray = [];
var liftCurrentPosition = 1;

    $(document).ready(function(){


    $("#currentPosHTML").text(liftCurrentPosition);

});
$(".floorbuttons").click(function(){

    $(this).attr("disabled", true);
    var selectedfloor = parseInt($(this).text());
    console.log(selectedfloor);

    if(liftArray == 0 || selectedfloor!=liftArray[liftArray.length-1]){
    liftArray.push(selectedfloor);

    setInterval(function(){ 
    movelift(liftArray[0]);
    liftArray.splice(0,1);
    },10000);   
    }
});

function movelift(value){
    $("#currentPosHTML").text(value);
    liftCurrentPosition = value;
    $(".floorbuttons").each(function(){
    if($(this).text() == liftCurrentPosition){
    $(this).attr("disabled",false);
    }
    });
};

2 个答案:

答案 0 :(得分:0)

使用setTimeout功能中的movelift方法。

答案 1 :(得分:0)

使用setInterval是正确的,但是如果电梯当前不工作,您必须确保只启动它。如果它正在工作,它将每5秒触发一次,当它到达所有楼层时,需要取消间隔。

所以将其添加为一般变量:

var refreshIntervalId;

将点击功能更改为:

$(".floorbuttons").click(function(){

    $(this).attr("disabled", true);
    var selectedfloor = parseInt($(this).text());
    console.log(selectedfloor);
    if (liftArray == 0) {
        refreshIntervalId =  setInterval(function () {
            movelift();
        }, 10000);
    }

    if(liftArray == 0 || selectedfloor!=liftArray[liftArray.length-1]){
        liftArray.push(selectedfloor);
    }
});

最后更改movelift功能:

function movelift(){

    var value = liftArray.shift();
    if (!value) {
        clearInterval(refreshIntervalId);
        return;
    }

    $("#currentPosHTML").text(value);
    liftCurrentPosition = value;
    $(".floorbuttons").each(function(){
        if($(this).text() == liftCurrentPosition){
            $(this).attr("disabled",false);
        }
    });  
 };

Fiddle