You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现毛玻璃模糊背景上的圆形聚光灯高亮未模糊区域效果

实现带圆形清晰高亮区的毛玻璃背景方案

问题根源

原有实现对整个毛玻璃容器统一添加了模糊滤镜,滤镜效果会作用于容器内部所有元素及背景,即便设置圆形镂空也无法规避模糊的继承影响,因此圆形区域始终保持模糊状态。

方案1:纯CSS实现(无需JS/Canvas,兼容性较好)

核心思路:两层背景叠加,底层放原始清晰背景,上层放带遮罩的毛玻璃层,通过CSS mask在毛玻璃层挖出圆形透明区域,露出下层清晰背景。

<!-- 页面结构 -->
<div class="container">
  <!-- 原始清晰背景层 -->
  <div class="raw-background"></div>
  <!-- 带挖孔的毛玻璃层 -->
  <div class="frosted-glass"></div>
  <!-- 业务内容层 -->
  <div class="content">你的页面内容</div>
</div>
.container {
  position: relative;
  width: 100vw;
  height: 100vh;
  overflow: hidden;
}
.raw-background {
  position: absolute;
  inset: 0;
  background: url(你的背景图资源地址) center/cover no-repeat;
  z-index: 1;
}
.frosted-glass {
  position: absolute;
  inset: 0;
  z-index: 2;
  /* 毛玻璃效果参数可按需调整 */
  backdrop-filter: blur(12px);
  background: rgba(255,255,255,0.15);
  /* 遮罩挖孔:circle后三个参数分别为圆心横坐标、纵坐标、高亮圆半径 */
  -webkit-mask: radial-gradient(circle at 50% 50%, transparent 100px, #000 100px);
  mask: radial-gradient(circle at 50% 50%, transparent 100px, #000 100px);
}
.content {
  position: relative;
  z-index: 3;
}

如果需要实现可移动的高亮圆,仅需用JS动态修改mask属性中circle at X Y的坐标参数即可。

方案2:Canvas实现方案

核心思路:在canvas上绘制两次背景,第一次绘制完整清晰背景,第二次对背景应用模糊后,通过路径裁剪只保留圆形外的模糊区域,圆形区域保留第一次绘制的清晰效果。

<canvas id="bgCanvas"></canvas>
const canvas = document.getElementById('bgCanvas')
const ctx = canvas.getContext('2d')
// 设置canvas尺寸与窗口匹配
canvas.width = window.innerWidth
canvas.height = window.innerHeight

const bgImg = new Image()
bgImg.src = '你的背景图资源地址'
bgImg.onload = () => {
  // 第一步:绘制完整清晰背景
  ctx.drawImage(bgImg, 0, 0, canvas.width, canvas.height)
  
  // 第二步:裁剪出圆形外的区域
  ctx.save()
  ctx.beginPath()
  // 绘制全屏矩形
  ctx.rect(0, 0, canvas.width, canvas.height)
  // 绘制需要高亮的圆形,参数分别为圆心横坐标、纵坐标、高亮圆半径
  ctx.arc(canvas.width/2, canvas.height/2, 100, 0, Math.PI * 2)
  // 用xor模式得到圆形外的区域作为裁剪范围
  ctx.globalCompositeOperation = 'xor'
  ctx.clip()
  
  // 第三步:对裁剪区域应用模糊并绘制背景
  ctx.filter = 'blur(12px)'
  ctx.drawImage(bgImg, 0, 0, canvas.width, canvas.height)
  
  // 恢复上下文状态
  ctx.restore()
}

// 如果需要移动高亮圆,重新执行上述绘制逻辑修改arc的坐标参数即可

内容的提问来源于stack exchange,提问作者Dudu Benafshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:18:04