New file |
0,0 → 1,294 |
/** $Id: alphaAPI.js,v 1.1 2007-03-16 12:39:35 jp_milcent Exp $ */ |
// {{{ license |
|
/* |
* Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com) |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
|
// }}} |
// {{{ intro |
|
/** |
* Title: alphaAPI |
* Original Author: chrisken |
* Original Url: http://www.cs.utexas.edu/users/chrisken/alphaapi.html |
* |
* Modified by Dan Allen <dan.allen@mojavelinux.com> |
* Note: When the stopAlpha is reached and it is equal to 0, the element's |
* style is set to display: none to fix a bug in domTT |
*/ |
|
// }}} |
function alphaAPI(element, fadeInDelay, fadeOutDelay, startAlpha, stopAlpha, offsetTime, deltaAlpha) |
{ |
// {{{ properties |
|
this.element = typeof(element) == 'object' ? element : document.getElementById(element); |
this.fadeInDelay = fadeInDelay || 40; |
this.fadeOutDelay = fadeOutDelay || this.fadeInDelay; |
this.startAlpha = startAlpha; |
this.stopAlpha = stopAlpha; |
// make sure a filter exists so an error is not thrown |
if (typeof(this.element.filters) == 'object') |
{ |
if (typeof(this.element.filters.alpha) == 'undefined') |
{ |
this.element.style.filter += 'alpha(opacity=100)'; |
} |
} |
|
this.offsetTime = (offsetTime || 0) * 1000; |
this.deltaAlpha = deltaAlpha || 10; |
this.timer = null; |
this.paused = false; |
this.started = false; |
this.cycle = false; |
this.command = function() {}; |
return this; |
|
// }}} |
} |
|
// use prototype methods to save memory |
// {{{ repeat() |
|
alphaAPI.prototype.repeat = function(repeat) |
{ |
this.cycle = repeat ? true : false; |
} |
|
// }}} |
// {{{ setAlphaBy() |
|
alphaAPI.prototype.setAlphaBy = function(deltaAlpha) |
{ |
this.setAlpha(this.getAlpha() + deltaAlpha); |
} |
|
// }}} |
// {{{ toggle() |
|
alphaAPI.prototype.toggle = function() |
{ |
if (!this.started) |
{ |
this.start(); |
} |
else if (this.paused) |
{ |
this.unpause(); |
} |
else |
{ |
this.pause(); |
} |
} |
|
// }}} |
// {{{ timeout() |
|
alphaAPI.prototype.timeout = function(command, delay) |
{ |
this.command = command; |
this.timer = setTimeout(command, delay); |
} |
|
// }}} |
// {{{ setAlpha() |
|
alphaAPI.prototype.setAlpha = function(opacity) |
{ |
if (typeof(this.element.filters) == 'object') |
{ |
this.element.filters.alpha.opacity = opacity; |
} |
else if (this.element.style.setProperty) |
{ |
this.element.style.setProperty('opacity', opacity / 100, ''); |
// handle the case of mozilla < 1.7 |
this.element.style.setProperty('-moz-opacity', opacity / 100, ''); |
// handle the case of old kthml |
this.element.style.setProperty('-khtml-opacity', opacity / 100, ''); |
} |
} |
|
// }}} |
// {{{ getAlpha() |
|
alphaAPI.prototype.getAlpha = function() |
{ |
if (typeof(this.element.filters) == 'object') |
{ |
return this.element.filters.alpha.opacity; |
} |
else if (this.element.style.getPropertyValue) |
{ |
var opacityValue = this.element.style.getPropertyValue('opacity'); |
// handle the case of mozilla < 1.7 |
if (opacityValue == '') |
{ |
opacityValue = this.element.style.getPropertyValue('-moz-opacity'); |
} |
|
// handle the case of old khtml |
if (opacityValue == '') |
{ |
opacityValue = this.element.style.getPropertyValue('-khtml-opacity'); |
} |
|
return opacityValue * 100; |
} |
|
return 100; |
} |
|
// }}} |
// {{{ start() |
|
alphaAPI.prototype.start = function() |
{ |
this.started = true; |
this.setAlpha(this.startAlpha); |
// determine direction |
if (this.startAlpha > this.stopAlpha) |
{ |
var instance = this; |
this.timeout(function() { instance.fadeOut(); }, this.offsetTime); |
} |
else |
{ |
var instance = this; |
this.timeout(function() { instance.fadeIn(); }, this.offsetTime); |
} |
} |
|
// }}} |
// {{{ stop() |
|
alphaAPI.prototype.stop = function() |
{ |
this.started = false; |
this.setAlpha(this.stopAlpha); |
if (this.stopAlpha == 0) |
{ |
this.element.style.display = 'none'; |
} |
|
this.stopTimer(); |
this.command = function() {}; |
} |
|
// }}} |
// {{{ reset() |
|
alphaAPI.prototype.reset = function() |
{ |
this.started = false; |
this.setAlpha(this.startAlpha); |
this.stopTimer(); |
this.command = function() {}; |
} |
|
// }}} |
// {{{ pause() |
|
alphaAPI.prototype.pause = function() |
{ |
this.paused = true; |
this.stopTimer(); |
} |
|
// }}} |
// {{{ unpause() |
|
alphaAPI.prototype.unpause = function() |
{ |
this.paused = false; |
if (!this.started) |
{ |
this.start(); |
} |
else |
{ |
this.command(); |
} |
} |
|
// }}} |
// {{{ stopTimer() |
|
alphaAPI.prototype.stopTimer = function() |
{ |
clearTimeout(this.timer); |
this.timer = null; |
} |
|
// }}} |
// {{{ fadeOut() |
|
alphaAPI.prototype.fadeOut = function() |
{ |
this.stopTimer(); |
if (this.getAlpha() > this.stopAlpha) |
{ |
this.setAlphaBy(-1 * this.deltaAlpha); |
var instance = this; |
this.timeout(function() { instance.fadeOut(); }, this.fadeOutDelay); |
} |
else |
{ |
if (this.cycle) |
{ |
var instance = this; |
this.timeout(function() { instance.fadeIn(); }, this.fadeInDelay); |
} |
else |
{ |
if (this.stopAlpha == 0) |
{ |
this.element.style.display = 'none'; |
} |
this.started = false; |
} |
} |
} |
|
// }}} |
// {{{ fadeIn() |
|
alphaAPI.prototype.fadeIn = function() |
{ |
this.stopTimer(); |
if (this.getAlpha() < this.startAlpha) |
{ |
this.setAlphaBy(this.deltaAlpha); |
var instance = this; |
this.timeout(function() { instance.fadeIn(); }, this.fadeInDelay); |
} |
else |
{ |
if (this.cycle) |
{ |
var instance = this; |
this.timeout(function() { instance.fadeOut(); }, this.fadeOutDelay); |
} |
else |
{ |
this.started = false; |
} |
} |
} |
|
// }}} |