ダウンロード
- リポジトリ … https://github.com/ginpei/jQuery.transform
- JSファイル … jquery.transform.js
 
なにこれ?
CSSのtransformプロパティの値を素敵に扱うやつです。 .css()からtransformを扱う際に既存の値を完全に上書きしてしまう問題を解消します。
transform ?
transformはご存知CSS3で追加されたプロパティで、要素を変形(transform)させる事ができます。このプロパティ複数の値を取り得、例えば「小さめで傾ける」という指定の場合は
transform: scale(.8) rotate(-30deg);
のような指定になります。
詳しくはこのあたりとか。
jQuery + transformの問題点
jQueryでスタイルを操作する場合は .css()を利用します。
しかし、これはプロパティの名前と値が対にして利用します。つまりtransformに値を指定する場合はscale(.8) rotate(-30deg)と書く必要があるわけです。……当たり前ですね。
問題は、プロパティを設定するときではなく変更するときです。拡縮と回転を順に行うとき、どういうコードを書くべきでしょうか?
$elem.css('transform', 'scale(.8)');
// …
$elem.css('transform', 'rotate(-30deg)');
// -> transform: rotate(-30deg)
一度縮小して、しばらく後に傾けました。このコードの問題点は、二度目の .css()の時点でtransformの値が上書きされてしまう点です。つまり、上記を実行した後のtransformの値はscale(.8) rotate(-30deg)ではなく、rotate(-30deg)のみとなってしまいます。うーん、これはよろしくない。
ばらばらに扱えるように
というわけで、個別に扱えるようにしたのがjQuery.transform.jsです。jquery.transform.jsを読み込んでおくと、$elem.transform()というメソッドを利用出来るようになります。
// include: jquery.transform.js
$elem.transform('scale', '.8');
// …
$elem.transform('rotate', '-30deg');
// -> transform: scale(0.8) rotate(-30deg)
これなら過去に設定した、他のtransformのプロパティが消える事はありません。
ちなみに値を取得したり、上書きする事も出来ます。
// include: jquery.transform.js
$elem
  .transform('scale', '.8')
  .transform('rotate', '-30deg');
// …
$elem.transform('rotate', '-45deg');
// -> transform: scale(0.8) rotate(-45deg)
console.log($elem.transform('rotate'));  // => "-45deg"
今後
出来るようにする
- transformの初期値を生かす
- 単位を自動補完(pxとかdegとか)
出来るようにするつもりはない
- matrix()対応
道は険しいがやりたい
- .css()から扱えるようにする- $elem.css('transform:rotate', '10deg')みたいな
 
- .animate()対応
- 内部で .data()を利用しているが、jQuery.cacheの方に情報を移行したい
- 汎化; 複数値を取り得るプロパティ全般に対応する
- background-imageとか- box-shadowとか
- インターフェイスをどうするのか悩む……
 
 
          