###前提・実現したいこと
htmlページで、jQueryのanimate関数を使って
「snow01」「snow02」というidを割り当てたimgを
画面上から下へ等速直線運動をさせ、
画面下まで到達したらまた上からループさせたいと思っています。
「snow01」用の関数と「snow02」用の関数を別々に書いて
引数なしで再帰呼び出しするとうまくループしますが、
2つの関数の処理を汎用的にまとめた(つもりの)関数fallCtrl(id, dur)では
再帰呼び出しがうまくいかず、ループの2回めの処理が失敗する状態です。
ご指南いただければ幸いです。よろしくお願いします。
###発生している問題・エラーメッセージ
console.log()のメッセージは以下です。
Uncaught ReferenceError: id is not defined(…)
###該当のソースコード
$(function() { // ループ成功 // setTimeout('fall01()'); // setTimeout('fall02()', 1000); // 関数を汎用にしたが、ループしないバグ発生 setTimeout('fallCtrl("#snow01", 9000)'); setTimeout('fallCtrl("#snow02", 8000)', 1000); }); function fallCtrl(id, dur) { $(id).animate({ top: '500px' }, { duration: dur, easing: 'linear' }).animate({ top: '-70px' }, { duration: 0, easing: 'linear' }) // 再帰関数にidが渡らない?? setTimeout('fallCtrl(id, dur)', dur); } function fall01() { $('#snow01').animate({ top: '500px' }, { duration: 9000, easing: 'linear' }).animate({ top: '-70px' }, { duration: 0, easing: 'linear' }) setTimeout('fall01()', 9000); } function fall02() { $('#snow02').animate({ top: '500px' }, { duration: 8000, easing: 'linear' }).animate({ top: '-70px' }, { duration: 0, easing: 'linear' }) setTimeout('fall02()', 8000); }
###試したこと
conslole.log('['+id+']');をfallCtrl(id, dur)関数内に書いてログを見ました。
1回めは正常に表示されますが、2回めはログ自体が表示されませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
jQueryバージョンは2.1.4です。
確認環境はChrome/winです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/08 04:30 編集