Created
May 15, 2009 15:45
-
-
Save alx/112260 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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: | |
<ul id="news"> | |
<li><a href="http://www.makemineatriple.com">MakeMineATriple.com</a></li> | |
<li><a href="http://www.jquery.com">jQuery</a></li> | |
</ul> | |
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('<li><a href="'+ settings.newsLinks[currentItem] +'"></a></li>'); | |
} | |
else { | |
$(settings.newsList).empty().append('<li></li>'); | |
} | |
} | |
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 ++; | |
var storedTimeoutID= $('span#newsticker-timeout').attr('timeoutID-1'); | |
clearTimeout(storedTimeoutID); | |
storedTimeoutID = setTimeout(function(){runTicker(settings); settings = null;},settings.tickerRate); | |
$('span#newsticker-timeout').attr('timeoutID-1',storedTimeoutID); | |
} | |
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 ++; | |
var storedTimeoutID= $('span#newsticker-timeout').attr('timeoutID-2'); | |
clearTimeout(storedTimeoutID); | |
storedTimeoutID = setTimeout(function(){runTicker(settings); settings = null;},settings.loopDelay); | |
$('span#newsticker-timeout').attr('timeoutID-2',storedTimeoutID); | |
} | |
} | |
$.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; | |
$('body').append("<span id='newsticker-timeout' style='display:none;'/>") | |
$(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 | |
}); | |
var storedTimeoutID= $('span#newsticker-timeout').attr('timeoutID-0'); | |
clearTimeout(storedTimeoutID); | |
storedTimeoutID = setTimeout(function(){runTicker(settings); settings = null;},settings.startDelay); | |
$('span#newsticker-timeout').attr('timeoutID-0',storedTimeoutID); | |
} | |
}); | |
})(jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment