练习动画最好的方式(一):锁链按钮

本文介绍了如何使用纯CSS和GreenSock Animation Platform (GSAP) 创建一个滑动解锁按钮的动画效果。通过详细讲解代码实现过程,展示了如何利用GSAP的Draggable插件以及Timeline进行序列动画的制作,包括拖动解锁、锁头开启与掉落等动画细节。文章强调了这种小动画在网页设计中的应用价值,并鼓励读者尝试自己动手实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习动画最好的方式(一):锁链按钮

你能相信这张图片是由纯CSS绘画的吗?

截屏2021-05-26 下午3.29.04.png

这是国外一位大师的作品,作者并把整个制作的过程都录制了下来,虽然不知道总共花了多少时间,但这绝对是一个惊人的作品

我知道很多人会觉得,『对呀很酷,但是怎么实现的呢?』。

我也不懂为什么,但知道能利用CSS 做出这种极限真的很令人感到兴奋。光是观察他的代码就可以学到不少技巧,

虽然试着理解高手如何做到是能吸收不少经验,但还是会想要自己动手做点什么,好在我又发现了另一个稍微平易近人的高手- Aaron Iker,他大多的作品都围绕在一个网页上不可缺乏,但鲜少被人拿来做文章的元件- "按钮"。

按钮,几乎所有网页都会用到它,但就是拿来触发一些动作,被触发的动作才是我们在意的,很少会在上头多作着墨,顶多加个Hover 变色或位移就很差不多了。

但看看下面这个实例:

2021-05-26 16.21.46.gif

一点小巧思,瞬间就让按钮活了起来。

而且因为范围限缩在了按钮的大小,就算动画稍微华丽一些也不会对整体页面造成太多干扰。

受到Aaron启发,趁着空闲时间我也试着做了一个按钮动画,今天这篇文章就分享一下过程中使用到的工具与眉角!

灵感来源

这次的按钮动画主要修改自Dribbble上YorKun的作品- Button Lock Animation,感谢作者还有附上源码档案,让我能更轻松的参照。

2021-05-26 16.18.12.gif

不过我并没有完全照着原作的动画制作,主要是想多试试一些不同的动画组合,接下来我会一一介绍。

动画实作

我一开始想达到的动画有四项:

  1. 滑动解锁
  2. 锁头开启与掉落
  3. 对应开锁状态的动画
  4. 锁头拖拉时的2D 物理效果

理论上应该是很快就能完成,但因为对GSAP不熟,走了很多冤枉路,导致最后只完成了前三项的效果,算是差强人意。

用到的工具主要是GSAP与GSAP的Draggable plugin

滑动解锁

GSAP的Draggable plugin真的有够简单好用,只要给定想要启动Draggable的DOM物件,并指定要拖拉的方向(type)与范围(bounds),就能瞬间完成这样的效果(demo由此去):

// 注册GSAP的draggable插件
gsap.registerPlugin(Draggable);

// 选择需要与queryselector交互的DOM
const button = document.querySelector(".unlock-btn");
const lockerArea = button.querySelector(".locker");
const dropArea = button.querySelector(".drop");

// 主要的可拖动的实例
Draggable.create(lockerArea, {
  type: "x",
  bounds: button,
  onDrag(e) {},
  onRelease(e) {
    if (!this.hitTest(dropArea)) {
      gsap.to(lockerArea, {
        x: 0,
        duration: 0.6,
        ease: "elastic.out(1, .75)"
      });
    } else {
      // this.disable();
      gsap.to(lockerArea, {
        x: dropArea.offsetLeft - 9,
        duration: 0.6,
        ease: "elastic.out(1, .8)",
        onUpdate(e) {
          tl.restart();
        }
      });
    }
  }
});
复制代码

中间可以看到,我们指定typex,表示移动方向为x轴,而boundsbuttonDOM物件,所以最多不会拖移超过butotn的范围。

另外,影片中有一个效果是当你拖拉到前

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端仙人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值