Animation.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:5k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.animation.Animation");
  9. dojo.require("dojo.animation.AnimationEvent");
  10. dojo.require("dojo.lang.func");
  11. dojo.require("dojo.math");
  12. dojo.require("dojo.math.curves");
  13. dojo.deprecated("dojo.animation.Animation is slated for removal in 0.5; use dojo.lfx.* instead.", "0.5");
  14. dojo.animation.Animation = function (curve, duration, accel, repeatCount, rate) {
  15. if (dojo.lang.isArray(curve)) {
  16. curve = new dojo.math.curves.Line(curve[0], curve[1]);
  17. }
  18. this.curve = curve;
  19. this.duration = duration;
  20. this.repeatCount = repeatCount || 0;
  21. this.rate = rate || 25;
  22. if (accel) {
  23. if (dojo.lang.isFunction(accel.getValue)) {
  24. this.accel = accel;
  25. } else {
  26. var i = 0.35 * accel + 0.5;
  27. this.accel = new dojo.math.curves.CatmullRom([[0], [i], [1]], 0.45);
  28. }
  29. }
  30. };
  31. dojo.lang.extend(dojo.animation.Animation, {curve:null, duration:0, repeatCount:0, accel:null, onBegin:null, onAnimate:null, onEnd:null, onPlay:null, onPause:null, onStop:null, handler:null, _animSequence:null, _startTime:null, _endTime:null, _lastFrame:null, _timer:null, _percent:0, _active:false, _paused:false, _startRepeatCount:0, play:function (gotoStart) {
  32. if (gotoStart) {
  33. clearTimeout(this._timer);
  34. this._active = false;
  35. this._paused = false;
  36. this._percent = 0;
  37. } else {
  38. if (this._active && !this._paused) {
  39. return;
  40. }
  41. }
  42. this._startTime = new Date().valueOf();
  43. if (this._paused) {
  44. this._startTime -= (this.duration * this._percent / 100);
  45. }
  46. this._endTime = this._startTime + this.duration;
  47. this._lastFrame = this._startTime;
  48. var e = new dojo.animation.AnimationEvent(this, null, this.curve.getValue(this._percent), this._startTime, this._startTime, this._endTime, this.duration, this._percent, 0);
  49. this._active = true;
  50. this._paused = false;
  51. if (this._percent == 0) {
  52. if (!this._startRepeatCount) {
  53. this._startRepeatCount = this.repeatCount;
  54. }
  55. e.type = "begin";
  56. if (typeof this.handler == "function") {
  57. this.handler(e);
  58. }
  59. if (typeof this.onBegin == "function") {
  60. this.onBegin(e);
  61. }
  62. }
  63. e.type = "play";
  64. if (typeof this.handler == "function") {
  65. this.handler(e);
  66. }
  67. if (typeof this.onPlay == "function") {
  68. this.onPlay(e);
  69. }
  70. if (this._animSequence) {
  71. this._animSequence._setCurrent(this);
  72. }
  73. this._cycle();
  74. }, pause:function () {
  75. clearTimeout(this._timer);
  76. if (!this._active) {
  77. return;
  78. }
  79. this._paused = true;
  80. var e = new dojo.animation.AnimationEvent(this, "pause", this.curve.getValue(this._percent), this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent, 0);
  81. if (typeof this.handler == "function") {
  82. this.handler(e);
  83. }
  84. if (typeof this.onPause == "function") {
  85. this.onPause(e);
  86. }
  87. }, playPause:function () {
  88. if (!this._active || this._paused) {
  89. this.play();
  90. } else {
  91. this.pause();
  92. }
  93. }, gotoPercent:function (pct, andPlay) {
  94. clearTimeout(this._timer);
  95. this._active = true;
  96. this._paused = true;
  97. this._percent = pct;
  98. if (andPlay) {
  99. this.play();
  100. }
  101. }, stop:function (gotoEnd) {
  102. clearTimeout(this._timer);
  103. var step = this._percent / 100;
  104. if (gotoEnd) {
  105. step = 1;
  106. }
  107. var e = new dojo.animation.AnimationEvent(this, "stop", this.curve.getValue(step), this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent);
  108. if (typeof this.handler == "function") {
  109. this.handler(e);
  110. }
  111. if (typeof this.onStop == "function") {
  112. this.onStop(e);
  113. }
  114. this._active = false;
  115. this._paused = false;
  116. }, status:function () {
  117. if (this._active) {
  118. return this._paused ? "paused" : "playing";
  119. } else {
  120. return "stopped";
  121. }
  122. }, _cycle:function () {
  123. clearTimeout(this._timer);
  124. if (this._active) {
  125. var curr = new Date().valueOf();
  126. var step = (curr - this._startTime) / (this._endTime - this._startTime);
  127. var fps = 1000 / (curr - this._lastFrame);
  128. this._lastFrame = curr;
  129. if (step >= 1) {
  130. step = 1;
  131. this._percent = 100;
  132. } else {
  133. this._percent = step * 100;
  134. }
  135. if (this.accel && this.accel.getValue) {
  136. step = this.accel.getValue(step);
  137. }
  138. var e = new dojo.animation.AnimationEvent(this, "animate", this.curve.getValue(step), this._startTime, curr, this._endTime, this.duration, this._percent, Math.round(fps));
  139. if (typeof this.handler == "function") {
  140. this.handler(e);
  141. }
  142. if (typeof this.onAnimate == "function") {
  143. this.onAnimate(e);
  144. }
  145. if (step < 1) {
  146. this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);
  147. } else {
  148. e.type = "end";
  149. this._active = false;
  150. if (typeof this.handler == "function") {
  151. this.handler(e);
  152. }
  153. if (typeof this.onEnd == "function") {
  154. this.onEnd(e);
  155. }
  156. if (this.repeatCount > 0) {
  157. this.repeatCount--;
  158. this.play(true);
  159. } else {
  160. if (this.repeatCount == -1) {
  161. this.play(true);
  162. } else {
  163. if (this._startRepeatCount) {
  164. this.repeatCount = this._startRepeatCount;
  165. this._startRepeatCount = 0;
  166. }
  167. if (this._animSequence) {
  168. this._animSequence._playNext();
  169. }
  170. }
  171. }
  172. }
  173. }
  174. }});