(function($j){ $j.fn.vTicker = function(options) { var defaults = { speed: 700, pause: 4000, showItems: 3, animation: '', mousePause: true, isPaused: false, direction: 'up', height: 0 }; var options = $j.extend(defaults, options); moveUp = function(obj2, height, options){ if(options.isPaused) return; var obj = obj2.children('ul'); var clone = obj.children('li:first').clone(true); if(options.height > 0) { height = obj.children('li:first').height(); } obj.animate({top: '-=' + height + 'px'}, options.speed, function() { $j(this).children('li:first').remove(); $j(this).css('top', '0px'); }); if(options.animation == 'fade') { obj.children('li:first').fadeOut(options.speed); if(options.height == 0) { obj.children('li:eq(' + options.showItems + ')').hide().fadeIn(options.speed).show(); } } clone.appendTo(obj); }; moveDown = function(obj2, height, options){ if(options.isPaused) return; var obj = obj2.children('ul'); var clone = obj.children('li:last').clone(true); if(options.height > 0) { height = obj.children('li:first').height(); } obj.css('top', '-' + height + 'px') .prepend(clone); obj.animate({top: 0}, options.speed, function() { $j(this).children('li:last').remove(); }); if(options.animation == 'fade') { if(options.height == 0) { obj.children('li:eq(' + options.showItems + ')').fadeOut(options.speed); } obj.children('li:first').hide().fadeIn(options.speed).show(); } }; return this.each(function() { var obj = $j(this); var maxHeight = 0; obj.css({overflow: 'hidden', position: 'relative'}) .children('ul').css({position: 'absolute'}) if(options.height == 0) { obj.children('ul').children('li').each(function(){ if($j(this).height() > maxHeight) { maxHeight = $j(this).height(); } }); obj.children('ul').children('li').each(function(){ $j(this).height(maxHeight); }); obj.height(maxHeight * options.showItems); } else { obj.height(options.height); } var interval = setInterval(function(){ if(options.direction == 'up') { moveUp(obj, maxHeight, options); } else { moveDown(obj, maxHeight, options); } }, options.pause); if(options.mousePause) { obj.bind("mouseenter",function(){ options.isPaused = true; }).bind("mouseleave",function(){ options.isPaused = false; }); } }); }; })(jQuery);