【发布时间】:2016-04-13 20:31:36
【问题描述】:
每次单击时,我都会尝试将任何.test div 顺时针旋转 180˚。
我所做的基本上是:
- 如果没有发生旋转,请旋转到 180˚。
- 如果已旋转到 180˚,请旋转到 360˚。
- 如果已旋转到 360˚,请移除
transform和transition属性并旋转到 180˚。
$(".test").click(function(){
var angle;
var matrix = $(this).css("-webkit-transform")
if (matrix == "none") { //div hasn't been rotated yet
angle = 0;
}
else {
var values = matrix.split('(')[1].split(')')[0].split(',');
var a = values[0]; //should be -1 if div is upside down, 1 if it is normal.
if(a == 1) {
$(this).removeAttr('style');
angle = 0;
}
else {
angle = 180;
}
}
$(this).css({
"-webkit-transform": "rotate("+(angle+180)+"deg)",
"-moz-transform": "rotate("+(angle+180)+"deg)",
"transform": "rotate("+(angle+180)+"deg)",
"-webkit-transition": "-webkit-transform 0.3s ease-in",
});
});
这对于前两次点击效果很好,但在第三次点击时,div 会逆时针旋转,就好像它从 360˚ 旋转到 180˚,尽管我已经删除了 style 属性。
这是一个有效的小提琴:https://jsfiddle.net/wwny5q5d/3/
现在,让我真正好奇的是,如果我在调用 .css() 之前添加一个 alert 或 debugger,第三次旋转会按照我的意愿顺时针旋转。
alert("Now it will always rotate clockwise")
$(this).css({
"-webkit-transform": "rotate("+(angle+180)+"deg)",
"-moz-transform": "rotate("+(angle+180)+"deg)",
"transform": "rotate("+(angle+180)+"deg)",
"-webkit-transition": "-webkit-transform 0.3s ease-in",
});
所以我的问题是:为什么我的 div 在第三次点击时没有顺时针旋转,为什么包含 alert 使它工作?
【问题讨论】:
-
@Gothdo 因为我无法区分它是在 0˚ 还是 360˚ 度,除非我使用某种计数器,因为有一堆
.testdiv .那么我怎么知道我是要旋转到 180˚ 还是 540˚? -
@Gothdo 我不确定我是否跟随。你是说只在当前轮换中增加 180 吗?因为问题是我不知道它已经旋转了多少,我只知道旋转矩阵中的值,相当于mod360。
-
@Gothdo 但同样,问题是两次点击后我处于 360˚,但是使用您发布的问题中的方法获得这个角度给了我 0˚。所以如果我简单地把它加上 180˚,它就会把我从 360 逆时针移动到 180。
-
@Gothdo 使用您发布的问题中的方法计算的旋转量值始终为 [0,360),而 css 属性 -webkit-transform 可以具有任何值。
标签: javascript jquery css rotation