jQueryに詳しいかたお助けください。
とあるjQueryプラグインのようなものを作成したのですが、読み込む場所によって結果が違ってしまいます。
具体的には特定のdiv要素に配置した
http://retasretas.github.io/spriteArea/ff6_suripulu.png
のようなゲームで使われるようなスプライト画像をアニメーションさせるプログラムなのですが、
head内にjQueryと当プラグインを読み込むと正常に動作するのですが、
同じ順番でbody閉じタグの直前に置いた場合は読み込む度にうまくいったりいかなかったりと結果が変わってしまいます。
最近ではhead内よりも、body閉じ直前で読み込ませるほうが主流なので、できればそのようにしてもちゃんと動作するようにしたいです。
ですが、いろいろ試しましたが私の知識では解決ができませんでした。
具体的なデモとソースはこちらです。手直しのほどよろしくお願いします。
うまく行く例(head内) http://retasretas.github.io/spriteArea/index.html
いかない例(body閉じ直前) http://retasretas.github.io/spriteArea/index2.html
ソース https://github.com/retasretas/spriteArea
みんなの回答 5 件
どっちも動いてるけど@Windows7/Chrome
関係ないですけど、;(function($){ってどういう意味なんですか?
セミコロンから始めてるのは初めて見ました。
こういう記号を含む検索キーワードってググってもヒットしないから、
調べようとしてもわからないんです。。。
良かったら教えてください^^;
ちなみに、この手の質問はstackoverflowに投稿して質問すると、数分で解決する場合が多いですよ。
軽く見ただけで、実際に動作させながらデバッグしないと確実な回答はできないのですが、上の方と同じでimgList.loadが怪しいような気がします。
loadメソッドは画像の読み込み完了時をトリガーとしてイベントが発生するのですが、本来
1.loadイベントバインド
2.画像の読み込み完了(loadイベント発生)
とならなければならない所、このjsファイルをbody閉じタグ直前に記述する事で、
1.画像の読み込み完了(loadイベント発生)
2.loadイベントバインド(もうすでにloadイベントが発生済みなのでなにも処理が行われない)
になってそうな気がします。
$(function(){ … });はDOMContentLoadedイベントのことなので、DOMがロードされた時に発火するイベントです。
なので、imgがまだロードできてないときは動かないんだと思います。
なので、$(function(){ … });よりwindow.onload = function(){}を使うのが一番シンプルかもです。
ただ、window.onloadは複数使うと、1つしか動かなくなるので、addEventLintenerでloadイベントを発火させた方がよいかも。
// 実行部分の関数
function fogefoge(){
…画像とかの処理
}
if (window.addEventListener) {
window.addEventListener("load", fogefoge, false);
} else if (window.attachEvent) { //for IE
window.attachEvent("onload", fogefoge);
} else {
window.onload = fogefoge;
}
実際試してないですが、どうでしょ?
てか、W3Qってマークダウンとかないんですね。。書きづらい…。
今現在
imgList.load(...
を
imgList.each(...
に変更しました。これでも動かないようです。
関連するトピックス