// Usage: // var myTicker = new Ticker('idOfDivElement'); // or (with options) // var myTicker = new Ticker('idOfDivElement',{toggleButton:'idOfToggleDiv',interval:####}); // with #### as an integer > 2000 // // var Ticker = new Class({ // Define options options: { toggleButton: false, interval: 8000 }, initialize: function(containerId,options) { // Declare variables var Appear,myFade,myBlinder; // Set container div this.container = $(containerId); // Set options this.setOptions(options); this.interval = this.options.interval; this.toggleButton = $(this.options.toggleButton); this.messages = $(this.container).getElements('li'); this.number_of_messages = this.messages.length; if (this.number_of_messages == 0) { this.showError(); return false; } this.current_message = 0; this.previous_message = null; // Create toggle button when ID is supplied with options if (this.toggleButton != false) { this.toggle_button = new Element('a').setProperties({ 'href': '#', 'id': 'togglenewsticker' }).setHTML('').addEvent('click',this.toggleTicker.bind(this)); this.toggleButton.adopt(this.toggle_button); } // Display first message this.hideMessages(); this.showMessage(); // Install timer this.timer = this.showMessage.periodical(this.interval,this); }, showMessage: function() { Appear = new Fx.Style(this.messages[this.current_message],'opacity',{onStart:function(item) { item.setStyle('padding','0px 0px 0px 0px'); item.setStyle('display','block'); }}).start(0,1); this.fadeMessage.delay(this.interval-1000,this); if (this.current_message < this.number_of_messages-1) { this.previous_message = this.current_message++; } else { this.current_message = 0; this.previous_message = this.number_of_messages - 1; } }, fadeMessage: function() { myFade = new Fx.Style(this.messages[this.previous_message],'opacity',{onComplete:function(item) { item.setStyle('display','none'); }}).start(1,0); }, hideMessages: function() { this.messages.each(function(message) { message.setStyles({ 'display': 'none', 'opacity': 0 }); }) }, toggleTicker: function() { myBlinder = new Fx.Slide(this.container,{duration:400}); }, // Display error message when there is no list, or the list is empty showError: function() { if ($ES('ul',this.container).length == 0) { this.list = new Element('ul'); this.container.adopt(this.list); } else { this.list = $E('ul',this.container); } this.errorMessage = new Element('li',{ 'class': 'error' }).setHTML('Could not retrieve data'); this.list.adopt(this.errorMessage); } }); Ticker.implement(new Options);