css_animation运动的贝塞尔曲线

模拟animation效果

在这里插入图片描述

参考MDN文档说明:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions
animation-timing-function常见的四种速率变化

  • ease 默认值,朝向动画中间的速度增加,最后逐渐减慢
  • ease-in 开始时会缓慢,随着动画属性过渡的速度增加,直到完成为止
  • ease-in-out 动画属性缓慢过渡,加速,然后再次减速
  • ease-out 开始很快,放慢动画的速度继续
  • linear 线性匀速

实现模拟

整体布局

<div class='box'>
	<ul>
		<li>ease</li>
		<li>ease-in</li>
		<li>ease-in-out</li>
		<li>ease-out</li>
		<li>linear</li>
	</ul>
</div>

在这里插入图片描述

转换为1行5列

  • grid-template 网络划分
  • gap 间距
ul{
	display: grid;
	grid-template:1fr/repeat(5,1fr);
	list-style: none;
	gap:1em;
}
li{
	text-align: center;
	color: #000000;
	text-transform: uppercase;
	height:50px;
	width: 100px;
	animation-name: move;
	animation-duration: 6s;
	animation-iteration-count:infinite;
}

动画

下移80%;

@keyframes move{
	to{
		transform: translateY(80vh);
	}
}
li:nth-child(1){
	background: #CAD3C8;
	animation-timing-function: ease;
}
li:nth-child(2){
	background: #3B3B98;
	animation-timing-function: ease-in;
}
li:nth-child(3){
	background: #B33771;
	animation-timing-function: ease-in-out;
}
li:nth-child(4){
	background: #25CCF7;
	animation-timing-function: ease-out;
}
li:nth-child(5){
	background: #EAB543;
	animation-timing-function: linear;
}

整体

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>annimation</title>
		<style>
			* {
				margin: 0;
				padding: 0;
			}

			body {
				width: 100vw;
				height: 100vh;
				background: #7f8fa6;
				display: grid;
				grid-template: 1fr/1fr;
			}

			.box {
				margin: 0 auto;
			}

			ul {
				display: grid;
				grid-template: 1fr/repeat(5, 1fr);
				list-style: none;
				gap: 1em;
			}

			li {
				text-align: center;
				color: #000000;
				text-transform: uppercase;
				height: 50px;
				width: 100px;
				animation-name: move;
				animation-duration: 6s;
				animation-iteration-count: infinite;
			}

			@keyframes move {
				to {
					transform: translateY(80vh);
				}
			}

			li:nth-child(1) {
				background: #CAD3C8;
				animation-timing-function: ease;
			}

			li:nth-child(2) {
				background: #3B3B98;
				animation-timing-function: ease-in;
			}

			li:nth-child(3) {
				background: #B33771;
				animation-timing-function: ease-in-out;
			}

			li:nth-child(4) {
				background: #25CCF7;
				animation-timing-function: ease-out;
			}

			li:nth-child(5) {
				background: #EAB543;
				animation-timing-function: linear;
			}
		</style>
	</head>
	<body>
		<div class='box'>
			<ul>
				<li>ease</li>
				<li>ease-in</li>
				<li>ease-in-out</li>
				<li>ease-out</li>
				<li>linear</li>
			</ul>
		</div>
	</body>
</html>

结束

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以通过使用JavaScript来获取CSS中动画沿着贝塞尔曲线运动的轨迹。首先,你需要获取CSS中定义动画的贝塞尔曲线的值,然后使用JavaScript计算出沿着该曲线的轨迹。 以下是一个示例代码: ```javascript // 获取元素的动画样式 var element = document.getElementById('your-element'); // 替换为你要获取动画样式的元素 var styles = window.getComputedStyle(element); var animationTimingFunction = styles.getPropertyValue('animation-timing-function'); // 提取贝塞尔曲线值 var bezierValue = animationTimingFunction.match(/cubic-bezier\(([^)]+)\)/)[1]; var bezierPoints = bezierValue.split(',').map(parseFloat); // 计算轨迹点坐标 var trajectoryPoints = []; for (var t = 0; t <= 1; t += 0.01) { var x = cubicBezier(t, 0, bezierPoints[0], bezierPoints[2], 1); var y = cubicBezier(t, 0, bezierPoints[1], bezierPoints[3], 1); trajectoryPoints.push({ x: x, y: y }); } // 输出轨迹点坐标 console.log(trajectoryPoints); // 贝塞尔曲线计算函数 function cubicBezier(t, p0, p1, p2, p3) { var mt = 1 - t; return mt * mt * mt * p0 + 3 * mt * mt * t * p1 + 3 * mt * t * t * p2 + t * t * t * p3; } ``` 这段代码首先获取了要应用动画的元素的动画样式,然后从样式中提取了贝塞尔曲线的值。接下来,使用贝塞尔曲线计算函数计算沿着曲线的轨迹,并将每个点的坐标存储在 `trajectoryPoints` 数组中。 你可以将上述代码中的 `your-element` 替换为你要获取动画轨迹的元素的ID。最终,`trajectoryPoints` 数组将包含沿着贝塞尔曲线的轨迹点坐标。你可以根据需要对这些坐标进行进一步处理或使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yma16

感谢支持!共勉!

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

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

打赏作者

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

抵扣说明:

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

余额充值