如何设置视频背景为白/透明并实现滚动时标题变色与视频淡显
实现方案:首次滚动触发视频变淡+标题颜色切换
核心思路
通过监听首次滚动事件,给目标元素添加预定义的CSS类,利用CSS过渡实现平滑视觉变化,全程逻辑极简,适合JS基础较弱的开发者。
1. HTML 结构
基础结构包含视频容器和标题,给元素加类名方便选择:
<!-- 核心区域容器 --> <div class="hero-wrap"> <!-- 背景视频 --> <video class="bg-video" src="your-video.mp4" <!-- 替换成你的视频地址 --> autoplay muted loop playsinline poster="video-cover.jpg" <!-- 视频加载前的封面图 --> ></video> <!-- 标题文本 --> <h1 class="page-title">你的页面标题</h1> </div>
2. CSS 样式
设置初始状态和滚动后的状态,添加过渡动画保证平滑:
/* 全局重置(可选,避免默认样式干扰) */ * { margin: 0; padding: 0; box-sizing: border-box; } /* 核心容器占满视口 */ .hero-wrap { position: relative; width: 100vw; height: 100vh; overflow: hidden; } /* 背景视频初始状态:完全不透明 */ .bg-video { width: 100%; height: 100%; object-fit: cover; opacity: 1; /* 过渡动画,保证变化平滑 */ transition: opacity 0.8s ease; } /* 标题初始状态:白色,居中 */ .page-title { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: #fff; font-size: 3rem; /* 和视频同步过渡 */ transition: color 0.8s ease; } /* 滚动触发后的状态类 */ .hero-wrap.scrolled .bg-video { opacity: 0.4; /* 透明度降低,视频变淡 */ } .hero-wrap.scrolled .page-title { color: #000; /* 标题切换为黑色 */ }
3. JS 逻辑
只监听首次滚动,触发后停止监听,避免重复执行:
// 标记是否已经触发过动画 let isTriggered = false; // 监听滚动事件 window.addEventListener('scroll', function() { // 仅在首次滚动时执行 if (!isTriggered) { // 给容器添加滚动触发类 document.querySelector('.hero-wrap').classList.add('scrolled'); // 标记为已触发,后续不再执行 isTriggered = true; // 可选:触发后移除滚动监听,减少性能消耗 window.removeEventListener('scroll', arguments.callee); } });
使用说明
- 把上述三部分代码合并到一个HTML文件中
- 替换视频地址为你自己的视频文件路径
- 直接在浏览器打开文件即可看到效果:页面加载后,首次滚动鼠标滚轮,视频会逐渐变淡,标题同步从白色切换为黑色
内容的提问来源于stack exchange,提问作者user9671171
相关产品推荐
相关产品推荐

