DOMエレメントを徐々に移動するには、this answerのようにクロージャを使用しようとしています。最終的には、独立して動かすべきこれらのDOM要素の多くを動的に作成したいので、関数内で変数を定義しようとしています。与えられた回答からDOMエレメントをクロージャ内で移動するには
例は
var lightning = new Array();
lightning.push($(".lightning"));
var l0 = -210;
function thunkAdd(){
var lThis = l0;
console.log('set lThis to '+ lThis);
return function inc() {
console.log('lThis = '+ lThis);
return lThis ++;
}
lightning[0].css("left", lThis);
console.log('lightning[0] left = '+lightning[0].css("left"));
}
var incrementInterval = setInterval(thunkAdd(), 33);
first example on codepenあります。コンソールを見ると、何らかの理由でconsole.log('lightning[0] left = '+lightning[0].css("left"));
が実行されていないようです。
私が試し異なるアプローチがある:
var lightning = new Array();
lightning.push($(".lightning"));
var l0 = -210;
var lThis = l0;
function thunkAdd(){
lThis ++;
console.log('lThis = '+ lThis);
lightning[0].css("left", lThis);
console.log('lightning[0] left = '+lightning[0].css("left"));
}
var incrementInterval = setInterval(thunkAdd, 33);
second example on codepen。それは画面全体にイメージを移動しますが、理想的です(次のステップはこれらのイメージを動的に作成して移動するためです)。thunkAdd
関数内で変数lThis
を最初に実行して定義したい場合は、それを増やし、lThis
変数を使用してイメージを移動します。これどうやってするの?
すべてをjQueryのanimateこれに代えての使用を検討してupdated example
を参照してください。 'return'を使って関数を終了したため、 '' 'は実行されません。 –