質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

2903閲覧

jQueryのanimate関数でオブジェクトを移動させ、再帰呼出しでループ処理しましたが失敗します

inouexyz

総合スコア11

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/12/08 03:57

###前提・実現したいこと
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です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コールバックの仕方を調整してください

javascript

1$(function() { 2 setTimeout(function(){fallCtrl("#snow01", 9000)}); 3 setTimeout(function(){fallCtrl("#snow02", 8000)}, 1000); 4}); 5 6function fallCtrl(id, dur) { 7 $(id).animate({ 8 top: '500px' 9 }, { 10 duration: dur, 11 easing: 'linear' 12 }).animate({ 13 top: '-70px' 14 }, { 15 duration: 0, 16 easing: 'linear' 17 }) 18 setTimeout(function(){fallCtrl(id, dur)}, dur); 19} 20

投稿2016/12/08 04:13

yambejp

総合スコア114833

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inouexyz

2016/12/08 04:30 編集

正常に動作しました。これが正しい表記なんですね。ありがとうございました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問