.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",
});
});
これは最初の2回のクリックのために正常に動作しますが、それは、私はすでにきたという事実にもかかわらず、360˚から180˚に回転だかのように第三のクリックで、div要素は、反時計回りに回転style
属性を削除しました。
は、ここで作業フィドルです:https://jsfiddle.net/wwny5q5d/3/
さて、私は本当に好奇心持っている事は、私が.css()
を呼び出す前にalert
またはdebugger
追加した場合、私は、時計回りにそれをしたいと、第3の回転が行くということです。
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
を含めることは、それを動作させるのでしょうか?
@ゴートなぜなら、何種類かのカウンタを使用しない限り、0度または360度の角度を区別することができないからです。これは、たくさんの '.test' divがあるために必要ではありません。だから、私が180度か540度に回転したいのかどうか分かりますか? – digglemister
@ゴート私は私が従うかどうかわからない。現在のローテーションに180を追加するだけですか?問題は、すでにどれだけ回転しているのかわからないため、回転行列の値はmod360と同じです。 – digglemister
はい、http://stackoverflow.com/questions/13592384/how-to-retrieve-the-angle-in-css3-rotateを参照してください –