使用 CSS、HTML 和 JavaScript 实现聚光灯效果

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

本文详细介绍了如何使用 CSS、HTML 和 JavaScript 创建一个跟随鼠标移动的聚光灯效果。我们将解决页面加载时聚光灯初始位置不在中心的问题,并提供在移动设备上优化聚光灯效果的方案,包括使用媒体查询来控制聚光灯的行为,使其在小屏幕设备上默认居中显示,在大屏幕设备上跟随鼠标移动。

实现基本的聚光灯效果

首先,我们需要创建一个 HTML 元素作为聚光灯的容器,并使用 CSS 设置其样式。然后,使用 JavaScript 监听鼠标移动事件,并动态更新聚光灯的位置。

HTML:

CSS:

立即学习“Java免费学习笔记(深入)”;

.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);}

JavaScript:

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 属性确保鼠标事件可以穿透聚光灯,从而不影响页面上的其他元素。JavaScript 代码监听 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,可以确保聚光灯在页面加载时始终位于屏幕中心。

移动设备优化

在移动设备上,聚光灯效果可能不太理想,因为移动设备通常没有鼠标。为了在移动设备上提供更好的体验,我们可以使用媒体查询来控制聚光灯的行为。例如,我们可以设置在屏幕宽度小于 800px 的设备上,聚光灯始终位于屏幕中心,而在屏幕宽度大于等于 800px 的设备上,聚光灯跟随鼠标移动。

CSS:

立即学习“Java免费学习笔记(深入)”;

.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); /* 初始透明 */  }}

JavaScript:

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 和 JavaScript 创建一个跟随鼠标移动的聚光灯效果。我们解决了页面加载时聚光灯初始位置不在中心的问题,并提供了在移动设备上优化聚光灯效果的方案。通过使用媒体查询,我们可以根据屏幕大小动态调整聚光灯的行为,从而在各种设备上提供更好的用户体验。

以上就是使用 CSS、HTML 和 JavaScript 实现聚光灯效果的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1582382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月22日 23:06:26
下一篇 2025年12月22日 23:06:42

相关推荐

  • JavaScript实现下拉菜单与内容区域的联动显示

    本教程详细介绍了如何利用JavaScript实现一个交互式的下拉菜单,当用户选择不同的选项时,页面上会动态显示或隐藏对应的HTML内容区域。通过监听下拉菜单的change事件,并结合CSS的display属性,我们可以高效地控制元素的可见性,从而创建出响应用户选择的动态界面,提升用户体验。 核心原理…

    2025年12月22日
    000
  • 如何编写高可读性的HTML代码_编写高可读性HTML代码实践

    编写高可读性HTML需遵循语义化标签使用、一致缩进、合理注释和规范属性书写。首先用等语义标签明确页面结构,避免滥用;其次保持缩进统一(推荐2或4空格),使层级关系清晰;在关键模块添加简洁注释如,便于团队协作;属性按class、id、src、href顺序排列,布尔属性省略赋值,值用双引号包围,单属性换…

    2025年12月22日
    000
  • CSS calc()应用:固定定位div在设置top后实现屏幕剩余高度自适应

    本教程旨在解决CSS中固定定位(position: fixed)的div元素在设置top属性后,无法正确占据屏幕剩余高度的问题。当div内容溢出需要滚动时,传统的height: 100%或max-height: 100vh会导致滚动条底部内容被裁剪。通过使用CSS的calc()函数,我们可以精确计算…

    2025年12月22日
    000
  • CSS布局调试:利用Outline快速定位页面溢出问题

    在前端开发中,页面宽度溢出导致出现水平滚动条是一个常见而棘手的问题,尤其当复杂组件如卡片布局涉及多层嵌套时。本文将介绍一种简单而高效的CSS调试技巧——通过为所有元素添加红色边框(outline),快速可视化并定位导致页面溢出的具体组件,从而简化调试过程,提升开发效率。 常见页面溢出问题分析 在构建…

    2025年12月22日
    000
  • PHP字符串拼接:数据库字段合并与HTML属性赋值实践

    本文旨在深入探讨PHP中字符串的拼接方法,特别是在将多个数据字段合并为一个字符串并将其赋值给HTML元素(如隐藏输入框的value属性)时的最佳实践。我们将重点介绍如何正确使用点(.)运算符实现无缝拼接,避免常见错误,确保数据在数据库或前端显示时符合预期格式。 1. PHP字符串拼接核心:点运算符(…

    2025年12月22日
    000
  • 前端表单数据持久化:如何在页面刷新后保留单选按钮选中状态

    本文详细探讨了如何在页面刷新后保留单选按钮的选中状态,以防止用户数据丢失。通过介绍客户端存储技术,包括LocalStorage、SessionStorage和Cookies,文章提供了具体的JavaScript实现方案,指导开发者如何监听表单变化、存储数据并在页面加载时恢复状态。内容涵盖了各存储机制…

    2025年12月22日
    000
  • HTML表格数据单元格怎么写_HTML表格td数据单元格使用指南

    td标签用于定义HTML表格中的标准数据单元格,必须嵌套在tr标签内。每个tr代表一行,每对td表示该行的一个数据单元格。支持colspan和rowspan实现跨列跨行,align和valign设置对齐方式(建议用CSS替代)。与th标签不同,td用于普通数据,th用于表头,提升语义与可访问性。实际…

    2025年12月22日
    000
  • HTML视频播放器怎么美化样式_CSS样式美化HTML视频播放器技巧

    先隐藏默认控件并创建自定义UI,通过CSS美化video标签外观,使用JavaScript控制播放行为,结合定位布局实现自定义播放按钮、进度条、音量滑块及加载状态,打造贴合设计风格的视频播放器。 HTML视频播放器默认样式比较简陋,但通过CSS可以轻松美化,让它更贴合网页整体设计。关键在于控制vid…

    2025年12月22日
    000
  • 自定义CSS加载动画颜色:以lds-ripple为例

    本文详细介绍了如何自定义CSS加载动画(如lds-ripple)的颜色。核心在于理解动画的视觉呈现机制,并针对性地修改.lds-ripple div样式规则中的border属性值,而非误用color属性,从而轻松实现加载器环形效果的颜色定制。 理解CSS加载动画的构成与颜色机制 在网页开发中,css…

    2025年12月22日
    000
  • WooCommerce 自定义 WP_Query 获取订单详情时出错的解决方案

    本文旨在解决在使用 WP_Query 自定义查询 WooCommerce 订单详情时遇到的 500 错误问题。通过分析问题代码,提供修复后的代码示例,并详细解释代码逻辑和注意事项,帮助开发者正确使用 WP_Query 获取和展示 WooCommerce 订单数据,实现分页加载等功能。本文还提供优化后…

    2025年12月22日
    000
  • 网页背景全屏填充与布局空白问题解析

    本文旨在解决网页背景无法全屏填充及元素下方出现多余空白的问题。我们将深入探讨HTML结构规范、CSS盒模型原理,并提供具体解决方案,包括正确设置html和body的高度、消除默认边距与填充,以及优化元素间距,确保页面布局整洁且背景完美覆盖。 一、理解并规范HTML文档结构 在构建网页时,正确的htm…

    2025年12月22日
    000
  • 利用 MediaSession API 为画中画窗口添加媒体控制

    本文探讨了在浏览器画中画(Picture-in-Picture)窗口中添加交互功能的方法。鉴于PiP窗口本身不直接支持鼠标事件,我们介绍如何利用 MediaSession API 来为视频会议等应用场景添加媒体控制,如麦克风静音、摄像头开关及挂断功能,从而增强用户体验。 理解画中画窗口的交互限制 当…

    2025年12月22日
    000
  • 如何使用 JavaScript 预览本地图片文件

    @@##@@注意事项安全性: 客户端的文件操作存在安全风险。请确保对用户上传的文件进行适当的验证和处理,防止恶意代码注入。性能: 对于大型图片文件,读取和显示可能会影响页面性能。可以考虑使用缩略图或延迟加载等技术来优化性能。兼容性: 不同的浏览器对 FileReader 的支持程度可能有所不同。请进…

    2025年12月22日
    000
  • 如何在HTML5中实现无控制条的视频循环播放(模拟GIF效果)

    本文详细讲解如何在HTML5中创建无控制条的循环视频,使其表现如同GIF动图。通过省略标签的controls属性,并配合loop、autoplay和muted等属性,您可以轻松实现视频的自动播放和无缝循环,为用户提供流畅的视觉体验,避免了传统视频控件的干扰。 理解HTML5视频控制条 html5的标…

    2025年12月22日
    000
  • JavaScript实现可拖拽与可调整大小HTML元素的冲突解决策略

    本文旨在解决Web开发中常见的元素拖拽与原生调整大小功能之间的冲突问题。通过在鼠标按下事件中判断鼠标指针位置,精确区分用户意图是拖拽还是调整大小,从而避免两者相互干扰。文章将详细阐述实现原理,提供完整的JavaScript、HTML和CSS代码示例,并讨论关键注意事项,帮助开发者创建更流畅的用户交互…

    2025年12月22日
    000
  • 固定定位Div高度自适应:使用calc()处理顶部偏移的布局策略

    当一个使用position: fixed定位的div元素设置了top属性时,直接使用height: 100%或max-height: 100vh会导致内容溢出或滚动条不可见。本教程将详细介绍如何利用CSS的calc()函数,精确计算并设置div的高度为100vh减去top偏移量,从而实现元素在屏幕上…

    2025年12月22日
    000
  • 优化HTML元素拖拽与原生调整大小的冲突

    本文旨在解决网页开发中常见的HTML元素拖拽(Drag)功能与浏览器原生调整大小(Resize)功能之间的冲突。通过在拖拽事件的mousedown处理程序中引入鼠标位置判断,精确区分用户意图是拖拽还是调整大小,从而避免事件重叠,实现一个既可自由拖动又可正常调整大小的textarea元素。 1. 问题…

    2025年12月22日
    000
  • HTML链接跳转怎么实现_HTML超链接a标签创建指南

    使用a标签通过href属性实现网页跳转、资源链接或邮件发送,支持外部链接、内部页面、锚点定位及新窗口打开,并可通过target和rel属性提升安全性和用户体验。 如果您希望在网页中实现页面跳转或资源链接,通常需要使用HTML中的超链接标签(a标签)来完成。该标签能够指向其他网页、文件、电子邮件地址或…

    2025年12月22日
    000
  • CSS实现中间内容区域自适应填充垂直空间(含固定页眉页脚)

    本文详细介绍了如何利用CSS实现一个常见的布局需求:在存在固定高度的页眉和页脚时,让中间内容区域自适应填充视口(viewport)的剩余垂直空间,同时避免内容溢出。核心解决方案是结合使用CSS自定义属性(变量)、min-height属性以及calc()函数,确保布局的灵活性和响应性。 布局挑战:固定…

    2025年12月22日 好文分享
    000
  • JavaScript元素拖拽与缩放冲突的智能解决方案

    本文旨在解决HTML元素(特别是textarea)在实现拖拽和原生缩放功能时,拖拽事件与缩放事件相互干扰的问题。通过在拖拽的mousedown事件中引入鼠标位置判断机制,精确区分用户的移动意图和缩放意图,从而避免事件冲突,实现元素可自由拖拽且能响应原生缩放手柄。 理解拖拽与缩放的事件冲突 在web开…

    2025年12月22日
    000

发表回复

登录后才能评论
关注微信