/* * * Copyright (c) 2006/2007 Sam Collett (http://www.texotela.co.uk) * Licensed under the MIT License: * http://www.opensource.org/licenses/mit-license.php * * Version 2.0 * Demo: http://www.texotela.co.uk/code/jquery/newsticker/ * * $LastChangedDate$ * $Rev$ * */ (function($) { /* * A basic news ticker. * * @name newsticker (or newsTicker) * @param delay Delay (in milliseconds) between iterations. Default 4 seconds (4000ms) * @author Sam Collett (http://www.texotela.co.uk) * @example $("#news").newsticker(); // or $("#news").newsTicker(5000); * */ $.fn.newsTicker = $.fn.newsticker = function(delay) { delay = delay || 4000; initTicker = function(el) { stopTicker(el); el.items = $("li", el); // hide all items (except first one) el.items.not(":eq(0)").hide().end(); // current item el.currentitem = 0; startTicker(el); }; startTicker = function(el) { el.tickfn = setInterval(function() { doTick(el) }, delay) }; stopTicker = function(el) { clearInterval(el.tickfn); }; pauseTicker = function(el) { el.pause = true; }; resumeTicker = function(el) { el.pause = false; }; doTick = function(el) { // don't run if paused if(el.pause) return; // pause until animation has finished el.pause = true; // hide current item $(el.items[el.currentitem]).fadeOut("slow", function() { $(this).hide(); // move to next item and show el.currentitem = ++el.currentitem % (el.items.size()); $(el.items[el.currentitem]).fadeIn("slow", function() { el.pause = false; } ); } ); }; this.each( function() { if(this.nodeName.toLowerCase()!= "ul") return; initTicker(this); } ) .addClass("newsticker") .hover( function() { // pause if hovered over pauseTicker(this); }, function() { // resume when not hovered over resumeTicker(this); } ); return this; }; })(jQuery);