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.

Foi útil?

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
scroll top