我有两个图像在DOM元素周围移动。但是它们的旋转是错误的,并且运动不顺畅。
我的小提琴
destinationFolder="~/destination"
searchFolder=$PWD
for folder in `ls -lrth $searchFolder| grep "^d"| awk -F '{print $9}'`
do
fileCount=`ls $folder|wc -l`
findCount=`find ${searchFolder}/${folder} -type f | xargs egrep -v "\(|\)"`
if [[ $fileCount -eq $findCount ]]; then
cp -rp $folder $destinationFolder
fi
done

#mainPage {
width: 400px;
height: 165px;
margin: 10% auto;
}
#mainPage>p {
text-align: center;
}
.bicycle {
width: 48px;
height: 30px;
background: red;
}
#bicycleOriginal {
animation: moveBicycleOriginal 20s infinite;
}
#bicycleFlipped {
animation: moveBicycleFlipped 20s infinite;
}
#mainTxt {
letter-spacing: 7px;
font-size: 30px;
margin-bottom: 30px;
}
@keyframes moveBicycleOriginal {
from {
transform: translate(0, 0);
}
1% {
transform: translate(0, 0) rotate(0deg);
}
25% {
transform: translate(350px, 0);
}
26% {
transform: translate(350px, 0) rotate(90deg);
}
50% {
transform: translate(350px, 150px);
}
51% {
transform: translate(350px, 150px) rotate(180deg);
}
75% {
transform: translate(0, 150px);
}
76% {
transform: translate(0, 150px) rotate(270deg);
}
to {
transform: translate(0, 0);
}
}
@keyframes moveBicycleFlipped {
from {
transform: translate(350px, 0);
}
1% {
transform: translate(350px, 0) rotate(0deg);
}
25% {
transform: translate(0, 0);
}
26% {
transform: translate(0, 0) rotate(90deg);
}
50% {
transform: translate(0, -150px);
}
51% {
transform: translate(0, -150px) rotate(180deg);
}
75% {
transform: translate(350px, -150px);
}
76% {
transform: translate(350px, -150px) rotate(270deg);
}
to {
transform: translate(350px, 0);
}
}

所以我想要的是这样的
传递第一个关键帧后,框进入错误的旋转。此外,它们不能顺利移动,中间越快,到达终点时越慢。
有人可以帮助我使用关键帧吗?
答案 0 :(得分:7)
您需要始终保持在变换中定义的旋转,因为每个变换将覆盖前一个变换,并且移除旋转意味着rotate(0)
。
为了使动画更准确,最后一个状态应该类似于第一个状态,以避免在重新启动动画时跳转。所以你应该转到相当于360deg
的{{1}}轮换。 (就像你在翻译时所做的那样回到初始值)。
然后,您可以根据需要调整animation-timing-function
以控制动画进度。
0deg
#mainPage {
width: 400px;
height: 165px;
margin: 10% auto;
}
#mainPage>p {
text-align: center;
}
.bicycle {
width: 48px;
height: 30px;
background: red;
}
#bicycleOriginal {
animation: moveBicycleOriginal 20s infinite;
}
#bicycleFlipped {
animation: moveBicycleFlipped 20s infinite;
}
#mainTxt {
letter-spacing: 7px;
font-size: 30px;
margin-bottom: 30px;
}
@keyframes moveBicycleOriginal {
from {
transform: translate(0, 0) rotate(0deg);
}
25% {
transform: translate(350px, 0) rotate(0deg);
}
26% {
transform: translate(350px, 0) rotate(90deg);
}
50% {
transform: translate(350px, 150px) rotate(90deg);
}
51% {
transform: translate(350px, 150px) rotate(180deg);
}
75% {
transform: translate(0, 150px) rotate(180deg);
}
76% {
transform: translate(0, 150px) rotate(270deg);
}
98% {
transform: translate(0, 0) rotate(270deg);
}
to {
transform: translate(0, 0) rotate(360deg);
}
}
@keyframes moveBicycleFlipped {
from {
transform: translate(350px, 0) rotate(0deg);
}
25% {
transform: translate(0, 0) rotate(0deg);
}
26% {
transform: translate(0, 0) rotate(90deg);
}
50% {
transform: translate(0, -150px) rotate(90deg);
}
51% {
transform: translate(0, -150px) rotate(180deg);
}
75% {
transform: translate(350px, -150px) rotate(180deg);
}
76% {
transform: translate(350px, -150px) rotate(270deg);
}
97% {
transform: translate(350px, 0) rotate(270deg);
}
to {
transform: translate(350px, 0) rotate(360deg);
}
}
答案 1 :(得分:2)
速度减慢/加速是因为animationTiming(默认缓动),应该是'线性'。
动画不正确的原因,因为你取消了旋转。这可能会出乎意料,您可以使用css transform
控制转换。您还可以使用transform
控制轮换。
#example{
transform: rotate(10deg)
}
#example.changed{
transform: translateX(100px);
}
在此代码段中,当您添加课程changed
时,您重新定义了变换,告诉它忘记rotate
并设置translateX
。在这个例子中,为了保持它们:
#example.changed{
transform: rotate(10deg) translateX(100px);
}
答案 2 :(得分:1)
我已经接受了Temani Afif的回答,并稍微改了一下。
我设置了一个aditional变换,在旋转后应用。这使得转弯是平滑,因为对象在路径之后而不是在同一个地方旋转
我已按照Martijn
的建议将时间设置为线性我已将其简化为使用单个关键帧规则,在翻转的div上设置延迟。
并且延长了长边的时间片并使另一方更长时间,以便感知速度更加恒定
结果:
#mainPage {
width: 400px;
height: 165px;
margin: 10% auto;
}
#mainPage>p {
text-align: center;
}
.bicycle {
width: 48px;
height: 30px;
background: red;
}
#bicycleOriginal {
animation: moveBicycleOriginal 20s infinite linear;
}
#bicycleFlipped {
position: relative;
top: -120px;
animation: moveBicycleOriginal 20s -10s infinite linear;
}
#mainTxt {
letter-spacing: 7px;
font-size: 30px;
margin-bottom: 30px;
}
@keyframes moveBicycleOriginal {
from {
transform: translate(0, 0) rotate(0deg) translate(0, -50px);
}
26% {
transform: translate(350px, 0) rotate(0deg) translate(0, -50px);
}
30% {
transform: translate(350px, 0) rotate(90deg) translate(0, -50px);
}
46% {
transform: translate(350px, 150px) rotate(90deg) translate(0, -50px);
}
50% {
transform: translate(350px, 150px) rotate(180deg) translate(0, -50px);
}
76% {
transform: translate(0, 150px) rotate(180deg) translate(0, -50px);
}
80% {
transform: translate(0, 150px) rotate(270deg) translate(0, -50px);
}
96% {
transform: translate(0, 0) rotate(270deg) translate(0, -50px);
}
to {
transform: translate(0, 0) rotate(360deg) translate(0, -50px);
}
}
<div id="mainPage">
<div class="bicycle" id="bicycleOriginal"></div>
<p class="txt" id="mainTxt">DRAHTESEL</p>
<div class="bicycle" id="bicycleFlipped"></div>
</div>