css - CSS Animation\Transformation 中的旋转方向

标签 css animation transform

我试图理解 CSS 动画,但遇到了以下问题:

我有一个简单的 div,它在 CSS 中附加了动画,如下所示:

<div id="learn">LEARN</div>

#learn {
    width: 100px;
    height: 100px;
    background: blue;
    position: relative;
    animation: test1 5s ease-in 2s infinite;
}

案例一:

@keyframes test1 {
    0% {
        transform: rotate(179deg);
    }
    100% {
        transform: rotate(357deg);
    }
}

情况 2(0% 变换被分成 90+89 度而不是 179 度):

@keyframes test1 {
    0% {
        transform: rotate(90deg) rotate(89deg);
    }
    100% {
        transform: rotate(357deg);
    }
 }

为什么第一种情况是顺时针旋转,第二种情况是逆时针旋转?

最佳答案

这可能只是旋转变换的一个错误,我将在了解一些背景知识后解决。

背景

首先,旋转应该的工作方式与圆有关。如果您指定了度数,则元素将放置在由度数指定的旋转量决定的位置。当不为旋转设置动画时,有许多方法可以表示元素的位置。 Code Uniquely 在他们的评论中只说对了一半,因为 357 度和 -3 度的位置是相同的,但是在制作动画时,它们非常不同。从 0 度到 -3 度是一个小的逆时针旋转,而从 0 度到 357 度是一个大的顺时针旋转。

调查结果

您发现的内容似乎忽略了此计算(在我测试过的 Firefox 和 Chrome 中)。据我所见,结合 rotate 转换有效地反转了旋转应该的方向,即使你结合了 0deg旋转:

transform: rotate(90deg); //rotates clockwise
transform: rotate(0deg) rotate(90deg); //rotates counter-clockwise

看来您可以通过“组合”两个动画步骤中的旋转变换来解决此问题:

// this performs a clockwise rotation
@keyframes test3 {
    0% {
        transform: rotate(0deg) rotate(90deg);
    }    
    100% {
        transform: rotate(0deg) rotate(357deg);
    }
}

最后,“组合”的数量似乎很重要。如果您在一个步骤中组合 2 个旋转,但在另一个步骤中组合 3 个,则会发生意外行为:

// rotates counter-clockwise since there are unequal rotation transforms
@keyframes test4 {
    0% {
        transform: rotate(0deg) rotate(0deg) rotate(90deg);
    }
    100% {
        transform: rotate(0deg) rotate(357deg);
    }
}

结论

这可能不是最好的答案,但似乎没有任何地方记录过像这样组合旋转。我建议不要组合相同的 rotate 转换(你仍然可以组合 rotateXrotateY 而没有这种奇怪的情况)并坚持使用度数的总和值(value)观。

如果发现此解释的任何人可能想比我更了解此行为,这里有一个 fiddle以上述示例为起点。

关于css - CSS Animation\Transformation 中的旋转方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31774798/

相关文章:

css - IFrame 模态,移动键盘在选择文本输入时遮盖输入字段

ios - 使 CCSprite 在触摸时跟随另一个 CCSprite?

c++ - 在这种情况下,我应该使用算法还是手动编码?

css - 在加载页面 CSS 图像变换时平滑缩放(在页面加载时更改图像大小)

html - 子菜单的子菜单 HTML+CSS

javascript - 单击 anchor 时如何更改工具提示?

html - 播放一次动画而不是循环播放 three.js

algorithm - 仅使用推送和删除操作将列表从订单 A 修改为订单 B

html - 亚马逊为何将CSS放在Head标签中?

image - 在matlab中将图像添加到动画中