新闻中心
使用 CSS、HTML 和 J*aScript 实现聚光灯效果

本文详细介绍了如何使用 CSS、HTML 和 J*aScript 创建一个跟随鼠标移动的聚光灯效果。我们将解决页面加载时聚光灯初始位置不在中心的问题,并提供在移动设备上优化聚光灯效果的方案,包括使用媒体查询来控制聚光灯的行为,使其在小屏幕设备上默认居中显示,在大屏幕设备上跟随鼠标移动。
实现基本的聚光灯效果
首先,我们需要创建一个 HTML 元素作为聚光灯的容器,并使用 CSS 设置其样式。然后,使用 J*aScript 监听鼠标移动事件,并动态更新聚光灯的位置。
HTML:
<div class="spotlight"></div>
CSS:
.spotlight {
position: fixed; /* 使用 fixed 定位,使其始终位于视口中 */
width: 100%;
height: 100%;
pointer-events: none; /* 允许鼠标事件穿透聚光灯 */
background-image: radial-gradient(circle, transparent 160px, rgba(0, 0, 0, 0.85) 200px);
}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}`;
}
});这段代码创建了一个覆盖整个屏幕的 div 元素,并使用径向渐变来模拟聚光灯效果。pointer-events: none 属性确保鼠标事件可以穿透聚光灯,从而不影响页面上的其他元素。J*aScript 代码监听 mousemove 事件,并根据鼠标的位置动态更新径向渐变的中心点,从而实现聚光灯跟随鼠标移动的效果。
解决初始位置问题
上述代码存在一个问题:页面加载时,聚光灯的初始位置不在中心。为了解决这个问题,我们需要在 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 事件处理函数中,添加了一行代码来设置聚光灯的初始位置。通过将径向渐变的中心点设置为 window.innerWidth/2 和 window.innerHeight/2,可以确保聚光灯在页面加载时始终位于屏幕中心。
青泥AI
青泥学术AI写作辅助平台
36
0
查看详情
移动设备优化
在移动设备上,聚光灯效果可能不太理想,因为移动设备通常没有鼠标。为了在移动设备上提供更好的体验,我们可以使用媒体查询来控制聚光灯的行为。例如,我们可以设置在屏幕宽度小于 800px 的设备上,聚光灯始终位于屏幕中心,而在屏幕宽度大于等于 800px 的设备上,聚光灯跟随鼠标移动。
CSS:
.spotlight {
position: absolute; /* 默认使用 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; /* 大屏幕设备使用 fixed 定位 */
background-image: radial-gradient(circle at 50% 50%, transparent 160px, rgba(0, 0, 0, 0) 200px); /* 初始透明 */
}
}J*aScript:
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,则聚光灯始终位于屏幕中心。否则,将添加 mousemove 事件监听器,使聚光灯跟随鼠标移动。
注意事项:
- 可以根据实际需求调整媒体查询的阈值。
- 还可以处理窗口大小调整事件,以便在屏幕宽度发生变化时动态更新聚光灯的行为。
总结
本文介绍了如何使用 CSS、HTML 和 J*aScript 创建一个跟随鼠标移动的聚光灯效果。我们解决了页面加载时聚光灯初始位置不在中心的问题,并提供了在移动设备上优化聚光灯效果的方案。通过使用媒体查询,我们可以根据屏幕大小动态调整聚光灯的行为,从而在各种设备上提供更好的用户体验。
以上就是使用 CSS、HTML 和 J*aScript 实现聚光灯效果的详细内容,更多请关注其它相关文章!
# javascript
# 平面设计自学网站建设
# 投放推广的网站
# 青岛seo优化推广
# 深圳抖音seo渠道推广
# 吉林婚庆网站建设语言
# 鼓楼区网站优化公司
# 可以根据
# 使其
# 而在
# 单选框
# 中心点
# 创建一个
# 加载
# 这段
# 表单
# 鼠标
# win
# html
# java
# css
# 佛山网站建设定做
# 衡水产品推广营销招聘网
# 蚌埠品牌营销推广多少钱
# 青岛市seo优化推广
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
深入理解与实现最大堆的Heapify过程:常见错误与修正
怎么在mac上运行html代码_mac运行html代码方法【指南】
抓大鹅无需下载版 抓大鹅秒玩版入口
怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】
KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程
J*aScript中高效管理与清空动态列表:避免循环陷阱
理解Python模块与全局变量的作用域管理
我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口
京东单号查询入口_京东快递订单追踪入口
在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道
Django通过AJAX异步上传图片并保存至模型的完整指南
如何有效阻止外部脚本意外修改内联样式的高度属性
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
Log4j Console Appender性能瓶颈与高并发优化策略
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
2025-2030年全球乘用车销量预测:新能源成增长主力
反效果?《战地6》免费试玩开启后玩家数不升反降
fishbowl官网免费版 fishbowl养鱼网站入口
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
蛙漫安全无毒 官方认证的绿色入口
Discord Slash 命令响应超时问题的异步解决方案
“在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】
谷歌google账号注册详细步骤 谷歌账号注册官方教程
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
steam官方网页快速访问 steam账号注册全流程
poki网页游戏推荐_poki免费游戏平台入口
在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析
如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!
PHP中SSG-WSG API的AES加密实践:正确使用初始化向量
汽水音乐网页版使用入口_汽水音乐电脑版播放指南
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
2026春节假期票务安排_2026春节放假购票指南
Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐
写好的html代码怎么运行出来_运行写好的html代码方法【教程】
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏
漫蛙漫画官方首页 漫蛙2漫画在线阅读入口
J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案
Mac怎么查看崩溃日志_Mac控制台错误报告分析
Go语言中Map存储的结构体如何调用指针方法:深入解析与实践


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