/* News ticker plugin (BBC news style) Bryan Gullan,2007-2009 version 1.2.2 updated 2009-02-15 http://www.makemineatriple.com/jquery Use and distrubute freely with this header Options (defaults shown): newsList: "#news" // assumes unordered list; specify the ul holding the news items tickerRate: 80 // time gap between display of each letter (ms) startDelay: 100 // delay before first run of the ticker (ms) loopDelay: 3000 // time for which full text of each item is shown at end of print-out (ms) placeHolder1: " |" // character placeholder shown on even loops placeHolder2: "_" // character placeholder shown on odd loops Sample usage: $(document).ready(function() { var options = { newsList: "#news", startDelay: 10, placeHolder1: " []" } $().newsTicker(options); }); for markup as follows: Underline text decoration on the link is not recommended! :-) */ (function($) { function runTicker(settings) { if(settings.firstRun == 1){ currentLength = settings.currentLength; currentItem = settings.currentItem; settings.firstRun = 0; } if(currentItem == settings.newsItemCounter + 1){ currentItem = 0; } if(currentLength == 0) { if(settings.newsLinks[currentItem].length > 0) { $(settings.newsList).empty().append('
  • '); } else { $(settings.newsList).empty().append('
  • '); } } if( currentLength % 2 == 0) { placeHolder = settings.placeHolder1; } else { placeHolder = settings.placeHolder2; } if( currentLength <= settings.newsItems[currentItem].length + 1) { var tickerText = settings.newsItems[currentItem].substring(0,currentLength); if(settings.newsLinks[currentItem].length > 0) { $(settings.newsList + ' li a').text(tickerText + placeHolder); } else { $(settings.newsList + ' li').text(tickerText + placeHolder); } currentLength ++; setTimeout(function(){runTicker(settings); settings = null;},settings.tickerRate); } else { if(settings.newsLinks[currentItem].length > 0) { $(settings.newsList + ' li a').text(settings.newsItems[currentItem]); } else { $(settings.newsList + ' li').text(settings.newsItems[currentItem]); } currentLength = 0; currentItem ++; setTimeout(function(){runTicker(settings); settings = null;},settings.loopDelay); } } $.fn.extend({ newsTicker: function(settings) { settings = jQuery.extend({ newsList: "#news", tickerRate: 80, startDelay: 100, loopDelay: 3000, placeHolder1: " |", placeHolder2: "_" }, settings); var newsItems = new Array(); var newsLinks = new Array(); var newsItemCounter = 0; $(settings.newsList + ' li').hide(); $(settings.newsList + ' li').each(function(){ if($(this).children('a').length) { newsItems[newsItemCounter] = $(this).children('a').text(); newsLinks[newsItemCounter] = $(this).children('a').attr('href'); } else { newsItems[newsItemCounter] = $(this).text(); newsLinks[newsItemCounter] = ''; } newsItemCounter ++; }); settings = jQuery.extend(settings,{ newsItems: newsItems, newsLinks: newsLinks, newsItemCounter: newsItemCounter - 1, currentItem: 0, currentLength: 0, firstRun:1 }); setTimeout(function(){runTicker(settings); settings = null;},settings.startDelay); } }); })(jQuery);