私はGreensockアニメーションライブラリで働いていますし、シーケンシャルアニメーション(一つのことはすぐに終了し、次の始まる場所)あなたはこのようにそれを入力する必要が構築するとき:配列をループする際にeval()を避けるには?
childTL.to($box, 1, {x:50,y:0})
.to($box, 1, {x:50,y:50})
.to($box, 1, {x:-50,y:50})
.to($box, 1, {x:-50,y:0});
を私が持っている問題は、私はということですすべてのものをデータベースや変数として格納し、forループを使って段階的に物を構築する必要があります。
私は何をしたいです。このような何か:私はそれを()はevalを行い、その後一緒に文字列を連結してそれを行うと可能性を知っているが、なしでそれを行う方法がある
var animation = {
"name": "movearound",
"sequence": [{
"duration": "1",
"vars": {
"x": "50",
"y": "0"
}
}, {
"duration": "1",
"vars": {
"x": "50",
"y": "0"
}
}, {
"duration": "1",
"vars": {
"x": "50",
"y": "0"
}
}, {
"duration": "1",
"vars": {
"x": "50",
"y": "0"
}
}]
}
target = $(".target123")
childTL = new TimelineLite{onUpdate: updateSlider});
for (S = 0; S < animatelayers.sequence.length; S++) {
duration = animatelayers.sequence[S]["duration"];
sequence = animatelayers.sequence[S]["vars"];
if (S == 0) {
childTL.to(target, duration, sequence)
} else {
.to(".target", duration, sequence);
}
}
?私はevalを話しています理由について
編集():
私は私が持っている悩みを推測では、それがオブジェクト対文字列として入ってくる事になるとGreensockがどのようにうるさいです - たとえば、あなたはで$("#target")
を使用することができます.to()を使用することはできますが、変数として最初に定義する場合は使用できません。var target = $("#target");
、次にchildTL.to(target, 1, {x:50,y:0})
は失敗しますが、var target = "#target"
とするとうまくいきます。だから、過去に私はGreensockが文字列として欲しいのと全く同じように作成し、eval()を使用しました。私はそれを続けることができますが、私は物事を達成するためのより良い方法を探すことを好む。
それはあなたの問題が何であるかは全く明らかではありません。 'eval()'のように見せたくないものは何でしょうか? – Pointy
あなたがなぜ 'eval()'を使う必要があるのか、また文字列連結を使う必要があると思うのはあなたの質問からは分かりません。おそらく、あなたが望んでいるオブジェクトに変換する必要があるデータを最初に表示していれば? – Paul
'target'は未使用です。 'animatelayers'、' duration'、 'sequence'とは何ですか? 'childTL [S]'とは何ですか? – melpomene