新闻中心

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

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

使用 css、html 和 javascript 实现聚光灯效果

本文详细介绍了如何使用 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

青泥学术AI写作辅助平台

青泥AI 360 查看详情 青泥AI

移动设备优化

在移动设备上,聚光灯效果可能不太理想,因为移动设备通常没有鼠标。为了在移动设备上提供更好的体验,我们可以使用媒体查询来控制聚光灯的行为。例如,我们可以设置在屏幕宽度小于 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存储的结构体如何调用指针方法:深入解析与实践 

搜索