0

ここで見つけた解決策に従って画像をメモリに読み込んでいますが、それは問題ありませんが、コールバック内にあるため、プロパティの幅と高さはその外部では定義されていません。

var originalWidth, originalHeight;
$("<img/>") // Make in memory copy of image to avoid css issues
    .attr("src", $(img).attr("src"))
    .load(function() {
        originalWidth = this.width;   // Note: $(this).width() will not
        originalHeight = this.height; // work for in memory images.
    });
console.log(originalWidth); // undefined obviously since `this` is only accessible within `load`s callback. 

私は多分それを次のようなオブジェクト内に置くことを考えました:

var originalWidth, originalHeight;
var imgDimensions = {};
$("<img/>") // Make in memory copy of image to avoid css issues
    .attr("src", $(img).attr("src"))
    .load(function() {
        imgDimensions.originalWidth = this.width;   // Note: $(this).width() will not
        imgDimensions.originalHeight = this.height; // work for in memory images.
    });
console.log(imgDimensions['originalWidth']); // undefined also

load()内からこれらのプロパティを返すにはどうすればよいですか?

4

3 に答える 3

2

console.logload関数が起動する前に実行されているため、originalWidthまだ更新されていません。

于 2012-11-02T21:35:46.047 に答える
1

コールバックがいつ実行されるかわからないか、制御できないため、ログの呼び出しに値が使用できることを保証できません。

ディメンションで何をしたいかによっては、1つの解決策として、onloadイベントハンドラーをimgタグに追加して、アイテムが実際に読み込まれた後に値にアクセスできるようにすることが考えられます。

于 2012-11-02T21:41:07.153 に答える
0

コールバック内から呼び出すとconsole.log()、便利な結果が得られるはずです。

var originalWidth, originalHeight;
var imgDimensions = {};
$("<img/>") // Make in memory copy of image to avoid css issues
    .attr("src", $(img).attr("src"))
    .load(function() {
        imgDimensions.originalWidth = this.width;   // Note: $(this).width() will not
        imgDimensions.originalHeight = this.height; // work for in memory images.
        console.log(imgDimensions);
    });

他の人が説明しているように、.load()コールバックは将来の不特定の時間に実行されます。それまでは、imgDimensions変数を使用しようとしても意味がありません。

于 2012-11-02T22:47:36.013 に答える