123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /*
- Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.fx.ext-dojo.reverse"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.fx.ext-dojo.reverse"] = true;
- dojo.provide("dojox.fx.ext-dojo.reverse");
- dojo.require("dojo.fx.easing");
- dojo.require("dojo.fx");
-
- dojo.extend(dojo.Animation, {
- // summary:
- // A dojo.Animation extension that enables an easy reversal.
- // description:
- // To use, simply require dojox.fx.ext-dojo.reverse and a reverse()
- // method will be added to all dojo.Animations.
- // It can be used at any time during the animation. It does not
- // need to be called when it ends. It also reverses the easing -
- // if dojo.fx.easing.quadIn is used, dojo.fx.easing.quadOut will
- // be used when animating backwards.
- //
- _reversed: false,
- reverse: function(/*Boolean*/keepPaused, /*Function ? */reverseEase){
- // summary:
- // The key method added to an animation to enable reversal.
- // keepPaused: Boolean
- // By default, calling reverse() will play the animation if
- // it was paused. Pass in true to keep it paused (will have
- // no effect if reverse is called while animation is playing).
- // reverseEase: Function
- // A function to use for the reverse easing. This allows for
- // the possibility of custom eases that are not in the dojo.fx
- // library.
- //
- var playing = this.status() == "playing";
- this.pause();
- this._reversed = !this._reversed;
- var d = this.duration,
- sofar = d * this._percent,
- togo = d - sofar,
- curr = new Date().valueOf(),
- cp = this.curve._properties,
- p = this.properties,
- nm
- ;
- this._endTime = curr + sofar;
- this._startTime = curr - togo;
-
- if(playing){
- this.gotoPercent(togo / d)
- }
- for(nm in p){
- var tmp = p[nm].start;
- p[nm].start = cp[nm].start = p[nm].end;
- p[nm].end = cp[nm].end = tmp;
- }
-
- if(this._reversed){
- if(!this.rEase){
- this.fEase = this.easing;
- if(reverseEase){
- this.rEase = reverseEase;
- }else{
- // loop through dojo.fx.easing to find the matching ease
- var de = dojo.fx.easing, found, eName;
- for(nm in de){
- if(this.easing == de[nm]){
- // get ease's name
- found = nm; break;
- }
- }
-
- if(found){
- // find ease's opposite
- if(/InOut/.test(nm) || !/In|Out/i.test(nm)){
- this.rEase = this.easing;
- }else if(/In/.test(nm)){
- eName = nm.replace("In", "Out");
- }else{
- eName = nm.replace("Out", "In");
- }
- if(eName){
- this.rEase = dojo.fx.easing[eName];
- }
- }else{
- // default ease, and other's like linear do not have an opposite
- console.info("ease function to reverse not found");
- this.rEase = this.easing;
- }
- }
-
- }
- this.easing = this.rEase;
- }else{
- this.easing = this.fEase;
- }
- if(!keepPaused && this.status() != "playing"){
- this.play();
- }
-
- return this;
- }
- });
- }
|