我试图在每次点击时将任何.test
div顺时针旋转180˚。为什么包含警报模式会影响CSS旋转方向?
我所做的基本上是:
- 如果没有发生旋转,旋转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",
});
});
这对于前两个点击工作正常,但在第三次点击,股利,逆时针旋转,仿佛它是从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˚度,除非我使用某种计数器,这是我不想要的,因为有一些'.test' div。那么如何知道我是否想旋转180˚或540˚? – digglemister
@Gothdo我不知道我跟着。你是说只在当前的旋转中加180?因为问题在于我不知道它已经旋转了多少,所以我只知道旋转矩阵中的值,它们相当于mod360。 – digglemister
是的,请参阅http://stackoverflow.com/questions/13592384/how-to-retrieve-the-angle-in-css3-rotate –