1

少し遅れて、特定の数のステートメントを実行したい。例:

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

助けていただければ幸いです。

4

3 に答える 3

14

setTimeout文字列ではなく関数を指定すると、これらの変数にアクセスできます。

setTimeout(function() { window.scrollTo(x, y); }, 5000);      
于 2009-09-25T12:55:50.073 に答える
4

試す

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

これはベストプラクティスではありません。代わりにこれを使用してください:

setTimeout(function() { window.scrollTo(x, y); }, 5000);
于 2009-09-25T12:52:12.240 に答える
1

関数をクロージャでラップしてから、タイムアウトをクロージャ内に置きます。

于 2009-09-25T12:52:19.587 に答える