- ベストアンサー
画像拡大スクリプトのソース内で疑問
- 画像拡大スクリプトのソース内に不具合があり、ソースコードを確認しています。
- 特定の記述によって、関数が実行される理由がわかりません。
- this.content.widthとthis.content.heightの値がいつ取得されるか知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
//highslide-with-gallery.js Version 4.1.9 (2010-07-05)から抜粋 imageCreate : function() { var exp = this; var img = document.createElement('img'); //img要素生成 this.content = img; //img要素参照代入 //読込み完了時にcontentLoadedメソッド呼出し img.onload = function () { if (hs.expanders[exp.key]) exp.contentLoaded(); //contentLoadedメソッド呼出し }; //IEはimg要素のonloadイベントハンドラが実行されないケースがあるようです ... img.src = this.src; //src属性値設定 ... }, contentLoaded : function() { ... //this.contentはimg要素への参照 x.full = this.content.width; //width属性にアクセス y.full = this.content.height; //height属性にアクセス ... } これでなんとなく流れを掴めるでしょうか? contentLoadedメソッドが確実に呼出されているか確認してみて下さい。
その他の回答 (1)
- yyr446
- ベストアンサー率65% (870/1330)
ぱっと見ただけですが、 img.src = this.src; は、imageCreate : function() {}, の中にありますね。 imageCreate :は、hs.Expander.prototype = {} の中ですら、hs.Expander= function(a, params, custom, contentType) {}を継承しています。 imageCreate : function() {},の中で var exp = this; var img = document.createElement('img'); this.content = img; img.onload = function () { if (hs.expanders[exp.key]) exp.contentLoaded(); }; -------- の部分があります。 つまり、imgがロードされたときcontentLoaded()メソッドが実行されます。 this.content.width; this.content.height; については、同じくhs.Expander.prototypeの中のプロパティ で、 preloadFullImage : function (i) {} preloadImages : function (number) {} のメソッドがありこの中で取得されてるみたいです。 関数(オブジェクト)内で使かわれる、値を保持しながら、 次々と新たな関数(オブジェクト)を作って、thisを使って引き渡したり、 その関数(オブジェクト)を呼び出したりする仕組みは, Javascriptのプロトタイプチェーン と呼ばれるそうで、解析は、なかなか一筋縄にはいきませんが、時間をかけて じっくりとおいかけていけば、なんとなく見えてきます。
お礼
回答ありがとうございます もう少し追いかけてみて また質問させてもらうと思います ためになりました!!
補足
回答ありがとうございます preloadFullImage : function (i) {} preloadImages : function (number) {} 上記2つは、ページ呼び出し時には 実行されているようですが 画像拡大の際には実行されていませんでした
お礼
回答ありがとうございます なるほど、画像読み込みの際ですか!! なんとなく理解できてきましたが mg.src = this.src; と書くだけで、いろんなことが起こってるようで なんとも複雑です・・・