css实现圆环路径,笔记:CSS、canvas 和 SVG 分别实现元素沿环形路径运动动画

CSS 部分

最早接触到使用 CSS 使元素以环形路径运动的办法来自于 Lea Verou 的书《CSS 揭秘》中第八章中的《沿环形路径平移的动画》。虽然随着 CSS 的发展部分语法有些出入,不过作者早在 2012 年就在自己的博客上发表了《Moving an element along a circle》记录相关思路

演示

以下是一个根据其思路制作的例子,做了一些简单演变,方便演示。

理解上面这种办法的关键是去理解当前元素自身的位置,及其配合 transform-origin: x y 来找到一个合适的圆心位置进行旋转运动的过程:

演示里的 mover(粉红色运动的球体)设置在容器的十二点钟方向,并以其为起点开始运动,所以这个时候要找到圆心:

就需要把 transform-origin 在 x 轴上值设置为 mover 自身的中心,也就是 50%;

至于 y 轴上的值,因为现在 mover 自身处在圆的顶部,所以整个圆的半径就正好等于 y 的值(对应下面 CodePen 左边的球体运动);

稍稍改变一下,mover 的初始位置本身就在圆形的中心,同时希望 mover 以九点位置为起始绕着容器做圆周运动,一个简单的思路,通过绝对定位将元素首先定位到九点方向,之后设定 transform-origin,x 值正好是半径值 250⁄2 = 125px,y 轴上的值则正好是 mover 的半个身位 30⁄2 = 15px(对应下面

CodePen 右边的球体运动)。

圆周运动的起始位置

可以尝试把下面这个 CodePen 中 .mover 的 animation 声明注释,观察 .mover 本身的起始位置,由此来理解 transform-origin 配合 transform: rotate() 到底做了什么。

canvas 部分

使用画布()制作物体沿环形运动效果,可以分为两个层次进行理解:

首先是画布制作动画的一般原理,即如何让画布上的内容动起来;

其次就是和圆这个更加具体的主题打交道,牵扯到一些简单的数学问题如三角函数中正弦(sin)、余弦(cos)。

演示

canvas 动画的一般原理

使用 元素来实现元素沿环形路径运动,由于 元素本身「画布」的特性,这个过程有点类似「翻书(flip book)」动画:在本子的不同页上画出动画的不同状态,之后以快速翻页造成的视觉差,来达到目标视觉效果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值