创建 "bobblehead" 个动画 jquery
Create "bobblehead" animation jquery
在我看来,摇头娃娃效果是一个“U”型动画形状,茎略短。
我试过使用各种 arcs/semi-circles 来创建摇头娃娃效果,但没有任何效果。
由于它是 SVG,所以我必须使用 transform 和 translate。我也在使用 animejs,但我也看不到在该库上实现此目的的方法。 jQuery动画步骤好像最简单?
这是我想要达到的效果:
[![在此处输入图片描述][1]][1]
使用此代码:
function loopBobble() {
var end = 180;
$({
counter: 0
}).animate({
counter: end
},{
duration: 1000,
easing: "swing",
step: function(t, fx) {
var a = t / 60; // from degrees to radians
var x = Math.cos(a) * 10;
var y = Math.sin(a) * 10;
$('#bobble').attr('style', 'transform: translateX(' + x + 'px) translateY(' + y + 'px);');
if (t == end) {
loopBobble();
}
}
});
}
loopBobble();
我用这张令人毛骨悚然的脸所能达到的最好结果是:
[![在此处输入图片描述][2]][2]
我的做法正确吗?我会假设“U”形动画会内置到 animejs 或 jquery 中。我在网上找不到太多。我不是数学家
仅 css 怎么样?
.head {
background-color: #FA0;
border-radius: 50%;
width: 100px;
height: 100px;
left: 0px;
top: 0px;
position: absolute;
animation-name: xOffset;
animation-duration: 1s;
animation:
xOffset 1s ease-in-out infinite,
yOffset .5s ease-in-out infinite;
}
@keyframes xOffset {
50% { left: 50px; }
100% { left: 0px; }
}
@keyframes yOffset {
50% { top: 25px; }
100% { top: 0px; }
}
<div class="head"></div>
transform: translate
-版本
您必须在 csv 中添加包装器才能在 x 和 y 上应用单独的缓动时间。否则,使用 transform
不可能使用不同的缓动时间,因为变换是作为一个整体进行动画处理的。
.head {
background-color: #FA0;
border-radius: 50%;
width: 100px;
height: 100px;
animation-name: xOffset;
animation-duration: 1s;
animation: xOffset 1s ease-in-out infinite;
}
.wrapper {
animation: yOffset .5s ease-in-out infinite;
}
@keyframes xOffset {
50% { transform: translateX(50px); }
100% { transform: translateX(0px); }
}
@keyframes yOffset {
50% { transform: translateY(25px); }
100% { transform: translateY(0px); }
}
<div class="wrapper">
<div class="head"></div>
</div>
在我看来,摇头娃娃效果是一个“U”型动画形状,茎略短。
我试过使用各种 arcs/semi-circles 来创建摇头娃娃效果,但没有任何效果。
由于它是 SVG,所以我必须使用 transform 和 translate。我也在使用 animejs,但我也看不到在该库上实现此目的的方法。 jQuery动画步骤好像最简单?
这是我想要达到的效果:
[![在此处输入图片描述][1]][1]
使用此代码:
function loopBobble() {
var end = 180;
$({
counter: 0
}).animate({
counter: end
},{
duration: 1000,
easing: "swing",
step: function(t, fx) {
var a = t / 60; // from degrees to radians
var x = Math.cos(a) * 10;
var y = Math.sin(a) * 10;
$('#bobble').attr('style', 'transform: translateX(' + x + 'px) translateY(' + y + 'px);');
if (t == end) {
loopBobble();
}
}
});
}
loopBobble();
我用这张令人毛骨悚然的脸所能达到的最好结果是:
[![在此处输入图片描述][2]][2]
我的做法正确吗?我会假设“U”形动画会内置到 animejs 或 jquery 中。我在网上找不到太多。我不是数学家
仅 css 怎么样?
.head {
background-color: #FA0;
border-radius: 50%;
width: 100px;
height: 100px;
left: 0px;
top: 0px;
position: absolute;
animation-name: xOffset;
animation-duration: 1s;
animation:
xOffset 1s ease-in-out infinite,
yOffset .5s ease-in-out infinite;
}
@keyframes xOffset {
50% { left: 50px; }
100% { left: 0px; }
}
@keyframes yOffset {
50% { top: 25px; }
100% { top: 0px; }
}
<div class="head"></div>
transform: translate
-版本
您必须在 csv 中添加包装器才能在 x 和 y 上应用单独的缓动时间。否则,使用 transform
不可能使用不同的缓动时间,因为变换是作为一个整体进行动画处理的。
.head {
background-color: #FA0;
border-radius: 50%;
width: 100px;
height: 100px;
animation-name: xOffset;
animation-duration: 1s;
animation: xOffset 1s ease-in-out infinite;
}
.wrapper {
animation: yOffset .5s ease-in-out infinite;
}
@keyframes xOffset {
50% { transform: translateX(50px); }
100% { transform: translateX(0px); }
}
@keyframes yOffset {
50% { transform: translateY(25px); }
100% { transform: translateY(0px); }
}
<div class="wrapper">
<div class="head"></div>
</div>