昨天我决定改进我的网站加载 YouTube 视频的方式,仅在用户请求时才嵌入它们。有时一个页面可能有多达 30 个视频,这需要很长时间才能加载。
这是我第一次尝试任何东西的“延迟加载”方法,我认为这很值得一问:
我能做些什么来改善这一点?
我怎样才能让它更优雅一点?
这是否完全忽略了延迟加载的要点?
JSF中。
忽略样式,因为这在这里无关紧要。
其工作方式是首先在包含视频 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();
});