News Ticker in 4 lines of jQuery

There are a lot of different jQuery News Ticker plugins with lot of options that you can use. Do you want to learn how to create one on your own in only 4 lines od jQuery code ?

new-ticker-in-4-lines

Idea is pretty simple, take first element from list, apply some disappearing effect on it and on callback attach it to the end of the list.

First we have to create HTML with list of our news, something like this:

	<ul id="ticker">
		<li>
			jqBarGraph is jQuery plugin that gives you freedom to easily display your data as graphs. There are three types of graphs: simple, multi and stacked.
		</li>
		<li>
			Learn how to create image gallery in 4 lines of Jquery
		</li>
		<li>
			jqFancyTransitions is easy-to-use jQuery plugin for displaying your photos as slideshow with fancy transition effects.
		</li>
		<li>
			mooBarGraph is AJAX graph plugin for MooTools which support two types of graphs, simple bar and stacked bar graph.
		</li>
	</ul>

Now, let’s put some style on this. We will set height of our visible ticker area and set overflow to hidden. If we want only one news to be visible at the time than ticker height should be the same as height of each element of the list. For more visible news at same time we just have to multiply height of each element with number of news that we want to be visible and set that as height of ticker.

#ticker {
	height: 40px;
	overflow: hidden;
}
#ticker li {
	height: 40px;
}

Of course, you can and should add more style here, but this will be enough to make your ticker to work.

Ok, we have layout set and now it’s time for make this news to start ticking. First we will create function which will apply disappearing effect on first element, append that element to the end of the list after it disappear and revert effects changes. After that, all we have to do is to call that function in desired intervals.

new-ticker-in-4-lines-exp

And here is plain code:

function tick(){
	$('#ticker li:first').slideUp( function () { $(this).appendTo($('#ticker')).slideDown(); });
}
setInterval(function(){ tick () }, 5000);

Of course, you can change slideUp with any other animation that you like, just don’t forget to revert effects on element after transition. Next example will set opacity to 0 for first element.

function tick(){
	$('#ticker li:first').animate({'opacity':0}, 200, function () { $(this).appendTo($('#ticker')).css('opacity', 1); });
}
setInterval(function(){ tick () }, 4000);

And please don’t forget to include jQuery at the head of your document

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>

That’s it, news ticker is done. Take a look at the demo, download source code or leave a comment.



Comments [ 23 Comments ]

  1. Gleenk
    October 21, 2011

    Really “compact” code, thank you ;)

  2. Michael Kropat
    November 11, 2011

    Very cool. I needed to be able to do just this and it’s great that I didn’t have to reinvent the wheel. One observation: you can make the code even more compact—instead of passing an anonymous function to setInterval, just pass the name of the function you want to call:

    setInterval(tick, 5000);

  3. Madhav Tripathi
    December 11, 2011

    It is really cool, I will try it on my blog. Actually I want to learn this all.

  4. ash
    January 5, 2012

    sorry guys am new to these languages​​, in which position should put the codes? I have tried it and it does not work .. thanks a lot for the answer

  5. Jenny
    February 8, 2012

    Hi – thanks for this. It looks and works beautifully in Chrome, but is choppy and annoying in IE. Any suggestions?

  6. Jenny
    February 8, 2012

    opps – I didn’t copy all the code. Now it looks great. Sorry! And Thanks again!

  7. Angel
    February 8, 2012

    Best code ever.

  8. Benj
    February 17, 2012

    exactly what i need !
    Thanks a lot

  9. kaviarasankk
    March 16, 2012

    Good yaar
    but if i m having some 5 news to scroll
    and i wanna show only 3 news and thr should be one button below “view all” onclicking it should show all the 5 news and it should toggle regardly can u

  10. Fabrizio
    March 20, 2012

    Thank you, your code it’s fantastic!

    Just a question…

    Is it possible to insert a link with a stop scroll?

    If yes, how to make it?

    Thank you in advance.
    Fabri

  11. phil
    March 24, 2012

    Really nice and short, the only thing missing is the pause on hover. May be you could suggest me a link to add that?

  12. phil
    March 24, 2012

    @kaviarasankk If you have five and you only want to show 3 and the ability to see all of them just put a link to “all news” with a webpage for that.

  13. phil
    March 24, 2012

    a “stop scroll link” is less intuitive than an hover stop (most commonly seen).

  14. Khaled
    March 25, 2012

    Thank you very much , Man , works fine with 3500 MSeconds :) .

  15. Rex
    March 26, 2012

    great one, I just found one more ticker which uses no jquery just CSS3

    Future of CSS3 is at our doors, why not use it?
    http://webstutorial.com/css3-news-ticker-css3-notification-bar-stackexchange/css3

  16. Kaan Karahan
    March 27, 2012

    Great code… Thanks alot.
    Twitter news does not show up in IE 9. Can anyone help me out?

  17. Abimbola
    April 10, 2012

    Good work! I put it to test and worked well. However, is there a way we can make it stop on mouseover.
    Thanks again

  18. Abimbola
    April 10, 2012

    After much fiddling, I came up with this:

    $(function(){
    // Source: http://workshop.rs/2011/09/news-ticker-in-4-lines-of-jquery/

    //First we will create function which will apply disappearing effect on first element, append that element to the end of the list after it disappear and revert effects changes. After that, all we have to do is to call that function in desired intervals.
    startTimer();
    $(’#ticker’).hover(function(){clearInterval(autoInterval);}, startTimer);
    });
    var startTimer = function(){
    autoInterval = setInterval(function(){tick()}, 3000);
    };
    var tick = function(){
    $(’#ticker li:first’).animate({’opacity’:0}, 200, function () { $(this).appendTo($(’#ticker’)).css(’opacity’, 1); });
    }

  19. Steve
    April 13, 2012

    The last hover example by @Abimbola did not work for me. Also, I want the scroller to continue on mouseleave. Try this instead with the slideup effect:

    $(’#ticker li’).mouseenter(function() {
    clearInterval(autoInterval, startTimer);
    }).mouseleave(function() {
    startTimer();
    });
    function startTimer(){
    autoInterval = setInterval(function(){tick()}, 4000);
    }
    function tick(){
    $(’#ticker li:first’).slideUp( function () {
    $(this).appendTo($(’#ticker’)).slideDown();
    });
    }
    startTimer();

  20. Frank
    April 17, 2012

    That one doesn’t work firebug says incorrect character at
    $(’#ticker li’).mouseenter(function() …..
    ^

    I’m a java beginner, so any help would be accounted to “helping a blind”.

    Frank


Leave a Reply



Trackbacks and pingbacks
click to expand

  1. Twitter…

    Loads of people are tweeting about this topic right now…