2013-05-22 2 views
0

J'essaie d'afficher une liste de vidéos YouTube d'une playlist sur ma page. Je peux obtenir les vidéos à afficher très bien. J'essaye d'ajouter "trier" par le nom ou la date de la vidéo, mais quand j'ajoute le code, la page ne rend pas les vidéos du tout.Le bloc de jQuery empêche la page de s'afficher

Voici le HTML:

<div class="hg-portfolio-sortable"> 
<div id="sorting" class="fixclear"> <span class="sortTitle">Sort By: </span> 

    <ul id="sortBy" class="option-set " data-option-key="sortBy" data-default=""> 
     <li><a href="#sortBy=name" data-option-value="name">Name</a> 
     </li> 
     <li><a href="#sortBy=date" data-option-value="date">Date</a> 
     </li> 
    </ul> <span class="sortTitle">Direction: </span> 

    <ul id="sort-direction" class="option-set " data-option-key="sortAscending"> 
     <li><a href="#sortAscending=true" data-option-value="true">ASC</a> 
     </li> 
     <li><a href="#sortAscending=false" data-option-value="false">DESC</a> 
     </li> 
    </ul> 
</div> 
<ul id="portfolio-nav" class="fixclear"> 
    <li class="current"><a href="#" data-filter="*">All</a> 
    </li> 
    <li><a href="#" data-filter=".websites">Websites</a> 
    </li> 
    <li><a href="#" data-filter=".print">Print</a> 
    </li> 
    <li><a href="#" data-filter=".logo">Logo</a> 
    </li> 
</ul> 
<div class="clear"></div> 
<ul id="thumbs"></ul> 

et est ici le script dans le $(window).load(function()):

//SORTING CODE 
// settings 
var sortBy = 'date', 
    sortAscending = true, 
    theFilter = ''; // DEFAULT FILTERING CATEGORY 

$('#sortBy li a').each(function (index, element) { 
    var $t = $(this); 
    if ($t.attr('data-option-value') == sortBy) $t.addClass('selected'); 
}); 
$('#sort-direction li a').each(function (index, element) { 
    var $t = $(this); 
    if ($t.attr('data-option-value') == sortAscending.toString()) $t.addClass('selected'); 
}); 
$('#portfolio-nav li a').each(function (index, element) { 
    var $t = $(this), 
     tpar = $t.parent(); 
    if ($t.attr('data-filter') == theFilter) { 
     $('#portfolio-nav li a').parent().removeClass('current'); 
     tpar.addClass('current'); 
    } 
}); 


if ($("ul#thumbs").length > 0) { 
    var $container = $("ul#thumbs"); 
    $container.isotope({ 
     itemSelector: ".item", 
     animationEngine: "jquery", 
     animationOptions: { 
      duration: 250, 
      easing: "easeOutExpo", 
      queue: false 
     }, 
     filter: theFilter, 
     sortAscending: sortAscending, 
     getSortData: { 
      name: function ($elem) { 
       return $elem.find("span.name").text(); 
      }, 
      date: function ($elem) { 
       return $elem.attr("data-date"); 
      } 
     }, 
     sortBy: sortBy 
    }); 
} 
//END SORTING CODE 

//VIDEO CODE 
var playListURL = 'http://gdata.youtube.com/feeds/api/playlists/SP8CE46F72D4FE9E45?v=2&alt=json&max-results=50&callback=?'; 
var videoURL = 'http://www.youtube.com/watch?v='; 
$.getJSON(playListURL, function (data) { 
    var list_data = ""; 
    var column_count = -1; // -1; 
    var end_li = "</li>"; 
    var begin_div = "<div class='inner-item'>"; 
    var end_div = "</div>"; 
    var html_data = ""; 

    $.each(data.feed.entry, function (i, item) { 
     column_count = column_count + 1; 
     var feedTitle = item.title.$t; 
     var feedURL = item.link[1].href; 
     var videoDate = item.published.$t; 
     var fragments = feedURL.split("/"); 
     var videoID = fragments[fragments.length - 2]; 
     var description = ""; item.description; //RETURNS Undefined. 
     var url = videoURL + videoID; 
     var thumb = "http://img.youtube.com/vi/" + videoID + "/default.jpg"; 
     var begin_li = "<li class='item websites ###' data-date='" + videoDate + "'>"; 
     var even_odd = "even"; 
     var begin_h4 = "<h4 class='title'>"; 
     var end_h4 = "</h4>"; 

     if (column_count % 2) even_odd = "odd"; 

     begin_li = begin_li.replace("###", even_odd); 

     html_data += begin_li + begin_div + 
      '<a data-rel="prettyPhoto[iframes]" class="hoverLink" href="' + url + '">' + 
      '<img src="' + thumb + '" alt="' + feedTitle + '" />' + 
      '</a>' + begin_h4 + 
      '<a href="' + url + '" target="_blank"><span class="name">' + feedTitle + '</span></a>' + end_h4 + 
      '<span class="moduleDesc">' + 
      '<p>' + description + '</p>' + 
      '</span>' + 
      '<div class="clear"></div>' + end_div + end_li; 
    }); 
    $(html_data).appendTo("#thumbs"); 

}); 

En bref, le getJSON crée le code html pour chaque vidéo et ajoute à la <ul id="thumbs"> tag. Encore une fois, cela fonctionne mais quand j'ai ajouté mon code "Sorting", la page ne s'affiche pas du tout maintenant. Des idées pourquoi? En outre, j'ai essayé d'obtenir la "description" du flux mais item.description renvoie undefined, pourtant il y a une description pour toutes ces vidéos? Et j'essaie aussi de comprendre pourquoi il les affiche de "Right to Left". Si vous prenez le violon ci-dessous et ajoutez /show à la fin, vous verrez de quoi je parle. Pourquoi cela ne les ajouterait-il pas "de gauche à droite" comme prévu?

Voici un violon pour tout mettre ensemble: UPDATED Fiddle et j'utilise jQuery 1.8.2. (même si le violon dit 1.8.3).

MISE À JOUR

Désolé pour la confusion avec jsFiddle ... Je ne savais pas après chaque fois que j'appuie sur « Mise à jour », je dois aussi fournir cette URL pour tout le monde (je me suis dit qu'il aurait mis à jour les vieilles urls). En tout cas, le dernier est maintenant dans le lien. Avec la façon dont le violon est actuellement assis (Version # 22), les problèmes que je rencontre sont les suivants:

1.) Aucune vidéo n'est affichée. Si vous commentez tout au-dessus de cette ligne var playListURL=... alors vous verrez que vous obtenez des vidéos .... mais bien sûr, pas de tri. 2.) ne peut toujours pas obtenir description de chaque vidéo (item.description renvoie undefined) 3.) Si vous commentez le code de # 1, puis ajoutez /show à la fin de l'URL, vous verrez le rendu HTML, vidéos et tout (pas de tri) mais faites défiler vers le bas et vous verrez qu'ils sont alignés à droite, pas à gauche.

+0

A partir de la console: Uncaught TypeError: Object # n'a pas de méthode 'easeOutExpo' – Mansfield

+0

J'ai ajouté les js au violon qui a cela en elle (plugins.js). – Robert

+0

Avez-vous mis à jour le lien du violon? Je ne peux pas le voir chargé et la même erreur se produit toujours. – Mansfield

Répondre

0

Why wouldn't this append them "Left to Right" as expected?

Append signifie ajouter à la fin.Vous devrez peut-être .prepend()

La description est assez facile à trouver en utilisant un console.log(data):

item.media$group.media$description.$t 

La raison pour laquelle vos vignettes ne sont pas affichés est probablement dû à une animation, ce qui provoque les éléments pour obtenir les propriétés CSS overflow: hidden et height: 0, ce qui rend l'élément invisible.

enter image description here

+0

Je me demandais pourquoi les éléments apparaissaient dans la console mais pas sur la page. Je suis encore nouveau à l'utilisation de la console et tel mais cela répond à ma question principale pour savoir pourquoi le vidz ne se présentait pas. J'ai supprimé cette animation pour le moment. Merci encore. – Robert

0

Pour votre problème description

http://jsfiddle.net/guMQa/23/

Nous devons utiliser ce JS pour saisir cette information

var description = item.media$group.media$description.$t; 

espoir que vous avez aidé à cela. Je vais regarder dans le reste et mettre à jour comme je vais

Est-ce ce que vous vouliez?

http://jsfiddle.net/guMQa/24/

+0

Cela obtient la description, comme prévu. Je vois que vous avez supprimé le code 'easing', comme c'était le cas de DJDavid98, rendant l'élément invisible. Merci beaucoup pour ça! – Robert

+0

Le code fonctionne-t-il comme vous voulez ou a-t-il besoin de plus? Plus facile à voir sur JSBIN ici http://jsbin.com/iqulol/1 – EasyBB

+0

Je pense que les fonctions 'sort' de 'Date' ne fonctionnent pas. Si vous cliquez sur "Nom", ils trient, mais rien ne se passe si vous cliquez sur "Date". – Robert

Questions connexes