我只是想知道如何使用jquery .css()函数不覆盖,而是为css属性添加其他值。
例如,我有一个当前有css transform:translate(-50%, -50%)
的元素。我想使用jQuery .css()函数来添加transform: rotate(90deg)
,但是当我使用它时,它会覆盖它。
如果我的描述令人困惑,请查看这个小提琴。 http://jsfiddle.net/justinbchristensen/mvhwbjLo/1/
你会在小提琴中看到,当你第一次点击按钮时,方块会失去原来的转换,向下滑动并旋转,但随后点击按钮只会旋转方块,因为它不会丢失'转换:转换'属性。
我不想在我的.css()函数element.css('transform', 'translate(-50%,-50%) rotate(90deg)'
中说,我只是希望能够将旋转添加到现有转换。
有没有办法做到这一点?
答案 0 :(得分:0)
保存当前样式,然后连接:
var rotation = 0;
function rotate() {
rotation += 90;
var rotationString = 'rotate(' + rotation + 'deg)';
var current = $('#square').css('transform');
$('#square').css('transform', current +' '+ rotationString);
}
它有效,而且我不知道是否有另一种方法可以做到。
答案 1 :(得分:0)
由于transform
是一种速记,因此必须合并这些值...没有增量方法。
您可以做的是检索以前的值并附加新值:
var rotation = 0;
function rotate() {
rotation += 90;
var rotationString = 'rotate(' + rotation + 'deg)';
var prev = $('#square').css('transform');
$('#square').css('transform', prev + " " + rotationString);
}
答案 2 :(得分:0)
它覆盖值而不是添加值的原因仅仅是how the cascade works。也就是说,您在transform
属性上设置了一个值,就像所有其他CSS属性一次只能有一个值一样,因此就API而言,您将使用新值覆盖其现有值。一。在CSS中,这可能是它的样子:
#square {
transform: translate(-50%, -50%);
transform: rotate(90deg);
}
如您所见,这将导致第二个声明覆盖第一个声明。
CSS不支持部分或附加属性声明,同样也无法直接向现有属性添加值而不会导致现有值丢失。
基本上,这意味着您必须在设置新值时包含现有转换。由于您使用jQuery进行设置,因此可以retrieve the existing value using the .css()
getter, then concatenate your new transform and apply the result,从而节省了对现有值进行硬编码的需要:
var currentTransform = $('#square').css('transform');
var rotationString = 'rotate(' + rotation + 'deg)';
var newTransform = currentTransform + ' ' + rotationString;
$('#square').css('transform', newTransform);
这个问题的主要问题是再次触发这个特定的代码块会导致currentTransform
包含旋转。这将继续每次添加旋转。如果不需要这样做,您将需要编写一些检查,或者不幸的是,对该值进行硬编码。