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


使用 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,可以确保聚光灯在页面加载时始终位于屏幕中心。

CA.LA CA.LA

第一款时尚产品在线设计平台,服装设计系统

CA.LA 86 查看详情 CA.LA

移动设备优化

在移动设备上,聚光灯效果可能不太理想,因为移动设备通常没有鼠标。为了在移动设备上提供更好的体验,我们可以使用媒体查询来控制聚光灯的行为。例如,我们可以设置在屏幕宽度小于 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 实现聚光灯效果的详细内容,更多请关注其它相关文章!


# css  # 可以根据  # 怎么搜衣服网站推广商品  # 仪表网站建设方案模板  # 深圳网站建设便宜吗  # 北京网站优化方案ppt  # 法律推广网站  # 眉山网站如何推广  # 肇庆推广网站哪家好些啊  # 厨电营销推广推荐  # 番薯营销推广视频怎么做  # 互联网推广 seo  # 在手  # 机上  # 使其  # 而在  # 中心点  # 创建一个  # 加载  # 这段  # 鼠标  # win  # html  # java  # javascript 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  iPhone14无法连接蓝牙设备如何解决  139邮箱登录入口官网 139邮箱登录入口官网网址  高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践  厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项  解决SQLAlchemy模型跨文件关联的Linter兼容性指南  如何查找哪个composer包引入了特定的依赖?  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  4399造梦西游3无敌版_4399游戏入口  《搜书吧》阅读书籍方法  CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条  阿里云共享相册入口在哪  263企业邮箱如何设置邮件转发功能  如何使用 composer 和 aop-php 实现 AOP 编程?  快递查询,一键速查  太平年在哪个平台播出  126手机126邮箱登录_126邮箱手机登录入口官网  喜茶GO更换登录账号方法  mysql中外键约束如何使用_mysql FOREIGN KEY操作  如何使用 Optional 类型并满足 Pylint 的类型检查  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  抖音团长模式怎么做?团长模式是什么意思?  管理打开的编辑器:固定、分组和关闭技巧  小红书网页版怎么进 小红书网页版通用入口  谷歌浏览器怎么把网页翻译成中文_Chrome网页翻译功能使用方法  汽水音乐网页端访问 汽水音乐官方网页直达  苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作  rabbitmq 持久化有什么缺点?  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  Yandex浏览器官方入口_Yandex搜索引擎中文版  J*aScript:从子元素中批量移除特定CSS类  键盘保修需要什么_键盘售后维修流程  哔哩哔哩黑名单怎么查看  Excel宏怎么删除_Excel中删除宏的详细操作流程  qq邮箱怎么注册_QQ邮箱注册步骤与注意事项  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局  如何自定义苹果手机铃声  《随手记》备份数据方法  Go App Engine 项目结构与包管理深度指南  电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】  Go反射进阶:访问内嵌结构体中的被遮蔽方法  银信通自动开通原因揭秘  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  实现二叉树的层序插入:基于树大小的路径导航  动漫之家观看全集库 动漫之家免费资源网地址  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建? 

 2025-10-08

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.