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

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

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

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

1638閲覧

ある変数の値の数だけanimate()を連続再生させたい。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/09/17 09:32

質問なのですが
アニメーションを順番に連続して再生させるには
複数のanimate()をドットで繋いでいくことで実装できるようですが、
変数の値の数だけ繰り返すにはどうしたらいいでしょう?

また、animate()のプロパティのパラメータに変数を渡すことはできないのでしょうか??

これを
$('').animate({ width: "100%"}, 100);

このような記述したい
var a = { width: "100%"}
$('').animate(a, 100, "swing" );

アニメーションで変化させるプロパティの値を予め配列変数に代入しておき、
ドット繋ぎを使わずに、for文で順番にアニメーションを追加していく…というのが理想です

このような実装方法ありませんでしょうか?

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

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

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

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

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

kei344

2017/09/17 09:36

ご自身で試されたコードを質問文に追記されたほうが回答が望めると思います。
退会済みユーザー

退会済みユーザー

2017/09/17 10:13

えっ、変数aにオブジェクト入れて、それをanimateメソッドに渡してダメでしたか?
guest

回答2

0

今後のことを考慮すればBabel環境を整えて、
Tak_Matzさんの回答のようなasync/awaitを使ったコードを自分も推奨します。

それを踏まえたうえで、IE対策としてお手軽なes5+polyfillでの回答も。
Promiseを返すFunctionを配列として持たせて、reduceで直列実行する手法です。
var opt1 = {width:***};は直接animate関数に書いてもよかったのですが、
「ここでもパラメータ定義の処理を書けますがいかがでしょう」
という意図で一つ上のスコープに定義にしてます。

Javascript

1'use strict'; 2/**jQuery依存**/ 3 4//配列を用意 5var anims = function () { 6 var maxsize = 10; 7 return Array(maxsize).fill().map(function (ignore, idx) { 8 return function ($elem) { 9 var opt1 = { 10 width: (idx + 1) / maxsize * 100 + '%' 11 }; 12 var opt2 = { 13 top: (idx + 1) * 30 + 'px' 14 }; 15 return new Promise(function (resolve) { 16 return $elem.animate(opt1).delay(500).animate(opt2, { 17 duration: 500, 18 complete: function complete() { 19 $elem.text(opt1.width); 20 resolve($elem); 21 } 22 }); 23 }); 24 }; 25 }); 26}(); 27//reduceで直列実行 28anims.reduce(function (prev, curr) { 29 return prev.then(curr); 30 }, Promise.resolve($('div'))) 31.then(function ($elem) { 32 $elem.text('complete'); 33});

html

1<div>0%</div>

CSS

1div { 2 background:red; 3 width: 0%; 4}

動作確認(IE11対応)
https://jsfiddle.net/dqqtb48o/6/

一応元ソースが存在します。どうやらBabelなしではもう書けない体に^^
https://jsfiddle.net/dqqtb48o/2/

追記:Promise使わなくてもjQueryのqueueで出来ることを思い出しました。
配列でanimateのオプション作って貯めて、最後にdequeueで実行。
ma_a_kiさんのイメージに近いやり方です。
https://jsfiddle.net/dqqtb48o/8/

投稿2017/09/20 17:55

編集2017/09/20 20:01
so87

総合スコア764

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

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

0

TypeScriptかBabelで変換する必要がありますが、
非同期処理を指定回数回すのであれば、以下のようなコードで対応出来ます。

javascript

1const anime = ($e, index) => { 2 return new Promise((resolve, reject) => { 3 $e 4 .css({ opacity: 0, }) 5 .animate({ opacity: 1, }, 6 { 7 duration: 1000, 8 complete: () => { 9 resolve(index); 10 }, 11 }); 12 }); 13}; 14 15const $e = $('div'); 16(async () => { 17 for (let index = 0; index < 5; index += 1) { 18 console.log(await anime($e, index)); 19 } 20})();

例)
https://jsfiddle.net/takmatz/z1ayrjy0/

投稿2017/09/17 12:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問