Я использую модальное окно для отображения изображений, когда они находятся на миниатюре.
Однако измененное изображение не загружается в модальное окно.
Первоначально src изображения не находится в моей разметке, но я добавляю его в разметку, добавляя его на лету. Я нажимаю на него второй раз, пик загружается в модальном режиме.
При просмотре консоли я могу получить высоту и ширину в первый раз. Во второй раз я получаю высоту и ширину плюс текст "загружен образ".
Я хочу проверить, загружена ли фотография, и если она завершена, а затем выполните оставшуюся часть кода. Если он не загружен, продолжайте проверку, пока он не будет загружен, а затем продолжите выполнение для остальной части кода.
Я прочитал другие статьи о переполнении стека, но ни один из них не работал для меня. Может кто-то, пожалуйста, помогите.
$(document).ready(function() {
function galleryStart ($current) {
var $tImage = $current.find('img');
var fullURL = $tImage.attr('src');
var $dFigure = $('#dialog-media figure .media');
var fullSrcURL = "images/mypicture";
var fullSrcURL = fullURL.replace(".jpg", "_full.jpg");
var image;
function onload () {
console.log(image.height, image.width);
var objHeight = image.height;
var objWidth = image.width;
}
image= new Image();
image.src=fullSrcURL;
if (image.complete) {
console.log('image already loaded to browser');
onload();
} else {
image.onload = onload;
console.log('xxx');
}
$dFigure.append('<img id="dialog-media-object" src="' + fullSrcURL + '" alt="' + $tImage.attr('alt') + '" />');
//Execute more code here once the image has finished loading
//More code to load the image into the modal window
}
$('a.dialog-media').click(function (event) {
event.preventDefault();
$("#dialog").dialog({
height: "auto", //720
width: "auto", //960
draggable: false,
modal: true,
//position: {
// my: "center",
// at: "center",
// of: window },
open: function(event, ui){
galleryStart(tLink);
},
close: function(event, ui){
galleryEnd();
$(this).dialog('destroy').remove();
});
}); // заключительный тег закрытия
Вы можете использовать событие onload для изображений как таковых:
image= new Image();
image.onload = onLoadHandler;
image.src=fullSrcURL;
function onLoadHandler() {
alert("Image is loaded!");
}
Примечание. Важно, чтобы вы назначили onLoadHandler
на image.onload
перед назначением источника.
Поэтому в вашем случае я пропустил бы весь оператор image.complete
и сделал бы что-то вроде этого:
var $dFigure = $('#dialog-media figure .media');
var fullSrcURL = "images/mypicture";
var image;
function onload () {
console.log(image.height, image.width);
var objHeight = image.height;
var objWidth = image.width;
$dFigure.append('<img id="dialog-media-object" src="' + fullSrcURL + '" alt="' + $tImage.attr('alt') + '" />');
}
image= new Image();
image.onload = onload;
image.src=fullSrcURL;
onload
(или, по крайней мере, запустить его оттуда).
Просто создайте элемент DOM с помощью jQuery:
(function($){
$(function () {
// create image
$('<img>')
// add onLoad handler
.load(whenImageIsLoadedFunction)
// set the images 'src'
.attr('src', 'your/image/source.png');
});
function whenImageIsLoadedFunction() {
// do all your code here.
$(this).appendTo('#imageContainer');
}
}(jQuery));
$('#dialog-media figure .media');
что такоеfigure
? Должно ли это быть$('#dialog-media-figure .media');
вместо?figure
- это новый тег HTML5.