Ieri ho deciso di migliorare il modo in cui il mio sito web carica i video di YouTube solo incorporandoli quando un utente li richiede. A volte una pagina può contenere fino a 30 video e questo richiederebbe molto tempo per essere caricato.Primo tentativo di caricamento lento (posticipazione del carico di video di YouTube incorporati): come posso farlo con più garbo?
Questa è la prima volta che ho tentato un metodo "lazy loading" di qualsiasi cosa, e ho pensato che sarebbe valsa la pena chiedere:
Che cosa posso fare per migliorare su questo?
Come posso renderlo un po 'più elegante?
Questo manca completamente il punto di caricamento differito?
Ignora lo stile poiché è irrilevante qui.
Il modo in cui funziona è quello di prima immissione un'ancora nella pagina contenente l'ID del video:
<a href="#" data-video="FzRH3iTQPrk" class="youtube-video">
Il jQuery dietro poi loop attraverso ogni a.youtube-video
e crea un arco trasparente con miniatura del video come il suo sfondo:
$('a.youtube-video').each(function() {
var videoId = $(this).attr('data-video');
var videoThumbnail = "http://img.youtube.com/vi/" + videoId + "/0.jpg";
var videoBackground = $('<span class="youtube-thumbnail"></span>');
videoBackground.css({
background:"#fff url('"+videoThumbnail+"') no-repeat"
})
...
E 'quindi modifica lo stile del tag di ancoraggio (questo è fatto qui per evitare che interessano i browser con JavaScript disabilitato):
$(this).css({
height:315,
width:460,
position:"relative",
display:"block",
textAlign:"center",
color:"#fff",
fontSize:26
});
E poi finisce il ciclo con l'aggiunta del brano a l'ancora:
$(this).text('Click to load video');
$(this).append(videoBackground);
});
Il caricamento dell'oggetto video di YouTube incorporato si verifica l'ancora clic:
$('a.youtube-video').click(function(e) {
e.preventDefault();
var videoId = $(this).attr('data-video');
var videoThumbnail = "http://img.youtube.com/vi/" + videoId + "/0.jpg";
var videoEmbed = $('<object> ... </object>');
...
Questo termina aggiungendo il codice di incorporamento al padre dell'ancora e rimuovendo l'ancora:
$(this).parent().append(videoEmbed);
$(this).hide();
});
Che cosa stai usando il videoThumbnail sul gestore clicca per? Sto lavorando a qualcosa di simile, e un problema che ho riscontrato è la quantità di ripetizioni che si verificano per ogni video. La tua esperienza potrebbe essere diversa. Inoltre, considera la riproduzione automatica del video dopo il clic iniziale, in modo che gli utenti non debbano fare clic due volte. – lrusli
Ah, l'ho rimosso ora. Era per il momento in cui inizialmente usavo le piccole miniature - a clic si espandeva l'immagine e la si sostituiva con la miniatura più grande. –
Hai dato un'occhiata all'API di YouTube per incorporare comodamente i video, hanno un jS api (https://developers.google.com/youtube/js_api_reference) e un iframe api (https://developers.google.it/youtube/iframe_api_reference) – Arindam