Como fazer demora em chamar uma função em javascript?
-
16-09-2019 - |
Pergunta
eu quero executar um determinado número de declarações depois de algum atraso. Por exemplo:
function findPosX(obj) {
var curleft = 0;
if (obj.offsetParent) {
while (1) {
curleft += obj.offsetLeft;
if (!obj.offsetParent) {
break;
}
obj = obj.offsetParent;
}
} else if (obj.x) {
curleft += obj.x;
}
return curleft;
}
function findPosY(obj) {
var curtop = 0;
if (obj.offsetParent) {
while (1) {
curtop += obj.offsetTop;
if (!obj.offsetParent) {
break;
}
obj = obj.offsetParent;
}
} else if (obj.y) {
curtop += obj.y;
}
return curtop;
}
function gotoDiv(index) {
var ele = document.getElementById("Div" + index);
var x = findPosX(ele);
var y = findPosY(ele);
setTimeout("window.scrollTo(x, y)", 5000);
}
Aqui eu quero definir a posição de rolagem atual para um div prticular. Mas ele está me dando erro: x é indefinido . Deixe-me dizer u se eu usar as funções conforme abaixo ele funciona bem, então por favor não me diga que ELE é nulo e blá blá blá.
function gotoDiv(index) {
var ele = document.getElementById("Div" + index);
var x = findPosX(ele);
var y = findPosY(ele);
window.scrollTo(x, y);
}
Qualquer ajuda apreciado.
Solução
tente
setTimeout("window.scrollTo(" + x + ", " + y + ")", 5000);
Isto não é a melhor prática. Utilize este no lugar:
setTimeout(function() { window.scrollTo(x, y); }, 5000);
Outras dicas
Você pode dar setTimeout
uma função, em vez de uma string, que vai deixar você acessar essas variáveis:
setTimeout(function() { window.scrollTo(x, y); }, 5000);
Enrole a função em um encerramento e, em seguida, colocar o tempo limite dentro do fechamento.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow