※ AnimateImage の旧バージョン (version 0.6.x 系) に関する情報を参考までに残しておく。新バージョン (version 0.7 以降) との互換性はなし。
AnimateImage は複数の画像をアニメーション GIF のように表示する JavaScript コード。
※ 最新の情報については JavaScript: 複数の画像をアニメーション GIF のように表示する AnimateImage を参照。
head 要素や body 要素などに以下のコードを記述して AnimateImage スクリプトを読み込む。
<script type="text/javascript" src="animateImage.js"></script>
Image1.png, Image2.png … Image10.png をアニメーションさせる場合は次のように記述する。
<script type="text/javascript">
animateImage(null, 'Image{0}.png', 10);
</script>
animateImage() 関数に渡している引数の意味は次の通り。
※ 画像タイトルやアニメーション間隔、アニメーションの繰り返し回数も指定できる。また連番でない任意の画像を指定することもできる。詳細は記述例や API 仕様を参照。
旧バージョン (version 0.6.x 系) のソースコード。新バージョン (version 0.7 以降) との互換性はなし。
※ animateImage_0.6.5.1.js はパフォーマンスを重視して minify (コメントや空白が除去) されている。読みやすいようにフォーマットされたソースコードは animateImage_0.6.5.1_original.js (UTF-8) を参照。
次のような画像ファイルをアニメーションさせる場合の記述例を紹介する。
画像タイトルを指定して複数のアニメーション。
animateImage(null, 'Foo{0}.png', 5, 'Image Foo');
animateImage(null, 'Bar{0}.png', 10, 'Image Bar');
※ アニメーション間隔はデフォルトの 0.5 秒、アニメーションの繰り返し回数はデフォルトの無制限となる。
アニメーション間隔 (1 秒)、アニメーションの繰り返し回数 (5 回) を指定してアニメーション。画像タイトルは指定しない。
animateImage(null, 'Foo{0}.png', 5, null, 1000, 5);
異なるアニメーション間隔と繰り返し回数でアニメーション。Image Bar はアニメーション終了時に最初の画像に巻き戻す。
animateImage(null, 'Foo{0}.png', 5, 'Image Foo', 1000, 5);
animateImage(null, 'Bar{0}.png', 10, 'Image Bar', 500, 10, true);
※ アニメーション終了時に Image Foo は最後の画像 (Foo5.png) のままとなるが、Image Bar は最初の画像 (Bar1.png) に巻き戻される。
アニメーション間隔 1 秒で 1 回だけアニメーションする設定。ただし Image Baz のみ 0.5 秒で無制限にアニメーションを繰り返す。
Animations.delay = 1000;
Animations.repeat = 1;
animateImage(null, 'Foo{0}.png', 5, 'Image Foo');
animateImage(null, 'Bar{0}.png', 10, 'Image Bar');
animateImage(null, 'Baz{0}.jpg', 15, 'Image Baz', 500, -1);
画像ファイルの連番の開始番号を変更する。Image Foo は 2 から、その他の画像は 1 から開始する。
Animations.startIndex = 2;
animateImage(null, 'Foo{0}.png', 4, 'Image Foo');
Animations.startIndex = 1; // 元に戻す
animateImage(null, 'Bar{0}.png', 10, 'Image Bar');
animateImage(null, 'Baz{0}.jpg', 15, 'Image Baz');
ファイル名が連番でない任意の画像を指定する。
var files = ['Foo1.png', 'Bar1.png', 'Baz1.jpg']; animateImage(null, files, files.length); animateImage(null, ['Foo5.png', 'Bar10.png', 'Baz15.jpg'], 3);
アニメーション画像にスタイル (CSS) を適用する。Image Bar は個別にスタイルを適用するため ID 文字列を指定する。
animateImage(null, 'Foo{0}.png', 5, 'Image Foo');
animateImage('id-bar', 'Bar{0}.png', 10, 'Image Bar');
共通のスタイルは class セレクタ (img.animation) を、個別のスタイルは id セレクタ (img#id-bar) を記述する。
img.animation {
border: solid medium silver;
}
img#id-bar {
border: dashed medium blue;
}
複数の画像をアニメーションさせる。
function animateImage(id, files, count, title, delay, repeat, rewind)
※ 画像ファイルの連番は (デフォルトでは) 1 から始まり、1, 2, 3 … 10, 11 … と続く。
すべてのアニメーションに共通する設定。
※ animateImage() 関数呼び出し前に設定されている値が反映される。値を変更する場合はアニメーション開始前に設定しておく (開始後に値を変更しても参照されない)。
"keyboard keys" by chromatix is licensed under Creative Commons License.
はじめまして、PNGのアニメーションができて驚きました!
animateImage.js でアニメーションがループしないバージョンを作ってください。。。お願いします!!
javascriptをいじったら何とかできました!
素晴らしいものをありがとうございます><
コメントありがとうございます。
せっかくコメントをいただいたので AnimateImage スクリプトの改良に取り組み、先ほど AnimateImage version 0.6 を公開しました。
アニメーションをループさせない件については既に自己解決されたようですが、ほかにも改良点がいくつかありますので良かったらお使いください。
※ 前バージョン (0.5) からの変更点
※ (ループしない) 1 回のアニメーションに加えて、任意の回数のアニメーションもできます。またアニメーション設定を利用すると、アニメーション間隔やアニメーションの繰り返し回数をまとめて指定できます。たとえば "Animations.repeat = 1" と記述しておけば animateImage 関数で繰り返し回数の指定が省略できます。それからアニメーション終了時に最後の画像のままにしておくか、最初の画像に巻き戻すかを指定できます。
こういうスクリプトが欲しいと思っていました!
ホントにありがとうございました!
変更点にある機能は、欲しかったものばかりなのでとても嬉しいです><
いえ、こちらこそご利用いただけてうれしいです。モチベーションにもつながりますし。
※ AnimateImage version 0.6.1 にマイナーバージョンアップしました。アニメーション画像にスタイル (CSS) を適用できるよう、デフォルトで img@class=”animation” を設定します。
マイナーバージョンアップもすごく便利です!
CSSが適用できるようになって、かゆいところにも
手が届きます…!><
バージョンアップありがとうございます!
重宝しております!><
なんか頻繁なバージョンアップになってしまってちょっと申し訳ないです。
修正をある程度まとめてからリリースしようと思ってるのですが、リリースしてから追加したい機能やスマートな実装方法を思いつくもので…。
けれどそろそろネタ切れですし、使用に耐える程度の機能は実装し終えたという認識ですので、新しいアイディアが浮かばない限りしばらく
バージョンアップはないでしょう(前言撤回:version 0.6.4 にバージョンアップしました)。お世話になります><
複数のアニメーションが存在しているとき、
その中のうち、ひとつのアニメーションに
Animations.rewind = true
を適用させて、アニメーション終了時に最初の画像に
巻き戻そうと思ったのですが、
すべてのアニメーションに巻き戻しが適用されてしまいます。
※デフォルトの設定は rewind:false でループしない設定にしています。
ご確認いただけたらと思います><
> 複数のアニメーションが存在しているとき、
> その中のうち、ひとつのアニメーションに
> Animations.rewind = true
> を適用させて、アニメーション終了時に最初の画像に
> 巻き戻そうと思ったのですが、
> すべてのアニメーションに巻き戻しが適用されてしまいます。
> ※デフォルトの設定は rewind:false でループしない設定にしています。
Animations.rewind をアニメーションごとに設定するような状況は考えてませんでしたので、確かに指摘されたような挙動になります。
アニメーション終了時に最初の画像に巻き戻すかどうか (Animations.rewind) をアニメーションごとに設定できるように修正した version 0.6.4 をリリースしました。animateImage() 関数で引数 rewind を指定することで、アニメーション終了時に最後の画像のままにしておくか、あるいは最初の画像に巻き戻すかをアニメーションごとに設定することができます。
※ 記述例3 にも書きましたが、アニメーション終了時に最初の画像に巻き戻すかどうかをアニメーションごとに設定する場合は次のような記述になります。
animateImage('id-foo', 'Foo{0}.png', 5, 'Image Foo', 500, 1); animateImage('id-bar', 'Bar{0}.png', 5, 'Image Bar', 500, 1, true);※ 参考までに、アニメーション終了時に最初の画像に巻き戻す (rewind = true) をデフォルトの動作にしたい場合は次のような記述になります。
Animations.rewind = true; animateImage('id-foo', 'Foo{0}.png', 5, 'Image Foo', 500, 1, false); animateImage('id-bar', 'Bar{0}.png', 5, 'Image Bar', 500, 1);> ※ 参考までに、アニメーション終了時に最初の画像に巻き戻す (rewind = true) をデフォルトの動作にしたい場合は次のような記述になります。
実際にはバグのため正しく動いてませんでした。
対応ありがとうございます!
思ったような動きが実現できたので、嬉しいです><