动态设置多个setInterval并存储以供以后访问

时间:2018-07-04 13:53:50

标签: javascript variables setinterval

我有一个与setInterval一起运行的函数,它从单击的按钮的ID中获取变量。有更好的方法来执行此操作,而不必每次都为新变量编写所有switch块? 是否可以为变量动态调用setInterval?

我不知道如何表达这个问题,但是这样的事情是可能的吗? 使用包含项的数组并为数组内的项调用setInterval?

类似这样的东西:

allitems.wood

然后调用allitems [item] = setInterval(function(){collect(allitems [item]);},time);

这就是我现在的做法,但是每次我添加一个新项目时,我都必须重新写所有案例部分...

switch(item){
  case "wood":
    getwood = setInterval( function() { gather(item); }, time );
    break;
  case "planks":
    makeplanks = setInterval( function() { gather(item); }, time );
    break;
  case "stone":
    getstone = setInterval( function() { gather(item); }, time );
    break;
  case "leather":
    getleather = setInterval( function() { gather(item); }, time );
    break;
  case "iron":
    getiron = setInterval( function() { gather(item); }, time );
    break;
}

3 个答案:

答案 0 :(得分:2)

您建议的解决方案非常正确。您可以使用方括号表示法访问对象属性,因此可以使用变量来动态访问它们。

以下代码将收集木材6秒钟,停止它,然后开始收集石头(纯粹出于示例目的)。

var allItems = {
    wood: 0,
    planks: 0,
    stone: 0
};

var time = 2000;
   
function getItem(item) {
    allItems[item] = setInterval(function() {
        gather(item);
    }, time);
}

function gather(item) {
    console.log("gathering " + item);
}

getItem("wood");

setTimeout(function() {
    clearInterval(allItems.wood);
    getItem("stone");
}, 6000);

答案 1 :(得分:2)

这就是您所需要的。 keyitemvalue是间隔ID,可以根据需要在以后删除间隔。

var intervals = {};
function addItem()
{
    var item = document.getElementById("item").value;
    var time = document.getElementById("time").value;
    intervals[item] = setInterval(function(){console.log(item)},time);
    console.log(intervals);
}
<input id="item" placeholder="Item">
<input id="time" placeholder="Time">
<button onclick="addItem()">Add</button>

答案 2 :(得分:1)

如果我正确理解了您的问题,您会想要使用一个对象的声音。

  

类似这样的东西:

     

allitems.wood

     

,然后调用allitems [item] = setInterval(function(){   收集(allitems [item]); },时间);

您可以通过使用如下对象来实现:

var allitems = {};
allitems[item] = setInterval( function() { gather(item); }, time );

因此,如果您的商品是“木头”,那么您可以通过执行以下操作来访问“木头”间隔:

allitems.woodallitems["wood"]