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

简介: 通过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,那么聚焦区域就是在鼠标的左上角;

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

目录
相关文章
|
7月前
|
数据库
向量加成,助力在知识的海洋尽情探索
毫不夸张的说,有向量数据库的加成LLM更加有助于生产力的提升,可以帮我们更快检索到所需要的核心内容。
|
4月前
|
人工智能 黑灰产治理 开发者
虚拟模特,一键生成高颜值AI模特!活动震撼来袭,快来生成你的高颜值模特大片!
体验”通义万相-虚拟模特“,晒出属于你的高颜值AI模特大片,在活动页面提交作品以及使用反馈,即有机会获得反馈奖哦!
346 2
虚拟模特,一键生成高颜值AI模特!活动震撼来袭,快来生成你的高颜值模特大片!
和平精英-缩放案例
和平精英-缩放案例
226 0
|
前端开发 JavaScript
「寒草的中秋献礼🥮,实现30s前端创意动画」陪你看日落和月升|与你赏星空和诗歌
「寒草的中秋献礼🥮,实现30s前端创意动画」陪你看日落和月升|与你赏星空和诗歌
238 1
“SOFA 星球”闯关计划 2.0——Layotto 飞船焕新出发
“SOFA 星球”闯关计划 2.0 全新上线,Layotto 飞船焕新出发,领取你的新任务咯~
“SOFA 星球”闯关计划 2.0——Layotto 飞船焕新出发
|
存储 编解码 安全
99行代码实现冰雪奇缘特效的「太极」再进化,胡渊鸣团队、快手等联合打造
99 行代码实现《冰雪奇缘》特效的续集来了,太极编译器再次升级。
203 0
99行代码实现冰雪奇缘特效的「太极」再进化,胡渊鸣团队、快手等联合打造
|
机器学习/深度学习 消息中间件 人工智能
爱奇艺蒙版AI:弹幕穿人过,爱豆心中坐
作为(伪)AI 行业从业者,之心编辑部里的小伙伴们自认都能够以不错的置信度人工识别「人工智能与人工智障」。但是,当我把下面这张爱奇艺 app 的截图放在大家面前时,编辑部的「识别器」们纷纷表示,这次置信度不高。
305 0
爱奇艺蒙版AI:弹幕穿人过,爱豆心中坐
|
机器人 atlas 定位技术
飞奔跳跃!波士顿动力人形机器人Atlas学会跑酷
今年 5 月份,大家熟知的机器人公司波士顿动力在 YouTube 上放出两段视频,展示了 Atlas 和 SpotMini 机器人的最新进展。这两段视频没有展示多少新鲜的东西,但让我们看到了这些机器人的活动是多么自然。今日,波士顿动力机器人再次吸引了大家的注意:会跑酷的 Atlas。
182 0
飞奔跳跃!波士顿动力人形机器人Atlas学会跑酷
|
机器学习/深度学习 数据采集 人工智能
三角兽首席科学家王宝勋:热度之下的对话生成
从 EMNLP 入选论文《Neural Response Generation via GAN with an Approximate Embedding Layer》出发,就自动对话领域的特点到发展方向和亟待解决的问题,我们与三角兽首席科学家王宝勋聊了聊。
175 0
三角兽首席科学家王宝勋:热度之下的对话生成
|
人工智能 算法 机器人
机器人眼中的光影世界
我们开发程序来进行照片中的人脸识别,或者来统计交通阻塞中的汽车数量,我们将自己眼中的世界强加给电脑,因为我们已经习惯性的他们当成了工具,一个帮助我们更好了解自身世界的工具。
155 0