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 が null で何とか何とかなどとは言わないでください。
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