• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:画像拡大スクリプトのソース内で・・・疑問)

画像拡大スクリプトのソース内で疑問

このQ&Aのポイント
  • 画像拡大スクリプトのソース内に不具合があり、ソースコードを確認しています。
  • 特定の記述によって、関数が実行される理由がわかりません。
  • this.content.widthとthis.content.heightの値がいつ取得されるか知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • my--
  • ベストアンサー率89% (91/102)
回答No.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メソッドが確実に呼出されているか確認してみて下さい。

re_shigotonin
質問者

お礼

回答ありがとうございます なるほど、画像読み込みの際ですか!! なんとなく理解できてきましたが mg.src = this.src; と書くだけで、いろんなことが起こってるようで なんとも複雑です・・・

その他の回答 (1)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

ぱっと見ただけですが、 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のプロトタイプチェーン と呼ばれるそうで、解析は、なかなか一筋縄にはいきませんが、時間をかけて じっくりとおいかけていけば、なんとなく見えてきます。

re_shigotonin
質問者

お礼

回答ありがとうございます もう少し追いかけてみて また質問させてもらうと思います ためになりました!!

re_shigotonin
質問者

補足

回答ありがとうございます preloadFullImage : function (i) {} preloadImages : function (number) {} 上記2つは、ページ呼び出し時には 実行されているようですが 画像拡大の際には実行されていませんでした

関連するQ&A