新闻中心
CSS Spotlight 效果实现教程:初始居中及响应式优化

本教程将引导你使用 CSS、HTML 和 J*aScript 创建一个聚光灯(Spotlight)效果。我们将解决页面加载时聚光灯不在页面中心的初始定位问题,并提供响应式优化的解决方案,确保在不同屏幕尺寸下都能获得最佳用户体验。通过本文,你将掌握如何利用 CSS 径向渐变和 J*aScript 事件监听来实现动态聚光灯效果,并了解如何使用媒体查询进行适配。
基础实现
首先,我们需要创建 HTML 结构,一个简单的 div 元素即可作为聚光灯容器:
<div class="spotlight"></div>
接下来,使用 CSS 设置聚光灯的样式。关键在于使用 radial-gradient 创建聚光灯效果,并设置 position: fixed 使其固定在屏幕上。
.spotlight {
position: fixed;
width: 100%;
height: 100%;
pointer-events: none; /* 允许鼠标事件穿透聚光灯 */
background-image: radial-gradient(circle, transparent 160px, rgba(0, 0, 0, 0) 200px);
}这段 CSS 代码创建了一个从透明到半透明黑色的径向渐变,模拟聚光灯的效果。pointer-events: none 确保聚光灯不会阻挡鼠标事件,允许用户与页面上的其他元素交互。
然后,使用 J*aScript 来控制聚光灯的位置,使其跟随鼠标移动:
window.addEventListener("DOMContentLoaded", () => {
const spotlight = document.querySelector('.spotlight');
let spotlightSize = 'transparent 160px, rgba(0, 0, 0, 0.85) 200px)';
window.addEventListener('mousemove', e => updateSpotlight(e));
function updateSpotlight(e) {
spotlight.style.backgroundImage = `radial-gradient(circle at ${e.pageX / window.innerWidth * 100}% ${e.pageY / window.innerHeight * 100}%, ${spotlightSize}`;
}
});这段代码在页面加载完成后,获取聚光灯元素,并监听鼠标移动事件。updateSpotlight 函数根据鼠标的坐标动态更新径向渐变的中心位置,实现聚光灯跟随鼠标的效果。
解决初始定位问题
上述代码存在一个问题:页面加载时,聚光灯可能不会出现在屏幕中心,而是在右下角。为了解决这个问题,我们需要在 DOMContentLoaded 事件中,手动设置聚光灯的初始位置为屏幕中心。
window.addEventListener("DOMContentLoaded", () => {
const spotlight = document.querySelector('.spotlight');
let spotlightSize = 'transparent 160px, rgba(0, 0, 0, 0.85) 200px)';
spotlight.style.backgroundImage = `radial-gradient(circle at ${window.innerWidth/2}px ${window.innerHeight/2}px, ${spotlightSize}`;
window.addEventListener('mousemove', e => updateSpotlight(e));
function updateSpotlight(e) {
spotlight.style.backgroundImage = `radial-gradient(circle at ${e.pageX / window.innerWidth * 100}% ${e.pageY / window.innerHeight * 100}%, ${spotlightSize}`;
}
});通过在 DOMContentLoaded 事件处理函数中添加 spotlight.style.backgroundImage = \radial-gradient(circle at ${window.innerWidth/2}px ${window.innerHeight/2}px, ${spotlightSize}`;`,我们可以在页面加载时将聚光灯定位到屏幕中心。
青泥AI
青泥学术AI写作辅助平台
360
查看详情
响应式优化
为了在不同屏幕尺寸下获得更好的效果,我们需要进行响应式优化。例如,在移动设备上,我们可能希望聚光灯固定在屏幕中心,而不是跟随鼠标移动。可以使用 matchMedia 方法来检测屏幕宽度,并根据屏幕宽度动态地添加或移除鼠标移动事件监听器。
window.addEventListener("DOMContentLoaded", ()=>{
const spotlight = document.querySelector('.spotlight');
let spotlightSize = 'transparent 160px, rgba(0, 0, 0, 0.85) 200px)';
//attach mousemove event listener if media query matches.
if (matchMedia('only screen and (min-width: 800px)').matches) {
window.addEventListener('mousemove', updateSpotlight);
function updateSpotlight(e) {
spotlight.style.backgroundImage = `radial-gradient(circle at ${e.pageX / window.innerWidth * 100}% ${e.pageY / window.innerHeight * 100}%, ${spotlightSize}`;
}
} else {
spotlight.style.backgroundImage = `radial-gradient(circle at ${window.innerWidth/2}px ${window.innerHeight/2}px, ${spotlightSize}`;
}
});这段代码使用 matchMedia 检测屏幕宽度是否大于 800px。如果大于 800px,则添加鼠标移动事件监听器,使聚光灯跟随鼠标移动;否则,将聚光灯固定在屏幕中心。
同时,我们也可以使用 CSS 媒体查询来调整聚光灯的样式。
.spotlight {
position: absolute;
width: 100%;
height: 100%;
pointer-events: none;
background-image: radial-gradient(circle at 50% 50%, transparent 160px, rgba(0, 0, 0, 0.85) 200px);
}
@media only screen and (min-width: 800px) {
.spotlight {
position: fixed;
background-image: radial-gradient(circle at 50% 50%, transparent 160px, rgba(0, 0, 0, 0) 200px);
}
}在这个例子中,当屏幕宽度小于 800px 时,聚光灯的 position 属性为 absolute,且径向渐变的中心固定在 50% 50%。当屏幕宽度大于等于 800px 时,聚光灯的 position 属性为 fixed,并且J*aScript代码控制其跟随鼠标。
总结
通过本教程,我们学习了如何使用 CSS、HTML 和 J*aScript 创建一个聚光灯效果,并解决了初始定位和响应式优化的问题。关键点包括:
- 使用 radial-gradient 创建聚光灯效果。
- 使用 DOMContentLoaded 事件处理函数设置聚光灯的初始位置。
- 使用 matchMedia 方法和 CSS 媒体查询进行响应式优化。
- pointer-events: none 属性使得聚光灯不影响鼠标事件。
希望本教程对你有所帮助!你可以根据自己的需求调整聚光灯的大小、颜色和透明度,以及响应式断点,以获得最佳的用户体验。
以上就是CSS Spotlight 效果实现教程:初始居中及响应式优化的详细内容,更多请关注其它相关文章!
# 如何使用
# 传奇pc端推广网站推荐
# 平谷区推广营销策划单价
# 成都网站优化简历工作
# 柳北区推荐网站建设工具
# 济宁网站优化地址
# 学校网站怎么做推广方案
# 武城网站建设培训
# 酒店推广营销台词方案模板
# SEO网络优化员
# 网站推广引流有效果吗
# 显示效果
# 创建一个
# css
# 可以使用
# 使其
# 单选框
# 加载
# 这段
# 表单
# 鼠标
# win
# html
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道
Steam官网入口直达 Steam注册及登录步骤
学习通网页版官方登录 超星学习通电脑端入口指南
J*a TimerTask中HashMap意外清空的深层原因与解决方案
Golang指针如何与map组合使用_Golang map指针组合实践
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
解决Flask中Quill编辑器内容提交失败及TypeError的指南
html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】
Golang如何使用context实现超时取消_Golang context超时取消模式实践
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
Web Components中自定义开关组件状态同步的常见陷阱与解决方案
12306选座怎么选到临时改签座_12306改签选座策略与步骤
composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?
QQ官网正版登录链接 QQ在线登录入口最新
漫蛙漫画网页端入口 漫蛙2官方正版漫画站点
PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract
Python大型XML文件高效流式解析教程
妖精动漫免费平台 妖精动漫官网资源观看网址
《GTA6》开发画面疑似泄露!这次可不是AI了
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
微信客户端如何收红包_微信客户端接收红包使用教程
PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果
小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍
qq游戏手机版下载安装_qq游戏移动端入口
微博网页版官方账号登录 微博网页版内容浏览使用指南
文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
如何使用纯J*aScript判断Input元素是否在特定类容器内
神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正
微信语音通话掉线如何解决 微信语音通话稳定优化方法
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
c++20的std::jthread是什么_c++可中断线程与RAII式管理
MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
b站怎么看视频的弹幕数量_b站弹幕数量查看方法
如何使用Go和Martini动态服务解码后的图片
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
yy漫画网页版官方入口_yy漫画官网登录页面链接
HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制
腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录
J*aScript中管理异步API调用:确保操作顺序与数据一致性
J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析
C++如何操作注册表_Windows平台下C++读写注册表的API函数详解
excel怎么制作工资条 excel快速生成工资条的方法
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合


2025-10-08
浏览次数:次
返回列表