我正在使用三个功能:
startBubbleMachine()
开始制作气泡makeBubble()
使用bubbleID
制作气泡来识别它。附加到div。killBubble()
删除了气泡使用另一个函数randomInt
随机化创建气泡的时间,该函数只在一个范围内生成一个随机int。
我真的在努力增加bubbleID
,这是创建新气泡并确保正确的气泡被破坏所必需的。我无法确定在哪个阶段增加。
function startBubbleMachine(){
console.log('starting bubble machine');
var bubbleID = 1;
setInterval(makeBubble(bubbleID), randomInt(6000, 1000));
}
这个功能非常简单。它会初始化bubbleID
,然后设置1到6之间的间隔来调用makeBubble()
,并传递bubbleID
这是我被困的地方
function makeBubble(bubbleID){
console.log('making bubble number '+bubbleID);
$('.wrapper').append('<div class="db-bubble db-bubble-'+bubbleID+'></div>');
killBubble(bubbleID); // kill the bubble with the current ID
bubbleID++; // increment the current ID
}
制作气泡,然后立即调用killBubble()
函数。它通过bubbleID
以确保正确的泡沫将被谋杀。
然后它会增加bubbleID
为下一个气泡创建做好准备。 但这有点不对,我敢肯定。
最后,killBubble()
已收到必须谋杀的bubbleID
。等待2秒,然后删除。
function killBubble(bubbleID){
setTimeout(function(){
// murder time
$(".db-bubble-"+bubbleID).remove();
}, 2000);
// this kills the bubble
}
我的问题是该流程只运行一次。创建气泡1,移除气泡1。 Bubble 2永远不会被创建。
答案 0 :(得分:0)
您不能以这种方式致电setInterval
:
setInterval(makeBubble(bubbleID), randomInt(6000, 1000));
它需要一个函数作为参数,所以它应该是:
setInteval(function() {
makeBubble(bubbleID);
}, randomInt(6000, 1000));
这JSFiddle Demo对我有用。
您需要了解您的bubbleID
在传递by value
时没有增加。你应该把它变成全球性的。
var bubbleID;
function startBubbleMachine(){
console.log('starting bubble machine');
bubbleID = 1;
setInterval(function() { makeBubble(bubbleID); }, randomInt(6000, 1000));
}
另外,正如我猜的那样,你希望气泡在那段时间内随机出现。您应该了解每次都会计算randomInt(6000, 1000)
NOT 。
这是实际发生的事情:
var temp = randomInt(6000, 1000);
setInterval(function() { ... }, temp);
您需要更改计时器逻辑,以使其以这种方式工作。
我就是这样做的:JS Fiddle。
答案 1 :(得分:0)
除了使用setInterval
之外,bubbleID
正在通过值传递(只有对象通过引用传递)到makeBubble
功能中。为全局计数器使用与makeBubble
函数中的参数名称不同的名称。
答案 2 :(得分:0)
可能有点晚了https://jsfiddle.net/arunzo/Lhn6jv9x/6/
$(document).ready(function () {
startBubbleMachine();
});
var bubbleID = 1;
function startBubbleMachine() {
console.log('starting bubble machine');
var rInt = randomInt(6000, 1000);
setInterval(function () {makeBubble()}, rInt);
}
function makeBubble() {
var wh = randomInt(143, 50);
console.log('making bubble number ' + bubbleID);
$('.wrapper').append('<div class="db-bubble db-bubble-' + bubbleID + '" style="transform:rotate(' + randomInt(20, 1) + 'deg);left:' + randomInt(100, 1) + '%;width:' + wh + 'px;height:' + wh + 'px;"></div>');
killBubble(bubbleID);
bubbleID++;
}
function killBubble(bubbleID) {
setTimeout(function () {
console.log('killing bubble number ' + bubbleID);
// murder time
$(".db-bubble-" + bubbleID).remove();
}, 2000);
// this kills the bubble
}
function randomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
因为函数在第一个实例中传递了值1,所以它始终以值1继续运行。删除它,我们完成了。
答案 3 :(得分:0)
https://jsfiddle.net/Lhn6jv9x/8/
删除bubbleID
并更正var
格式
setInterval
移至全局范围
function startBubbleMachine() {
console.log('starting bubble machine');
bubbleID = 1;
setInterval(function () {
makeBubble(bubbleID)
}, randomInt(6000, 1000));
}