Effect. Transform
Effect.
デモをご覧ください。このように使います。
// Effect.Transformを作って,後で呼び出す例
var transformation = new Effect.Transform([
{ 'div.morphing': // DIV要素で,CSSクラスが'morphing'のものを指定する
'font-size:20px;padding-left:40em;opacity:0.5' }, //目標のCSSに向かって徐々に変化する
{ 'error_message': // DOM idでの指定。やはり'#error_message'とCSSセレクタで指定することもできる。
'width:480px;border-width:10px;' + //目標のCSS
'border-right-width:20px;' +
'margin:20px;margin-bottom:-20px;' +
'font-size:30px;' +
'background:#954' }
],{ duration: 1.3 });
// 後で呼ぶ。
transformation.play();
1004:Effect.Transform = Class.create({
1005: initialize: function(tracks){
1006: this.tracks = [];
1007: this.options = arguments[1] || { };
1008: this.addTracks(tracks);
1009: },
1004~1021行目のinitializeは,
1010: addTracks: function(tracks){
1011: tracks.each(function(track){
1012: track = $H(track);
1013: var data = track.values().first();
1014: this.tracks.push($H({
1015: ids: track.keys().first(),
1016: effect: Effect.Morph,
1017: options: { style: data }
1018: }));
1019: }.bind(this));
1020: return this;
1021: },
1010~1021行目のaddTracksは,
配列で与えられた、要素のidと目標のCSSをそれぞれkeys().first()とvalues().first()を使って取りだして、this.
1022: play: function(){
1023: return new Effect. Parallel(
1024: this.tracks. map(function(track){
1025: var ids = track. get('ids'), effect = track. get('effect'), options = track. get('options');
1026: var elements = [$(ids) || $$(ids)].flatten();
1027: return elements. map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
1028: }).flatten(),
1029: this.options
1030: );
1031: }
1032:});
1033:
1022~1033行目のplayは,
1025行目で,
1026行目で,
1027行目で,
1028行目で、mapのmapからできた配列の入れ子を、flattenでつぶして、Effect.