为什么包含警报模式会影响CSS的旋转方向
Why does inclusion of alert modal affect CSS rotation direction?
每次单击任何.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
使它工作?
使用
this.style.cssText.match(/'(('d+)deg')/)[1])
以获得原始的、未计算的值。
请参阅JS Fiddle演示。
在你的fiddle中,在从div中移除样式之前,当div处于360时,旋转将应用于div。因此,它将角度设置为0,然后在角度=0的基础上旋转回180。警报对话框在设置CSS之前添加了一个延迟,这允许删除样式,然后将角度设置为0,然后应用CSS。我相信@Gothdo上面所说的是不断地在div旋转中添加180,而不是将角度重置回零。你可以在这里看到这一点
相关文章:
- JS/CSS旋转的DIVS在任何屏幕的中间相遇
- Javascript使用CSS旋转元素
- 在 CSS 旋转中使过渡转弯的距离最短
- CSS 旋转不在窗口
- 使用CSS旋转元素后使用高度/宽度100%
- css旋转不'工作不正常
- iOS 8 css旋转元素消失
- 使用JavaScript从matrix3d()中获取3D CSS旋转值
- CSS旋转和平移转换会产生意想不到的结果
- JavaScript CSS旋转文本方向
- 控制CSS旋转动画:Get, set, start, stop
- 如何在FireFox中使用CSS旋转HTML中的图像…
- jquery/CSS旋转隐藏图像的一半
- 如何应用CSS旋转过渡周围的字形's垂直的中间或中心点
- 使用Javascript/CSS旋转、过渡占位符文本
- 纯CSS旋转器冻结
- CSS旋转、最终帧和内联块
- 通过修改 css 旋转图像
- 停止CSS旋转动画在未知关键帧平滑
- Firefox的CSS旋转不同于Chrome的旋转