ユーザーがオブジェクト、画像を挿入できるようにしてから、そのオブジェクトの関数を呼び出します。私にはランダムに思えますが、うまくいくこともあればうまくいかないこともあります.DOMがまだ更新されていないことに関係していると思いますか?
//add a new image
function add_image(img) {
var objCount = count_objects() + 1;
var objId = 'object_'+objCount;
var myNewImg = jQuery('<div/>', {
id: objId,
class: 'object_image invisible',
}).appendTo('#objectbox');
//sätt objektnamnet (användaren kan ändra senare)
$('#'+objId).attr('namn', objId)
//sätt låsta proportioner som standard
$('#'+objId).addClass('lockedAspectRatio')
//lägg till bilden i detta element
var imgInner = jQuery('<img/>', {
id: objId,
class: 'object_image_inner',
src: img,
}).appendTo( '#'+objId );
window.objectCounter++;
prepare_editmode();
//reset the flag and the temporary image field now that image adding is complete
$('#imageGhost').val(null);
//fixa rätt storlek på bilden
setTimeout(function(){
restoreSize(myNewImg,imgInner);
$(myNewImg).removeClass('invisible');
}, 1500);
}
最後の機能をボタンで1秒ほど後に手動でトリガーすると、常に機能するためです。
function restoreSize(myImg,imgInside) {
if (imgInside == null) {
console.log("nothing passed");
var imgInside = $(myImg).find('img');
}
else {
console.log("passed alright");
}
//remove fixed dimensions on containing div
$(myImg).css("height", 'auto' );
$(myImg).css("width", 'auto' );
//remove the 100% attribute on the image
$(imgInside).css("width", 'auto' );
$(imgInside).css("height", 'auto' );
//get calculated dimensions of div once img original size determines it
var newWidth = $(myImg).css("width");
var newHeight = $(myImg).css("height");
//...and set them firmly.
$(myImg).css("width", newWidth );
$(myImg).css("height", newHeight );
//restore the height/width 100% property to image in case of new resize
$(imgInside).css("width", '100%' );
$(imgInside).css("height", '100%' );
}
同じ結果でタイムアウトゼロを試みます-画像がロードされている場合とそうでない場合があるため、ランダムに動作し、画像が大きい場合(ブラウザーでの読み込みに時間がかかる)、もちろんより頻繁に失敗します。現在、秒のタイムアウトでバイパスしていますが、それはかなりの解決策ではありません:-/おそらく、画像をチェックし続け、見つかった場合にのみ処理を続行するループを find('img') に置くことができますか? しかし、それは時々無限ループの問題に私を突き刺すかもしれませんか?