Как показать / скрыть сгенерированный неупорядоченный список

#javascript #jquery #html #list #twitter

#javascript #jquery #HTML #Список #Twitter

Вопрос:

Я использую этот код для генерации последних 5 твитов от данного пользователя.

Что я пытаюсь сделать, так это показывать каждый твит по одному за раз.

Я изменил скрипт так, чтобы сгенерированный список <ul> имел идентификатор. Вы можете увидеть изменения, которые я внес в строку 6 скрипта.

Вот скрипт, который я использую:

 $(document).ready(function () {
var tweets = $('#tweetlist li').hide();
    i = 0;

(function cycle() { 

    tweets.eq(i).fadeIn(600)
              .delay(4000)
              .fadeOut(600, cycle);

    i =   i % tweets.length;

})();
});
  

По какой-то причине это просто не работает. Перед обоими сценариями у меня вызван jquery, но в списке по-прежнему отображаются все элементы.

Вот jsfiddle, который я использовал:http://jsfiddle.net/wulfmann/qst8atkk/1

Странно то, что если я создаю список сам, он работает.

У меня такое чувство, что я упускаю что-то фундаментальное. По общему признанию, я не просматривал код скрипта Twitter построчно, поэтому, возможно, я что-то там пропустил.

Сейчас я изучаю jquery и javascript, поэтому я просто хотел бы убедиться, что я не упускаю что-то основное.

редактировать: В прилагаемом jsfiddle я не уменьшил js, чтобы вы могли видеть.

Ответ №1:

Ваш цикл fadeIn / fadeOut работает нормально. Однако в вашем примере вы запускаете его после загрузки документов и до завершения асинхронного действия (получение твитов), что означает, что список твитов пуст, а затем отображается полный список.

Чтобы предотвратить это, используйте customCallback параметры в конфигурации. После извлечения элементов обратный вызов отобразит их, скроет, а затем выполнит цикл fadeIn / fadeOut (демонстрационный вариант):

 var configProfile = {
  "profile": {"screenName": 'twitter'},
  "maxTweets": 5,
  "enableLinks": true, 
  "showUser": true,
  "showTime": true,
  "showImages": false,
  "customCallback": handleTweets,
  "lang": 'en'
};
twitterFetcher.fetch(configProfile);

function handleTweets(tweets) {
    var x = tweets.length;
    var n = 0;
    var element = document.getElementById('tweets');
    var html = '<ul>';
    while(n < x) {
      html  = '<li>'   tweets[n]   '</li>';
      n  ;
    }
    html  = '</ul>';
    element.innerHTML = html;

    var tweets = $(element).find('li').hide();

    var i = 0;

    (function cycle() { 

      tweets.eq(i).fadeIn(600)
        .delay(4000)
        .fadeOut(600, cycle);

      i =   i % tweets.length;

    })();
}
  

Комментарии:

1. Это имеет смысл. Определенно нужно прочитать больше по этому вопросу. Спасибо.