文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JS怎么利用clip-path实现动态区域裁剪功能

2023-06-22 03:10

关注

这篇文章给大家介绍JS怎么利用clip-path实现动态区域裁剪功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

背景

今天逛 CodePen,看到了这样一个非常有意思的效果:

JS怎么利用clip-path实现动态区域裁剪功能

CodePen Demo -- Material Design Menu By Bennett Feely

这个效果还是有一些值得探讨学习的点,下面我们一起来看看。

如何实现这样一个类似的效果?

首先,想一想,如果让你去实现上面的效果,你会怎么做呢?

这里我简单罗列一些可能的办法:

快速的一个一个过一下。

使用 box-shadow 实现

如果使用 box-shadow,代码大致如下:

<div class="g-container">    <div class="g-item"></div></div>
.g-container {    position: relative;    width: 400px;    height: 300px;    overflow: hidden;}.g-item {    position: absolute;    width: 48px;    height: 48px;    border-radius: 50%;    background: #fff;    top: 20px;    left: 20px;    box-shadow: 0 0 0 0 #fff;    transition: box-shadow .3s linear;        &:hover {        box-shadow: 0 0 0 420px #fff;    }}

核心就在于:

效果如下:

JS怎么利用clip-path实现动态区域裁剪功能

整体的动画是模拟出来了,但是它最致命的问题有两个:

所以,box-shadow 看着虽好,但是只能放弃。上述 Demo 的代码 -- CodePen Demo -- box-shadow zoom in animation

使用渐变 radial-gradient 实现

下面我们使用径向渐变 radial-gradient 加上 CSS @property,也可以还原上述效果:

<div class="g-container"></div>
@property --size {  syntax: '<length>';  inherits: false;  initial-value: 24px;}.g-container {    position: relative;    width: 400px;    height: 300px;    overflow: hidden;    background: radial-gradient(circle at 44px 44px, #fff 0, #fff var(--size), transparent var(--size), transparent 0);    transition: --size .3s linear;        &:hover {        --size: 450px;    }}

我们通过控制径向渐变的动画效果,在 hover 的时候,让原本只是一个小圆背景,变成一个大圆背景,效果如下:

JS怎么利用clip-path实现动态区域裁剪功能

emmm,效果确实是还原了,问题也很致命:

上述 Demo 的代码 -- CodePen Demo -- radial-gradient zoom in animation

emmm,还有一种方法,通过缩放 transform: scale(),也会存一定问题,这里不继续展开。

所以到这里,想实现上述的效果,核心在于:

利用 clip-path 实现动态区域裁剪

所以,这里,我们其实是需要一个动态的区域裁剪。

在我的这篇文章中 -- 如何不使用 overflow: hidden 实现 overflow: hidden?,介绍了 CSS 中几种裁剪元素的方式,而其中,最适合利用在这个效果的,就是 -- clip-path。

利用 clip-path,可以非常好的实现,动态裁剪的功能,并且,代码也非常简单:

<div class="g-container"></div>
.g-container {    position: relative;    width: 400px;    height: 300px;    overflow: hidden;    transition: clip-path .3s linear;    clip-path: circle(20px at 44px 44px);    background: #fff;        &:hover {        clip-path: circle(460px at 44px 44px);    }}

我们只需要利用 clip-path,在最开始的时候,将一个矩形 div,利用 clip-path: circle(20px at 44px 44px) 裁剪成一个圆,当 hover 的时候,扩大裁剪圆的半径到整个矩形范围即可。

效果如下:

JS怎么利用clip-path实现动态区域裁剪功能

这样,我们就能完美的实现题图的效果,并且,内置的 DOM 元素,直接写进这个 div 内部即可。

<div class="g-container">    <ul>        <li>11111</li>        <li>22222</li>        <li>33333</li>        <li>44444</li>    </ul></div>

效果如下:

JS怎么利用clip-path实现动态区域裁剪功能

CodePen Demo -- clip-path zoom in animation

很有意思的一个技巧,利用 clip-path 实现动态区域裁剪。

关于JS怎么利用clip-path实现动态区域裁剪功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯