jQuery добавление исчезает - PullRequest
91 голосов
/ 11 июня 2009

Аналогично: Использование 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);

Другие предложения?

Ответы [ 6 ]

190 голосов
/ 11 июня 2009

Ваша первая попытка очень близка, но помните, что 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(). Последний удаляет только узлы из текущего запроса; Ваш недавно добавленный элемент отсутствует в этом запросе, а является дочерним узлом.

$('#thumbnails')
    .append('<li stle="display:none"><img src="/photos/t/'+data.filename+'"/></li>')
    .children(':last')
    .hide()
    .fadeIn(2000);
41 голосов
/ 30 июня 2011
$('<li><img src="/photos/t/'+data.filename+'"/></li>')
    .appendTo('#thumbnails')
    .hide().fadeIn(2000);
29 голосов
/ 04 декабря 2009

Ответ Бена Бланка хорошо, но затухание, для меня, глючно. Попробуйте исчезнуть в после добавления :

var item = $('<li><img src="/photos/t/'+data.filename+'"/></li>').hide();
$('#thumbnails').append(item);
item.fadeIn(2000);
3 голосов
/ 21 октября 2013

Попробуй!

 $('#thumbnails').append(<li> your content </li>);
 $('#thumbnails li:last').hide().fadeIn(2000);
2 голосов
/ 02 марта 2016

Попробуйте это:

$('<li><img src="/photos/t/'+data.filename+'"/></li>').hide().appendTo('#thumbnails').fadeIn(2000);
0 голосов
/ 24 октября 2014

Вот решение, которое я выбрал:

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, чтобы дождаться завершения загрузки изображения, прежде чем оно появится. Не уверен, что это лучший подход, но он сработал для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...