1
アップロード前に画像のプレビューを表示する簡単なハンドラーを作成しています。ここに私のサンプルコードは次のとおりです。画像の高さを取得できません。代わりにnaturalHeightを取得します。
function subscribeImageShower() {
$('input[type="file"][data-image-show]')
.each(function() {
var $input = $(this);
var $img = $($input.data('image-show'));
var selectCallback = window[$input.data('image-selected')];
var unselectCallback = window[$input.data('image-unselected')];
$(this)
.on('change reset',
function() {
if (this.files && this.files[0]) {
var reader = new FileReader();
reader.onload = function(event) {
$img.attr('src', event.target.result);
$img.show();
if (selectCallback) {
$img.one('load', selectCallback);
}
};
reader.readAsDataURL(this.files[0]);
} else {
$img.removeAttr('src');
$img.hide();
if (unselectCallback) {
unselectCallback($img[0]);
}
}
});
});
}
マークアップ:選択したコールバックで
<div class="modal-body">
<div id="logoCanvasDiv">
<img id="logoSampleImg" width="350" style="position: absolute;"/>
<canvas id="logoCanvas" width="350" style="border: thick; position: absolute"></canvas>
</div>
<div>
<input type="file" name="modelFile" data-image-show="#logoSampleImg" data-image-selected="onLogoSelected" data-image-unselected="onLogoUnselected"/>
<input type="hidden" name="objectId" value="@Model.PageObject.Id" hidden />
</div>
</div>
私は画像の幅と高さを取得したい:
画像についてはfunction onLogoSelected(event) {
var img = event.target;
alert('jQuery height = ' + $(img).height());
alert('DOM height = ' + img.height);
}
幅800x600
と次の例では、私はそれぞれ0
と600
になります。 しかし、いつか私は実際の画像サイズ - 350x263
を取得します。
なぜこのような無効な情報が得られますか?イメージサイズが完全にロードされた後、どのようにイメージサイズを取得できますか? load
イベントを購読しましたが、動作していないようです。
再現方法:ファイルを選択してください。正しく読み込まれています。ファイルの選択を解除します。次に、それを再度選択します。今すぐheight
は無効です。
getComputedHeight()を試してください。それは解決策です。 – Feathercrown
@Feathercrown 'getComputedStyle'は私があなたに言及していると信じているものです。 –
そうですね。ありがとう:3 – Feathercrown