新闻中心

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

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

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

青泥学术AI写作辅助平台

青泥AI 360 查看详情 青泥AI

响应式优化

为了在不同屏幕尺寸下获得更好的效果,我们需要进行响应式优化。例如,在移动设备上,我们可能希望聚光灯固定在屏幕中心,而不是跟随鼠标移动。可以使用 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伪类配合 

搜索