Fade Anything Technique

From OzmoWiki

The Fade Anything Technique (FAT) is more appropriately known as the Yellow Fade Technique (YFT). When called, the element is given a bright yellow background and according to the settings will mathematically fade it down to the original background color. This has been seen in many popular web applications such as Google Reader and WordPress.

Contents

Usage

There are two ways to use the Fade Anything Technique, either on the page load (i.e. messages), or event-based (i.e. ajax-y elements which have changed). Naturally, you'd have include the code either in the HTML file itself or reference it within a javascript file. The referenced element must have an ID and support the background-color property.

OnLoad

If you'd like to have an element fade on page load, just add fade to the class.

<div id="message1" class="fade">Options saved</div>

OnEvent

The other option is to have an item fade after an event. The following code sets the element to fade after 3 seconds. All you have to do is call the fade_element function with

<div id="message2" class="">Options saved</div>
<script>
function blah()
{
	Fat.fade_element("message2", 100, 1000, "#FFFF33", "#FFFFFF");
}
setTimeout('blah()', 3000);
</script>

Source

Functions

fade_all()

fade_all();

Fades all elements that have a class of fade.

fade_element()

fade_element(id, fps, duration, from, to);

Fades a single element id with your optional customization.

  • id ~ ID of element you wish to fade
  • fps ~ Frames per second to fade from one color to the next interval
  • duration ~ Total time it takes to fade from start to finish
  • from ~ Color to start
  • to ~ Color to finish

Code

// @name      The Fade Anything Technique
// @namespace http://www.axentric.com/aside/fat/
// @version   1.0-RC1
// @author    Adam Michela

var Fat = {
	make_hex : function (r,g,b) 
	{
		r = r.toString(16); if (r.length == 1) r = '0' + r;
		g = g.toString(16); if (g.length == 1) g = '0' + g;
		b = b.toString(16); if (b.length == 1) b = '0' + b;
		return "#" + r + g + b;
	},
	fade_all : function (dur)
	{
		var a = document.getElementsByTagName("*");
		for (var i = 0; i < a.length; i++) 
		{
			var o = a[i];
			var r = /fade-?(\w{3,6})?/.exec(o.className);
			if (r)
			{
				if (!r[1]) r[1] = "";
				if (o.id) Fat.fade_element(o.id,null,dur,"#"+r[1]);
			}
		}
	},
	fade_element : function (id, fps, duration, from, to) 
	{
		if (!fps) fps = 100;                            // How quickly to move to next color.
		if (!duration) duration = 2000;                 // Time from start to finish.
		if (!from || from=="#") from = "#FFFF33";       // Start from Bright Yellow.
		if (!to) to = this.get_bgcolor(id);

		var frames = Math.round(fps * (duration / 1000));
		var interval = duration / frames;
		var delay = interval;
		var frame = 0;

		if (from.length < 7) from += from.substr(1,3);
		if (to.length < 7) to += to.substr(1,3);

		var rf = parseInt(from.substr(1,2),16);
		var gf = parseInt(from.substr(3,2),16);
		var bf = parseInt(from.substr(5,2),16);
		var rt = parseInt(to.substr(1,2),16);
		var gt = parseInt(to.substr(3,2),16);
		var bt = parseInt(to.substr(5,2),16);

		var r,g,b,h;
		while (frame < frames)
		{
			r = Math.floor(rf * ((frames-frame)/frames) + rt * (frame/frames));
			g = Math.floor(gf * ((frames-frame)/frames) + gt * (frame/frames));
			b = Math.floor(bf * ((frames-frame)/frames) + bt * (frame/frames));
			h = this.make_hex(r,g,b);

			setTimeout("Fat.set_bgcolor('"+id+"','"+h+"')", delay);

			frame++;
			delay = interval * frame; 
		}
		setTimeout("Fat.set_bgcolor('"+id+"','"+to+"')", delay);
	},
	set_bgcolor : function (id, c)
	{
		var o = document.getElementById(id);
		o.style.backgroundColor = c;
	},
	get_bgcolor : function (id)
	{
		var o = document.getElementById(id);
		while(o)
		{
			var c;
			if (window.getComputedStyle) c = window.getComputedStyle(o,null).getPropertyValue("background-color");
			if (o.currentStyle) c = o.currentStyle.backgroundColor;
			if ((c != "" && c != "transparent") || o.tagName == "BODY") { break; }
 			o = o.parentNode;
		}
		if (c == undefined || c == "" || c == "transparent") c = "#FFFFFF";
		var rgb = c.match(/rgb\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)/);
		if (rgb) c = this.make_hex(parseInt(rgb[1]),parseInt(rgb[2]),parseInt(rgb[3]));
		return c;
	}
}

addLoadEvent(function ()  {
	Fat.fade_all();
});

// Safe OnLoad Function for Multiple Events
// http://simonwillison.net/2004/May/26/addLoadEvent/
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

5 Rating: 1.7/5 (7 votes cast)

Categories