我以前没有玩过 WebKitCSSMatrix 属性,所以我决定给自己一个挑战,制作一个基于 Web 的魔方。这是以前做过的事情,但我想我会从头开始尝试(不查看任何其他来源)。但是,在旋转每个单独的立方体时,我现在遇到了一些困难。
这是我目前拥有的:JSFiddle。(是的,现在这只是一个 2x2 立方体)。
请注意,轴本身还没有作为一个整体旋转,我现在只专注于单个立方体旋转。
为了旋转每一边,您只需单击并拖动。因此,例如,如果您单击左上角的红色方块并向右拖动光标,您将逆时针向右旋转顶行的每个立方体。
如您所见,如果仅以一种方式(或相反的方式)进行,则每个轴的每个立方体都可以正确旋转,但是当您组合两个轴时,旋转就会混乱。发生这种情况是因为我假设我对该rotateAxisAngle()
方法的使用没有与之前的轮换叠加。
例如,如果我们抓住正面左上角的红色方块并向右拖动,我们最终会得到:
此处case ('right')
已触发并rotateAxisAngle(0, 1, 0, 90)
应用了旋转。红色立方体已逆时针向右旋转,现在白色面根据需要位于前面。这个红色立方体现在有以下内容style
:
<div
class="cube"
style="
-webkit-transform: matrix3d( 0, 0, -1, 0,
0, 1, 0, 0,
1, 0, 0, 0,
0, 0, 0, 1 );
"> ... </div>
如果我们现在抓住同一个正方形并将其向下移动,顶部的蓝色面应该在前面结束。这就是问题所在。在这样做时,我们最终得到:
立方体不是顺时针向下旋转,而是逆时针向右旋转。矩阵已转换为:
-webkit-transform: matrix3d( 0, 0, -1, 0,
-1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 0, 1 );
所需的矩阵应该是:
-webkit-transform: matrix3d( 0, -1, 0, 0,
0, 0, -1, 0,
1, 0, 0, 0,
0, 0, 0, 1 );
我需要做什么才能将新旋转堆叠在前一个旋转之上,就好像前一个旋转是立方体的默认旋转一样?