Espere até que setInterval () seja feito
Eu gostaria de adicionar um pequeno efeito de rolagem de dados ao meu código Javascript. Eu acho que uma boa maneira é usar osetInterval()
método. Minha ideia era seguir o código (apenas para teste):
function roleDice() {
var i = Math.floor((Math.random() * 25) + 5);
var j = i;
var test = setInterval(function(){
i--;
document.getElementById("dice").src = "./images/dice/dice" + Math.floor((Math.random() * 6) + 1) + ".png";
if(i < 1) {
clearInterval(test);
}
}, 50);
}
Agora eu gostaria de esperar pelo setInterval até que seja feito. Então eu adicionei um setTimeout.
setTimeout(function(){alert("test")}, (j + 1) * 50);
Este código funciona bem. Mas no meu código principal oroleDice()
função retorna um valor. Agora eu não sei como eu poderia lidar com isso ... eu não posso voltar dosetTimeout()
. Se eu adicionar um retorno ao final da função, o retorno será aumentado para rápido. Alguém tem uma ideia, como eu poderia consertar isso?
Editar Hmm, ok eu entendo qual a dose de retorno e acho que sei como funciona mas ainda tenho o problema. Acho que é mais um problema de "interface" ... Aqui meu código:
function startAnimation(playername, callback) {
var i = Math.floor((Math.random() * 25) + 5);
var int = setInterval(function() {
i--;
var number = Math.floor((Math.random() * 6) + 1);
document.getElementById("dice").src = "./images/dice/dice" + number + ".png";
if(i < 1) {
clearInterval(int);
number = Math.floor((Math.random() * 6) + 1);
addText(playername + " rolled " + number);
document.getElementById("dice").src = "./images/dice/dice" + number + ".png";
callback(number);
}
}, 50);
}
function rnd(playername) {
var callback = function(value){
return value; // I knew thats pointless...
};
startAnimation(playername, callback);
}
A funçãornd()
deve esperar e devolver o valor… estou um pouco confuso. No momento eu não tenho idéia de como continuar ... O código espera pelovar callback...
mas como eu poderia combiná-lo com o retorno? Eu gostaria de executar a animação e retornar depois que o último número comrnd()
para outra função.