我想要一个按钮,每次单击时将元素旋转5度。我已经能够使用像
这样的边框宽度来做这种事情 $(document).on('click', '.brdr_width_up', function() {
$(ws.currentCell).css({'border-top-width' : '+=1', 'border-right-width' : '+=1','border-bottom-width' : '+=1','border-left-width' : '+=1'});
});
但同样的想法似乎不适用于transform:rotate:
$(document).on('click', '.rotate_cw', function() {
$(ws.currentCell).css({'-webkit-transform': 'rotate(+=5deg)'});
$(ws.currentCell).css({'-moz-transform': 'rotate(+=5deg)'});
var deg = $(ws.currentCell).css({'-moz-transform': 'rotate()'});
});
上面的var行不会带回当前的旋转,所以我可以添加它。
有没有人知道这样做的方法?
由于
答案 0 :(得分:5)
如果您不想搞乱矩阵,可以使用数据属性来跟踪旋转,并执行更多类似的操作:
$(document).on('click', '.rotate_cw', function() {
var r = $(ws.currentCell).data('rot') + 5;
$(ws.currentCell).css({
'-webkit-transform': 'rotate('+r+'deg)',
'-moz-transform': 'rotate('+r+'deg)',
'-ms-transform': 'rotate('+r+'deg)',
'-o-transform': 'rotate('+r+'deg)',
'transform': 'rotate('+r+'deg)'
}).data('rot', r);
});
答案 1 :(得分:1)
使用以下功能(来源:Get element -moz-transform:rotate value in jQuery)
function getRotationDegrees(obj) {
var matrix = obj.css("-webkit-transform") ||
obj.css("-moz-transform") ||
obj.css("-ms-transform") ||
obj.css("-o-transform") ||
obj.css("transform");
if(matrix !== 'none') {
var values = matrix.split('(')[1].split(')')[0].split(',');
var a = values[0];
var b = values[1];
var angle = Math.round(Math.atan2(b, a) * (180/Math.PI));
} else { var angle = 0; }
return angle;
}
要获得旋转,然后向角度添加5度并重新应用,例如
$(document).on('click', '.rotate_cw', function() {
var target = $(ws.currentCell);
var rotation = getRotationDegrees(target) + 5;
target.css({
'-webkit-transform': 'rotate(' + rotation + 'deg)'
, '-moz-transform': 'rotate(' + rotation + 'deg)'
, '-o-transform': 'rotate(' + rotation + 'deg)'
, '-ms-transform': 'rotate(' + rotation + 'deg)'
, 'transform': 'rotate(' + rotation + 'deg)'
});
});
这也适用于已应用默认旋转的元素。