昨日、ユーザーがYouTube動画をリクエストしたときにのみ埋め込むことで、ウェブサイトがYouTube動画を読み込む方法を改善することにしました。1ページに30本もの動画が含まれている場合があり、これには読み込みに長い時間がかかります。
何かの「遅延読み込み」方法を試したのはこれが初めてであり、質問する価値があると思いました。
これを改善するために何ができますか?
どうすればもう少し優雅にすることができますか?
これは、遅延ロードのポイントを完全に見逃していますか?
ここでは関係ないので、スタイリングは無視してください。
これが機能する方法は、最初にビデオのIDを含むページにアンカーを配置することです。
<a href="#" data-video="FzRH3iTQPrk" class="youtube-video">
次に、背後にあるjQueryがすべてをループa.youtube-video
し、ビデオのサムネイルを背景として透明なスパンを作成します。
$('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"
})
...
次に、アンカータグのスタイルを変更します(これは、JavaScriptが無効になっているブラウザーに影響を与えないようにするためにここで行われます)。
$(this).css({
height:315,
width:460,
position:"relative",
display:"block",
textAlign:"center",
color:"#fff",
fontSize:26
});
次に、アンカーにスパンを追加してループを終了します。
$(this).text('Click to load video');
$(this).append(videoBackground);
});
埋め込まれたYouTubeビデオオブジェクトの読み込みは、アンカークリックで行われます。
$('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>');
...
これは、埋め込みコードをアンカーの親に追加し、アンカーを削除することで終了します。
$(this).parent().append(videoEmbed);
$(this).hide();
});