在网页视觉表现中,将视频作为全屏背景并让它随页面滚动而播放,是提升沉浸感的有效手段。借助jQuery可以快速绑定滚动事件并计算播放进度,但其中涉及视频加载、样式固定与性能优化等多个环节,需要系统处理。

一、页面结构与基础样式
要实现全屏滚动视频背景,首先需要在HTML中放置一个video元素,并将其定位为固定背景。通常我们会把video放在body直接子级,使用CSS的position:fixed让它始终覆盖视窗,同时设置z-index在内容之下。这样无论页面如何滚动,视频位置都不会移动,视觉上形成背景层。
视频本身需要去掉控件并设置为自动播放的静音状态,因为浏览器禁止带声音的视频自动播放。代码上可写video标签属性为muted、playsinline、preload="auto"。外层内容区块则需设置较高的z-index和半透明背景,保证文字可读。如下面结构所示,视频作为背景,后续section承载滚动内容。
- video元素:固定定位,宽高100%,object-fit:cover
- 内容容器:相对定位,z-index高于视频
- 页面总高度:由多个section撑开,产生滚动距离
二、jQuery监听滚动并同步进度
核心逻辑是:获取文档总可滚动高度,再取当前滚动条位置,算出百分比,最后将该比例乘以视频总时长赋给currentTime。jQuery中可用$(window).on("scroll", function(){...})来监听。在回调里通过$(document).scrollTop()得到滚动距离,用$(document).height()-$(window).height()得到最大滚动范围。
需要注意视频元数据加载完毕才能读取duration。因此应在video的loadedmetadata事件中缓存总时长,避免滚动时取到NaN。下面给出关键步骤:先定义变量video=document.getElementById("bgvid"),在loadedmetadata后记total=video.duration;滚动时计算rate=scrollTop/maxScroll,video.currentTime=rate*total。为防止频繁设置造成卡顿,可用requestAnimationFrame节流。
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 绑定scroll事件 | 用jQuery监听窗口滚动 |
| 2 | 计算比例 | 滚动距除以最大滚动距 |
| 3 | 设置currentTime | 比例乘duration赋给视频 |
三、移动端与性能注意事项
在手机上,视频全屏背景可能消耗过多流量且滚动同步不流畅。建议对移动设备改用海报图加简化动画,或检测屏幕宽度后不加载视频。另外iOS对video.play()有严格限制,即使静音也常需用户触发,所以同步进度前要确保视频已通过某次交互开始播放,否则currentTime赋值无效。
性能方面,滚动事件触发极密集,直接写currentTime会让视频频繁跳转。除了用requestAnimationFrame,也可设定阈值,例如进度变化超过0.5%才更新。同时视频编码选用webm或mp4的faststart格式,让元数据前置,减少loadedmetadata等待时间,从而提升同步响应速度。
四、完整思路总结
整体来看,用jQuery制作这类效果并不复杂,重点在于结构分层清晰、视频元数据就绪后再绑定逻辑、以及移动端降级处理。只要把握住滚动距离到播放时间的线性映射,就能让背景视频随用户浏览节奏讲述故事,适用于产品展示页或活动落地页。
实践中建议把视频体积控制在几MB内,并在服务器端开启压缩。若发现安卓微信下不同步,可检查是否用了x5内核兼容模式,必要时用document.documentElement.scrollTop兼容取值。掌握这些细节,全屏滚动视频背景便能稳定上线。