|
Struts example source code file (Animation.js)
The Struts Animation.js source code/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml */ dojo.provide("dojo.lfx.Animation"); dojo.require("dojo.lang.func"); dojo.lfx.Line = function (start, end) { this.start = start; this.end = end; if (dojo.lang.isArray(start)) { var diff = []; dojo.lang.forEach(this.start, function (s, i) { diff[i] = this.end[i] - s; }, this); this.getValue = function (n) { var res = []; dojo.lang.forEach(this.start, function (s, i) { res[i] = (diff[i] * n) + s; }, this); return res; }; } else { var diff = end - start; this.getValue = function (n) { return (diff * n) + this.start; }; } }; if ((dojo.render.html.khtml) && (!dojo.render.html.safari)) { dojo.lfx.easeDefault = function (n) { return (parseFloat("0.5") + ((Math.sin((n + parseFloat("1.5")) * Math.PI)) / 2)); }; } else { dojo.lfx.easeDefault = function (n) { return (0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2)); }; } dojo.lfx.easeIn = function (n) { return Math.pow(n, 3); }; dojo.lfx.easeOut = function (n) { return (1 - Math.pow(1 - n, 3)); }; dojo.lfx.easeInOut = function (n) { return ((3 * Math.pow(n, 2)) - (2 * Math.pow(n, 3))); }; dojo.lfx.IAnimation = function () { }; dojo.lang.extend(dojo.lfx.IAnimation, {curve:null, duration:1000, easing:null, repeatCount:0, rate:10, handler:null, beforeBegin:null, onBegin:null, onAnimate:null, onEnd:null, onPlay:null, onPause:null, onStop:null, play:null, pause:null, stop:null, connect:function (evt, scope, newFunc) { if (!newFunc) { newFunc = scope; scope = this; } newFunc = dojo.lang.hitch(scope, newFunc); var oldFunc = this[evt] || function () { }; this[evt] = function () { var ret = oldFunc.apply(this, arguments); newFunc.apply(this, arguments); return ret; }; return this; }, fire:function (evt, args) { if (this[evt]) { this[evt].apply(this, (args || [])); } return this; }, repeat:function (count) { this.repeatCount = count; return this; }, _active:false, _paused:false}); dojo.lfx.Animation = function (handlers, duration, curve, easing, repeatCount, rate) { dojo.lfx.IAnimation.call(this); if (dojo.lang.isNumber(handlers) || (!handlers && duration.getValue)) { rate = repeatCount; repeatCount = easing; easing = curve; curve = duration; duration = handlers; handlers = null; } else { if (handlers.getValue || dojo.lang.isArray(handlers)) { rate = easing; repeatCount = curve; easing = duration; curve = handlers; duration = null; handlers = null; } } if (dojo.lang.isArray(curve)) { this.curve = new dojo.lfx.Line(curve[0], curve[1]); } else { this.curve = curve; } if (duration != null && duration > 0) { this.duration = duration; } if (repeatCount) { this.repeatCount = repeatCount; } if (rate) { this.rate = rate; } if (handlers) { dojo.lang.forEach(["handler", "beforeBegin", "onBegin", "onEnd", "onPlay", "onStop", "onAnimate"], function (item) { if (handlers[item]) { this.connect(item, handlers[item]); } }, this); } if (easing && dojo.lang.isFunction(easing)) { this.easing = easing; } }; dojo.inherits(dojo.lfx.Animation, dojo.lfx.IAnimation); dojo.lang.extend(dojo.lfx.Animation, {_startTime:null, _endTime:null, _timer:null, _percent:0, _startRepeatCount:0, play:function (delay, gotoStart) { if (gotoStart) { clearTimeout(this._timer); this._active = false; this._paused = false; this._percent = 0; } else { if (this._active && !this._paused) { return this; } } this.fire("handler", ["beforeBegin"]); this.fire("beforeBegin"); if (delay > 0) { setTimeout(dojo.lang.hitch(this, function () { this.play(null, gotoStart); }), delay); return this; } this._startTime = new Date().valueOf(); if (this._paused) { this._startTime -= (this.duration * this._percent / 100); } this._endTime = this._startTime + this.duration; this._active = true; this._paused = false; var step = this._percent / 100; var value = this.curve.getValue(step); if (this._percent == 0) { if (!this._startRepeatCount) { this._startRepeatCount = this.repeatCount; } this.fire("handler", ["begin", value]); this.fire("onBegin", [value]); } this.fire("handler", ["play", value]); this.fire("onPlay", [value]); this._cycle(); return this; }, pause:function () { clearTimeout(this._timer); if (!this._active) { return this; } this._paused = true; var value = this.curve.getValue(this._percent / 100); this.fire("handler", ["pause", value]); this.fire("onPause", [value]); return this; }, gotoPercent:function (pct, andPlay) { clearTimeout(this._timer); this._active = true; this._paused = true; this._percent = pct; if (andPlay) { this.play(); } return this; }, stop:function (gotoEnd) { clearTimeout(this._timer); var step = this._percent / 100; if (gotoEnd) { step = 1; } var value = this.curve.getValue(step); this.fire("handler", ["stop", value]); this.fire("onStop", [value]); this._active = false; this._paused = false; return this; }, status:function () { if (this._active) { return this._paused ? "paused" : "playing"; } else { return "stopped"; } return this; }, _cycle:function () { clearTimeout(this._timer); if (this._active) { var curr = new Date().valueOf(); var step = (curr - this._startTime) / (this._endTime - this._startTime); if (step >= 1) { step = 1; this._percent = 100; } else { this._percent = step * 100; } if ((this.easing) && (dojo.lang.isFunction(this.easing))) { step = this.easing(step); } var value = this.curve.getValue(step); this.fire("handler", ["animate", value]); this.fire("onAnimate", [value]); if (step < 1) { this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate); } else { this._active = false; this.fire("handler", ["end"]); this.fire("onEnd"); if (this.repeatCount > 0) { this.repeatCount--; this.play(null, true); } else { if (this.repeatCount == -1) { this.play(null, true); } else { if (this._startRepeatCount) { this.repeatCount = this._startRepeatCount; this._startRepeatCount = 0; } } } } } return this; }}); dojo.lfx.Combine = function (animations) { dojo.lfx.IAnimation.call(this); this._anims = []; this._animsEnded = 0; var anims = arguments; if (anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))) { anims = anims[0]; } dojo.lang.forEach(anims, function (anim) { this._anims.push(anim); anim.connect("onEnd", dojo.lang.hitch(this, "_onAnimsEnded")); }, this); }; dojo.inherits(dojo.lfx.Combine, dojo.lfx.IAnimation); dojo.lang.extend(dojo.lfx.Combine, {_animsEnded:0, play:function (delay, gotoStart) { if (!this._anims.length) { return this; } this.fire("beforeBegin"); if (delay > 0) { setTimeout(dojo.lang.hitch(this, function () { this.play(null, gotoStart); }), delay); return this; } if (gotoStart || this._anims[0].percent == 0) { this.fire("onBegin"); } this.fire("onPlay"); this._animsCall("play", null, gotoStart); return this; }, pause:function () { this.fire("onPause"); this._animsCall("pause"); return this; }, stop:function (gotoEnd) { this.fire("onStop"); this._animsCall("stop", gotoEnd); return this; }, _onAnimsEnded:function () { this._animsEnded++; if (this._animsEnded >= this._anims.length) { this.fire("onEnd"); } return this; }, _animsCall:function (funcName) { var args = []; if (arguments.length > 1) { for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } } var _this = this; dojo.lang.forEach(this._anims, function (anim) { anim[funcName](args); }, _this); return this; }}); dojo.lfx.Chain = function (animations) { dojo.lfx.IAnimation.call(this); this._anims = []; this._currAnim = -1; var anims = arguments; if (anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))) { anims = anims[0]; } var _this = this; dojo.lang.forEach(anims, function (anim, i, anims_arr) { this._anims.push(anim); if (i < anims_arr.length - 1) { anim.connect("onEnd", dojo.lang.hitch(this, "_playNext")); } else { anim.connect("onEnd", dojo.lang.hitch(this, function () { this.fire("onEnd"); })); } }, this); }; dojo.inherits(dojo.lfx.Chain, dojo.lfx.IAnimation); dojo.lang.extend(dojo.lfx.Chain, {_currAnim:-1, play:function (delay, gotoStart) { if (!this._anims.length) { return this; } if (gotoStart || !this._anims[this._currAnim]) { this._currAnim = 0; } var currentAnimation = this._anims[this._currAnim]; this.fire("beforeBegin"); if (delay > 0) { setTimeout(dojo.lang.hitch(this, function () { this.play(null, gotoStart); }), delay); return this; } if (currentAnimation) { if (this._currAnim == 0) { this.fire("handler", ["begin", this._currAnim]); this.fire("onBegin", [this._currAnim]); } this.fire("onPlay", [this._currAnim]); currentAnimation.play(null, gotoStart); } return this; }, pause:function () { if (this._anims[this._currAnim]) { this._anims[this._currAnim].pause(); this.fire("onPause", [this._currAnim]); } return this; }, playPause:function () { if (this._anims.length == 0) { return this; } if (this._currAnim == -1) { this._currAnim = 0; } var currAnim = this._anims[this._currAnim]; if (currAnim) { if (!currAnim._active || currAnim._paused) { this.play(); } else { this.pause(); } } return this; }, stop:function () { var currAnim = this._anims[this._currAnim]; if (currAnim) { currAnim.stop(); this.fire("onStop", [this._currAnim]); } return currAnim; }, _playNext:function () { if (this._currAnim == -1 || this._anims.length == 0) { return this; } this._currAnim++; if (this._anims[this._currAnim]) { this._anims[this._currAnim].play(null, true); } return this; }}); dojo.lfx.combine = function (animations) { var anims = arguments; if (dojo.lang.isArray(arguments[0])) { anims = arguments[0]; } if (anims.length == 1) { return anims[0]; } return new dojo.lfx.Combine(anims); }; dojo.lfx.chain = function (animations) { var anims = arguments; if (dojo.lang.isArray(arguments[0])) { anims = arguments[0]; } if (anims.length == 1) { return anims[0]; } return new dojo.lfx.Chain(anims); }; Other Struts examples (source code examples)Here is a short list of links related to this Struts Animation.js source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.