我有一个客户,要求在其主页上自动播放视频。 通常,我们作为设计师的工作是将我们大脑中的第一想法
“我的天哪。 这是什么鬼? 你想把用户赶走,永远不再回来吗?”
转换成类似
“我不确定这是否是目前最好的主意。 一些人发现网站上的自动播放视频很烦人,我们的目标是让用户留在网站上,以便他们可以更多地了解您。”
但有时会变成
“好的,先生。”
好吧,不能每次都如愿以偿。 因此,我做了。 我甚至找到一个很棒的小型 Flash 视频播放器,它可以实现人们在视频播放器中喜欢的所有酷炫功能,例如拖动、全屏模式和音量控制。 我甚至在默认情况下静音了视频,至少用户不会被不需要的声音轰炸。
但几天后我接到了电话
“为什么我们的主页加载速度变慢了?!”
再次回到大脑
“呃,因为现在你的主页上有一个 5MB 的视频,即使它正在流式传输,它仍然会占用你的网络连接,并且会使其他所有内容加载速度变慢。”
这应该翻译成
“我马上就会调查这个问题。 我怀疑这与我们添加到主页上的视频有关,也许我们需要重新考虑一下。”
这变成了
“我马上就处理。 对不起,先生。”
解决问题
因此,正如我们的大脑迅速推断的那样,这里的问题是,将如此大的文件放在我们的页面上会减慢也在同时尝试加载的其他页面元素的速度。 那么,解决方案是确保视频在页面其余部分加载之后再加载。
为了做到这一点,我们将完全从页面中删除视频代码。 然后仅通过 JavaScript 动态添加它。 从技术上讲,我想,AJAX。 通过 JavaScript 执行此操作的好处是,我们能够等待整个页面加载的事件,然后再进行动态添加。
首先,我们在页面上为视频创建一个位置。 一个空的 div 就可以了
<div id="movie-area">
</div>
这样我们就可以使用 CSS 为该区域设置样式。 这是一个好主意,这样当视频被添加时,它不会突然将内容移出该区域来为自己腾出空间。 我们还将使该区域变为黑色,更像电影
#movie-area {
width: 320px;
height: 240px;
background: black;
}
空 div 的另一个原因是,我们可以将其作为 JavaScript 的目标区域,用于插入视频代码。 让我们编写一个简单的 JavaScript 代码来完成这项工作
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(window).bind("load", function() {
$('#movie-area').load('movie.html');
});
</script>
我正在使用 jQuery 来执行此操作。 jQuery 使这项工作变得更加容易。 以上代码,用通俗易懂的语言来说:“等待整个页面加载,然后找到 id 为“movie-area”的 div,然后获取文件“movie.html”并将它的内容插入到找到的 div 中。 “movie.html”文件当然会包含我想要的视频的任何标记。 可能是某种对象或脚本。
效果很好。
查看演示
注意:演示在视频上方有一个大图像。 此图像需要加载一段时间 - 因此您可以看到视频如何在该图像加载完成后再加载。
很好的解决方案。 我也遇到过同样的问题,并用同样的方法解决了它。
很棒的文章。 你可以提供一个你找到的视频播放器的链接吗?
你能把
也放到 movie.html 中吗?
@sgallant: 这是播放器。
当你手动编写播放器的 object 元素时,这是最好的主意,并且你确保它在所有浏览器中都受支持。 但是如果你只是想完成工作,可以使用 SWFObject。 结果 - 几乎一样。 :)
是的,我知道 embed 标签完全错误 - 我自己也是个完美主义者。 ;)
我相信 SWFobject 不会等待所有图像加载,只等待 DOM。 但我可能错了?
Chris,我看到你想要我们讨论的最小方法。 但我想在这里扮演一下魔鬼的代言人。
如果用户禁用了 JavaScript 会怎样?
如果页面上有一个项目永远无法完全加载怎么办?
第一个很容易
第二个可能有点复杂,但我认为最简单的方法是在某个地方放一个 setTimeout,并设置一个任意时间,如果页面在该时间之前没有加载,则执行视频加载,如果加载了,则取消超时。
我想我会假设对于#1,如果你没有启用 JavaScript,你可能也没有观看视频所需的条件,所以最好不要尝试加载它。
#2 我之前没有想过。 我想大约 30 秒的计时器就可以了。 给页面足够的时间,但不要太长,以至于用户会放弃(如果他们真的想看它)
抱歉,我的帖子中应该有代码
这将是针对没有 JS 的修复。
好的,看起来代码标签工作不正常,基本上我想说的是用 noscript 标签包装一个 embed。
很棒的文章,对我当前的项目非常有用。