Effect. Shake
0655:Effect.Shake = function(element) {
0656: element = $(element);
0657: var options = Object.extend({
0658: distance: 20,
0659: duration: 0.5
0660: }, arguments[1] || {});
0661: var distance = parseFloat(options.distance);
0662: var split = parseFloat(options.duration) / 10.0;
0663: var oldStyle = {
0664: top: element.getStyle('top'),
0665: left: element.getStyle('left') };
0666: return new Effect.Move(element,
0667: { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
0668: new Effect.Move(effect.element,
0669: { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
0670: new Effect.Move(effect.element,
0671: { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
0672: new Effect.Move(effect.element,
0673: { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
0674: new Effect.Move(effect.element,
0675: { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
0676: new Effect.Move(effect.element,
0677: { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
0678: effect.element.undoPositioned().setStyle(oldStyle);
0679: }}) }}) }}) }}) }}) }});
0680:};
0681:
655~681行目のEffect.
658行目で,
659行目で,
661行目で,
662行目で,
663~665行目で,
666~679行目で,
右に20px動かします。左に40px動かします。右に40px動かします。左に40px動かします。右に40px動かします。左に20px動かします。これで原点に戻ってきました。
678行目で,
ちなみに,
Effect.YetanotherShake = function (element) {
element = $(element);
var options = Object.extend({distance:20, duration:0.5}, arguments[1] || {});
var distance = parseFloat(options.distance) * 2;
var oldStyle = {top:element.getStyle("top"), left:element.getStyle("left")};
options = Object.extend({x:distance, y:0, transition:function(pos){
return (Math.sin(6*pos*Math.PI)/2)
}, afterFinish: function(effect) {
effect.element.undoPositioned().setStyle(oldStyle)
}},options);
return new Effect.Move(element, options);
}
Effect. SlideDown
0682:Effect.SlideDown = function(element) {
0683: element = $(element).cleanWhitespace();
0684: // SlideDown need to have the content of the element wrapped in a container element with fixed height!
0685: var oldInnerBottom = element.down().getStyle('bottom');
0686: var elementDimensions = element.getDimensions();
0687: return new Effect.Scale(element, 100, Object.extend({
0688: scaleContent: false,
0689: scaleX: false,
0690: scaleFrom: window.opera ? 0 : 1,
0691: scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
0692: restoreAfterFinish: true,
0693: afterSetup: function(effect) {
0694: effect.element.makePositioned();
0695: effect.element.down().makePositioned();
0696: if (window.opera) effect.element.setStyle({top: ''});
0697: effect.element.makeClipping().setStyle({height: '0px'}).show();
0698: },
0699: afterUpdateInternal: function(effect) {
0700: effect.element.down().setStyle({bottom:
0701: (effect.dims[0] - effect.element.clientHeight) + 'px' });
0702: },
0703: afterFinishInternal: function(effect) {
0704: effect.element.undoClipping().undoPositioned();
0705: effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
0706: }, arguments[1] || { })
0707: );
0708:};
0709:
682~709行目のEffect.
683行目で,
685行目で,
686行目で,
687行目で,
688行目で,
689行目で,
690行目で,
691行目で,
692行目で,
693行目で,
694行目で,
696行目で,
697行目で,
699行目で,
703行目で,
705行目で,
Effect. SlideUp
0710:Effect.SlideUp = function(element) {
0711: element = $(element).cleanWhitespace();
0712: var oldInnerBottom = element.down().getStyle('bottom');
0713: var elementDimensions = element.getDimensions();
0714: return new Effect.Scale(element, window.opera ? 0 : 1,
0715: Object.extend({ scaleContent: false,
0716: scaleX: false,
0717: scaleMode: 'box',
0718: scaleFrom: 100,
0719: scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
0720: restoreAfterFinish: true,
0721: afterSetup: function(effect) {
0722: effect.element.makePositioned();
0723: effect.element.down().makePositioned();
0724: if (window.opera) effect.element.setStyle({top: ''});
0725: effect.element.makeClipping().show();
0726: },
0727: afterUpdateInternal: function(effect) {
0728: effect.element.down().setStyle({bottom:
0729: (effect.dims[0] - effect.element.clientHeight) + 'px' });
0730: },
0731: afterFinishInternal: function(effect) {
0732: effect.element.hide().undoClipping().undoPositioned();
0733: effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
0734: }
0735: }, arguments[1] || { })
0736: );
0737:};
0738:
710~738行目のEffect.
717行目と719行目でscaleModeが2回登場するのはバグでしょう。