Как сделать задержку при вызове функции в javascript?

StackOverflow https://stackoverflow.com/questions/1477112

  •  16-09-2019
  •  | 
  •  

Вопрос

Я хочу выполнить определенное количество инструкций после некоторой задержки.Например,:

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);
}

Здесь я хочу установить текущую позицию прокрутки в виде прямоугольника div.Но это выдает мне ошибку: x не определено.Позвольте мне сказать вам, что если я использую функции, как показано ниже, это работает нормально, поэтому, пожалуйста, не говорите мне, что ele равно нулю и бла-бла-бла.

function gotoDiv(index) {
    var ele = document.getElementById("Div" + index);
    var x = findPosX(ele);
    var y = findPosY(ele);
    window.scrollTo(x, y);
}

Любая помощь приветствуется.

Это было полезно?

Решение

попробуй

setTimeout("window.scrollTo(" + x + ", " + y + ")", 5000);

это не лучшая практика.Используйте это вместо:

setTimeout(function() { window.scrollTo(x, y); }, 5000);

Другие советы

Вы можете дать setTimeout функция, а не строка, которая позволит вам получить доступ к этим переменным:

setTimeout(function() { window.scrollTo(x, y); }, 5000);      

Оберните функцию в замыкание, а затем поместите тайм-аут внутрь замыкания.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top