変換の 1 つのコンポーネントを直接変更する方法はありません。残念なことに、可能なさまざまな変換はtransform
、属性自体ではなく、属性の値として実装されていました。CSS 属性値のオブジェクト モデルはありません。JavaScript に関する限り、属性値は常に単なる文字列です。すべての属性の省略形の属性と同じように、 、 などtransform
の省略形の属性として扱われるとよいでしょう。これにより、JavaScript を介して値に直接アクセスできるようになりますが、そのように実装されていないため、うまくいきません。transform-rotate-y
transform-*
background
background-*
編集: これを達成する最も簡単な方法は(仕様を調べたり、たくさんの計算をしたりせずに)、要素をネストして、それぞれに異なる変換を適用することです。変更されない複数の変換を適用する場合は、先に進み、それらを 1 つの要素に結合します。変更したい変換は、別の要素を使用します。
ここで動作します: jsfiddle.net/mkTKH/15
編集:以下の元のソリューションは機能しません。それをテストしたところgetComputedStyle()
、変換を に変換することがわかりましたmatrix()
。仕様の初期草案には次のように書かれています。
transform
によって返されるスタイル オブジェクトのプロパティにはgetComputedStyle
、CSS_MATRIX 型の単一の CSSTransformValue が含まれます。6 つのパラメーターは、プロパティにリストされている個々の関数を適用した結果である 3x2 マトリックスを表しtransform
ます。
したがって、それを解析する必要があります。属性値の一部だけを変更する場合は、正規表現を使用して値を解析できます。
var rotateY = "rotateY(" + deg + "deg)";
var transform = el.style.webkitTransform.replace(/\brotateY([^)]+)\b/, rotateY);
el.style.webkitTransform = transform;
再利用可能な関数を作成します。
function setTransformValue(el, name, value) {
var currentValue = new RegExp(name + "([^)]+)");
var style = window.getComputedStyle ? getComputedStyle(el) : el.currentStyle;
var currentTransform = style.transform ||
style.webkitTransform ||
style.MozTransform ||
style.msTransform ||
style.OTransform;
var transform;
if (currentValue.test(currentTransform )) {
transform = currentTransform.replace(currentValue, name + "(" + value + ")");
}
else {
transform = currentTransform + " " + name + "(" + value + ")";
}
el.style.transform = transform;
}
未テスト。