我有一个与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;
}
答案 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)
这就是您所需要的。 key
是item
,value
是间隔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.wood
或allitems["wood"]