Как сделать задержку при вызове функции в javascript?
-
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);
Оберните функцию в замыкание, а затем поместите тайм-аут внутрь замыкания.
Не связан с StackOverflow