MooTools Gone Wild: Element Flashing

Written by David Walsh on June 10, 2008 · 21 Comments

If you're like me and lay awake in bed at night, you've flipped on the TV and seen the commercials: misguided, attention-starved college girls fueled by alcohol ruining their futures by flashing lame camera-men on Spring Break. Why do they do it? Attention, of course. That got me to thinking -- I should go download some what about when we want a user's attention to focus on a specific element on the page without using cheesy graphics? Armed with the latest MooTools trunk and a dream, I've implemented flash(), which you can use on any element on the page.

The XHTML

<div id="flash-me">
	<a href="javascript:;" id="flash-link">Click here</a> to make me flash!
</div>

The above is just some sample XHTML -- you can make your XHTML code look however you want.

The MooTools JavaScript

Element.implement({
	flash: function(to,from,reps,prop,dur) {
		
		//defaults
		if(!reps) { reps = 1; }
		if(!prop) { prop = 'background-color'; }
		if(!dur) { dur = 250; }
		
		//create effect
		var effect = new Fx.Tween(this, {
				duration: dur,
				link: 'chain'
			})
		
		//do it!
		for(x = 1; x <= reps; x++)
		{
			effect.start(prop,from,to).start(prop,to,from);
		}
	}
});

You feed the flash function 2-5 parameters:

  • From: The color you want the element to flash to first.
  • To: The color you want the element to flash to next.
  • Reps: Number of times to repeat the flash.
  • Property: Property to flash. Background color works best.
  • Duration: The duration of the color change

Slick and simple!

The Usage

/* flash on click */
$('flash-link').addEvent('click', function () {
	$('flash-me').flash('#fff','#fffea1',5,'background-color',500);
});

/* flash on ajax complete */
$('flash-link-ajax').addEvent('click', function () {
	//make the ajax call
	var req = new Request({
		method: 'get',
		url: 'element-flashing.php',
		data: { 'do' : '1' },
		onRequest: function() {  },
		onComplete: function(response) {
			$('flash-me-ajax').set('text',response).flash('#fff','#fffea1',5,'background-color',500); 
		}
	}).send();
	
});

/* flash on scroll completion */
$('flash-link-scroll').addEvent('click', function() {
	var scroller = new Fx.Scroll(window, {
		onComplete: function() {
			$('scroll-to-me').flash('#fff','#fffea1',10);
		}
	}).toElement('scroll-to-me');
});

There are three examples above. The first makes an element flash right when it's clicked. The second flashes when an AJAX request is complete. The third scrolls down to an element on the page and flashes upon arrival.

Comments

  1. Please stop. Forget the ability to do this and move along. We don’t need flashing… we finally got rid of flashing text in mark-up! :)

  2. Element::highlight from 1.2?

    $(‘someElement’).highlight();

    Very similar thing..

  3. @Marc: Close, but not the same thing.

  4. I think the flashing going on here is still easy on the eyes, I wouldn’t mind this.

    Checkout http://www.mootools.net 1.2 got out of beta, oh yeah!

  5. Thanks for the great tutorial! I’m currently developing a new site and I opted for MooTools over jQuery and I have to admit, I was beginning to regret it. It seemed like there was so much more documentation for it than MooTools. Every day I was seeing 2 or 3 new tutorials for jQuery and none for Moo.

    You’re making things much easier than me, thanks! Keep up the great work!

  6. @Randy: Just like Journey said, “Don’t Stop Believin’”! jQuery has been adopted by the Designer community, which is fine. I’m a developer so I love the MooTools syntax and simplicity. I’m fighting for the Moo!

  7. Might want to add a few flags to the flash to denote whether the element is flashing already or not, so that when it gets re-activated (eg: clicking the “click me” on the sample page several times very quickly) the element doesn’t go into some kind of epileptic fit.

  8. @Chris: Not a bad idea Chris.

  9. you might consider writing this as a class that an element can implement rather than just an implement, will be quite a bit more flexible that way.

  10. MrKistic July 10, 2008

    Pretty good but I have one issue with it: Rod was the best rocker, but only between ’69 & ’74 ;)

  11. Great! Although…
    I already packaged it into a class – which is sadly not yet MooTools 1.2 based but you can check it out here: MooTools Pulsate class.

    Interested in a 1.2 version? :)

  12. Doesn’t work in mootools 1.1.

    Yeh, I now see most of your articles are written for 1.2, but it took me a good 15 mins before I worked out this wasn’t compatible for 1.1 – might be worth stating “for 1.2″ somewhere or in the title?

    Good tutorial, though.

  13. Hey man, just found your blog, fellow Mootools developer here (among other things). Some great inspiration on your site, I will be coming back here. I implemented your tutorial and I’m using a similar method minus one parameter. Basically I do getStyle(‘background-color’) and just flash to that, so you don’t have to know the item’s original background color to flash it.

  14. If I’m not mistaken, the code above will cause some sort of memory leak? Because every time you click on the link, a new Fx.Tween object is created.

  15. Is there a way that i could remove the effect while its still flashing ? What would i have to add to the code so that i could disable the effect whenever i wanted? Im new to mootools but am already loving it , so please help :)

  16. Any idea how to add eg border-color to flash as well…

  17. kkrishieee October 9, 2009

    Hi david,
    As im new to Mootools, the above example is very useful for me.flashing the background. I have implemented the same thing in my project. The problem im facing is how to stop that flashing.
    For Example:
    1) One side of the page flashes for 5 seconds.
    2) After 5 seconds the other side page has to flash for 5seconds.
    3) vice-versa.

  18. kkrishieee October 9, 2009

    Hi david,
    As im new to Mootools, the above example is very useful for me.flashing the background. I have implemented the same thing in my project. The problem im facing is how to stop that flashing.
    For Example:
    1) One side of the page flashes for 5 seconds.
    2) After 5 seconds the other side page has to flash for 5seconds.
    3) vice-versa.

    Im picking my hair since long time.please can you help me out.
    Thanks in advance.

  19. very interesting blog

  20. Jens Lehmann July 14, 2011

    Sehr interessantes thema! besucht meine webseite http://www.ruralfinca.net

Be Heard

Tip: Wrap your code in <pre> tags or link to a GitHub Gist!

Use Code Editor
Older
PHP and Echo
Newer
How I Format My CSS Files