径向聚焦,你就是全场最靓的仔

简介: 通过mask-image属性我们得到了一个径向聚焦的效果,通过css变量让这个聚焦效果可以随着鼠标的移动而移动,接下来就一起来看看这个效果是如何实现的吧。

通过mask-image属性我们得到了一个径向聚焦的效果,通过css变量让这个聚焦效果可以随着鼠标的移动而移动,接下来就一起来看看这个效果是如何实现的吧。

先来体验效果:
代码片段

思路

这里有很多细节处理,我们先来看看整体的流程:

  1. 整体模糊,需要用到backdrop-filter属性
  2. 模糊中要有一个聚焦的区域,通过mask-image属性实现
  3. 聚焦的区域需要跟随鼠标移动,通过css变量实现

思路有了,接下来就是实现了。

整体模糊

整体模糊先从布局入手,要有一个大的蒙版层,给所有元素都盖住,然后蒙版层要有模糊效果:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Document</title>
  <style>
    .mask {
    
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background-color: rgba(0, 0, 0, 0.5);
      backdrop-filter: blur(10px);
    }
  </style>
</head>
<body>
这里随便来点内容
  <div class="mask"></div>
</body>
</html>

现在我们就得到了一个整体模糊的效果,接下来就是要实现聚焦的区域。

页面的样式和内容可以根据自己的喜好来定制,这里只是为了演示代码,所以没有贴相关的样式。

backdrop-filter

既然用到了这个属性,那我们就来认识一下这个属性吧。

backdrop-filter属性可以让元素添加图形效果,它适用于元素背后的所有元素,但是为了看到效果,元素必须带有透明度。

它的值可以是filter函数,也可以是nonenone表示没有滤镜效果,如下:

  • blur():模糊
  • brightness():亮度
  • contrast():对比度
  • drop-shadow():阴影
  • grayscale():灰度
  • hue-rotate():色相旋转
  • invert():反转
  • opacity():透明度
  • saturate():饱和度
  • sepia():褐色
  • url():引入外部滤镜

它的属性值可以是多个,用空格分隔,如下:

* {
   
    backdrop-filter: blur(10px) brightness(0.5);
}

它的各种属性值我就不一一介绍了,感兴趣的可以自行查阅,这里我们只用到了blur模糊效果。

聚焦的区域

聚焦的区域是一个圆形,我们可以通过mask-image属性来实现:

.mask {
   
  mask-image: radial-gradient(circle at 50% 50%, transparent 120px, black 150px);
}

这里的radial-gradient是径向渐变,circle是一个圆形,at 50% 50%是圆心的位置,transparent 120px是透明的半径为120px的圆,black 150px是黑色的半径为150px的圆,这样就得到了一个圆形的聚焦区域。

接下来就是要让这个聚焦区域跟随鼠标移动了。

msak属性我在之前的文章中有介绍过,感兴趣的可以去看看:CSS 的各种遮罩,让图片和背景更加多元化

聚焦区域跟随鼠标移动

聚焦区域跟随鼠标移动,我们可以通过css变量来实现:

.mask {
   
    --mouse-x: center;
    --mouse-y: center;
    mask-image: 
            radial-gradient(
                    circle at var(--mouse-x) var(--mouse-y),
                    transparent 120px,
                    black 150px
            );
}

这里定义了两个css变量--mouse-x--mouse-y,分别表示鼠标的横坐标和纵坐标,然后替换mask-image中的at位置。

接下来就是要让这两个变量跟随鼠标移动了。

css 变量的使用可以参考:CSS变量对JS交互组件开发带来的提升与变革

鼠标移动事件

鼠标移动事件,我们可以通过mousemove事件来实现:

const mask = document.querySelector('.mask');
document.addEventListener('mousemove', (e) => {
   
  mask.style.setProperty('--mouse-x', `${
     e.clientX}px`);
  mask.style.setProperty('--mouse-y', `${
     e.clientY}px`);
});

以上就是整个效果的实现,这里有一个细节,就是mask-imageat位置,如果是center,那么聚焦区域就是在鼠标的中心,如果是left top,那么聚焦区域就是在鼠标的左上角;

思路很简单,但是细节处理很多,这里就不一一展开了。

目录
相关文章
|
机器学习/深度学习 人工智能 安全
基于YOLOv8的路面缺陷(路面裂缝、井盖、坑洼路面)识别项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用!】
本项目基于YOLOv8与PyQt5,打造路面缺陷检测系统,支持裂缝、井盖、坑洼识别,涵盖图片、视频、摄像头等多种输入方式。提供完整训练数据、预训练模型及图形化界面,开箱即用,本地运行,方便二次开发。适用于智慧城市建设与道路安全巡检,推动AI检测技术实际应用。项目包含源码、数据集、训练代码,支持科研学习与工程实战。
|
监控 算法 自动驾驶
基于YOLOv8的7种交通场景识别项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用】
本项目基于YOLOv8算法,打造了一个支持7类交通场景识别的智能系统,包括机动车、非机动车、行人及各类信号灯状态。采用PyQt5开发图形界面,提供单图、批量图片、视频文件和摄像头实时流等多种输入方式,并支持检测结果保存与模型自定义训练。项目包含完整源码、数据集及预训练权重,开箱即用,适合智能驾驶、城市监控等领域。通过简洁友好的UI,用户无需代码基础即可体验高性能目标检测功能,同时支持二次开发与工程部署。
|
12月前
|
人工智能 自然语言处理 监控
video-analyzer:开源视频分析工具,支持提取视频关键帧、音频转录,自动生成视频详细描述
video-analyzer 是一款开源视频分析工具,结合 Llama 的 11B 视觉模型和 OpenAI 的 Whisper 模型,能够提取视频关键帧、转录音频并生成详细描述,支持本地运行和多种应用场景
2568 6
video-analyzer:开源视频分析工具,支持提取视频关键帧、音频转录,自动生成视频详细描述
|
存储 运维 关系型数据库
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
数据处理 定位技术 开发者
甘特图、IPO图、DFD图
甘特图、IPO图、DFD图
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
1613 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
JavaScript 前端开发 数据格式
Cesium案例解析(四)——3DModels模型加载
Cesium案例解析(四)——3DModels模型加载
724 0
|
缓存 JavaScript 前端开发
三分钟,带你学会 Vue3 加载远程组件
三分钟,带你学会 Vue3 加载远程组件
|
消息中间件 缓存 前端开发
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
3194 1
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)