JQuery append fadeIn
Аналогично: Использование fadein и append
Но решения для меня не работают. Я пытаюсь:
$('#thumbnails').append('<li><img src="/photos/t/'+data.filename+'"/></li>').hide().fadeIn(2000);
Но тогда весь список исчезает сразу, а не по мере добавления каждого элемента. Похоже, что hide()
и fadeIn()
применяются к $('#thumbnails')
, а не к <li>
. Как я могу заставить их обратиться к этому вместо этого? Это также не работает:
$('#thumbnails').append('<li stle="display:none"><img src="/photos/t/'+data.filename+'"/></li>').filter(':last').fadeIn(2000);
Другие предложения?
Ответы
Ответ 1
Ваша первая попытка очень близка, но помните, что append()
возвращает #thumbnails
, а не элемент, который вы только что добавили к нему. Вместо этого сначала создайте свой элемент и примените hide().fadeIn()
, прежде чем добавлять его:
$('#thumbnails').append($('<li><img src="/photos/t/'+data.filename+'"/></li>').hide().fadeIn(2000));
Это использует функцию доллара, чтобы построить <li>
раньше времени. Вы также можете записать его на две строки, конечно, если это станет более ясным:
var item = $('<li><img src="/photos/t/'+data.filename+'"/></li>').hide().fadeIn(2000);
$('#thumbnails').append(item);
Изменить: Ваша вторая попытка также почти существует, но вам нужно использовать children()
вместо filter()
. Последний удаляет узлы только из текущего запроса; ваш недавно добавленный элемент не находится в этом запросе, но вместо этого является дочерним node.
$('#thumbnails').append('<li stle="display:none"><img src="/photos/t/'+data.filename+'"/></li>').children(':last').hide().fadeIn(2000);
Ответ 2
$('<li><img src="/photos/t/'+data.filename+'"/></li>')
.appendTo('#thumbnails')
.hide().fadeIn(2000);
Ответ 3
Ответ Бена Бланка хорош, но угасание для меня - глючное. Попробуйте затухать после добавления:
var item = $('<li><img src="/photos/t/'+data.filename+'"/></li>').hide();
$('#thumbnails').append(item);
item.fadeIn(2000);
Ответ 4
Попробуйте!
$('#thumbnails').append(<li> your content </li>);
$('#thumbnails li:last').hide().fadeIn(2000);
Ответ 5
Попробуйте следующее:
$('<li><img src="/photos/t/'+data.filename+'"/></li>').hide().appendTo('#thumbnails').fadeIn(2000);
Ответ 6
Вот решение, с которым я пошел:
function onComplete(event, queueID, fileObj, response, info) {
var data = eval('(' + response + ')');
if (data.success) {
$('#file-' + queueID).fadeOut(1000);
var img = new Image();
$(img).load(function () { // wait for thumbnail to finish loading before fading in
var item = $('<li id="thumb-' + data.photo_id + '"><a href="#" onclick="deletePhoto(' + data.photo_id + ')" class="delete" alt="Delete"></a><a href="#" class="edit" alt="Edit"></a><div class="thumb-corners"></div><img class="thumbnail" src="/photos/t/' + data.filename + '" width=150 height=150/></li>');
$('#thumbnails').append(item.hide().fadeIn(2000));).attr('src', '/photos/t/' + data.filename);
} else {
$('#file-' + queueID).addClass('error');
//alert('error ' + data.errno); // TODO: delete me
$('#file-' + queueID + ' .progress').html('error ' + data.errno);
}
}
}
Это работает с uploadify. Он использует событие jquery load
, чтобы дождаться завершения загрузки изображения до его появления. Не уверен, что это лучший подход, но это сработало для меня.