Create a Custom Content Slider with jQuery

Create a Custom Content Slider with jQuery


Create a Custom Content Slider with jQuery

Introduction

I'm writing this tutorial in an Airport, heading back to my home country for a short holiday. It was a long day and had a farewell lunch with my fellow colleague. He got a better job offer, resigned and moved on. Well, that's life, had a great time working with him accross different projects, no doubt about it, I learnt heaps of stuff from him. I'm pretty sure I'll miss his daily quotes, jokes and whinging.

Alright, let's get into the tutorial

This time, we are going to make a custom content slider. I implemented this in my recent project and I'm pretty happy about it. My colleague spiced it up a little bit with some nice buttons. The way it works is quite simple, we will have a UL list with 3 buttons and each of the button has a link with a reference to the right panel. How it scroll to the correct panel? It uses jQuery scroll-To plugin. Basically you just have to pass the ID of the panel to the scroll-To plugin, and it will sroll the content to the correct position.

For more information about the plugin, please visit the scrollTo plugin website

Custom Content Slider

1. HTML

HTML is a little bit long this time. Basically, it has two sections:

  • UL List: This is the list of buttons, you can add as many as you want, or style the layout the way you want.
  • Slider: Slider is where we put all the content for the panels, in this case, we have 3 panels with unique ID panel-1, panel-2 and panel-3. We hide the panel with overflow hidden set in the Mask Div.
<div id="hero-slider">
	<ul>
		<li><a href="#" rel="#panel-1" class="active">Item 1</a></li>
		<li><a href="#" rel="#panel-2">Item 2</a></li>
		<li><a href="#" rel="#panel-3">Item 3</a></li>
	</ul>
	<div class="mask">
		<div class="slider-body">
			<div class="panel" id="panel-1">
				<h2>Title 1</h2>
				<p>Paragraph</p>
			</div>
			<div class="panel" id="panel-2">
				<h2>Title 2</h2>
				<p>Paragraph</p>
			</div>
			<div class="panel" id="panel-3">
				<h2>Title 3</h2>
				<p>Paragraph</p>
			</div>
		</div>
	</div> <!-- .mask -->
	<div class="clear"></div>
</div> <!-- #hero-slider -->

2. CSS

The only tricky part of the CSS would be the mask. You have to make sure it has overflow set to hidden to hide panels. Also, the dimension of the panel and mask must be the same.

#hero-slider {
	text-align:left; 
	background-color:#efefef; 
	border:1px solid #ccc; width:450px;
	-moz-border-radius:10px;
	-webkit-border-radius:10px;
	margin:0 auto;
	font-family:arial;
}

#hero-slider .mask { 
	float:left; 
	width:300px; 
	height:280px; 
	margin:15px 0 0 10px; 
	overflow:hidden;
}

#hero-slider .panel { 
	width:300px; 
	height:280px; 
	text-align:left;
}

#hero-slider ul {
	margin:0; 
	padding:15px 15px 0 15px; 
	list-style:none; 
	float:left; 
	border-right:1px solid #dedede; 
	height:285px;
}

#hero-slider ul li {
	margin:10px 0;
}

#hero-slider ul a {
	outline:none; 
	text-decoration: underline;
	display:block;
	width:75px; 
	height:74px; 
	text-indent:-999em;	
}

#hero-slider a {
	background: url(button.png) no-repeat 0 0;
}

#hero-slider ul a.active {
	background-position: -75px;
}

.panel h2 {
	padding:15px 0 0 0;
	color:#0058a9;
}

.panel p {
	color:#666;
}

.clear {clear:both}

3. Javascript

Javascript is short and simple, I have added comments to explain every line of the javascript

//append click event to the UL list anchor tag
$('#hero-slider ul a').click(function () {
	
	//reset all the items
	$('#hero-slider ul a').removeClass('active');
		
	//set current item as active
	$(this).addClass('active');	
		
	//scroll it to the right position
	$('.mask').scrollTo($(this).attr('rel'), 300);
		
	//disable click event
	   return false;		
		
});

Conclusion

That's it, a simple script that will able to make your website more interactive. Most importantly, it able to help you use the space wisely and display information in an interesting way. It's simple, and I believe it will be pretty handy for your upcoming web projects.

Author: Kevin Liew

Kevin Liew is a web designer and developer and keen on contributing to the web development industry. He loves frontend development and absolutely amazed by jQuery. Feel free to say hi to me, or follow @quenesswebblog on twitter.

Share the love

59 comments

Yogesh
Fri, 27th January 2012
Nice tutorial and great work Kevin. I want to just know how to make it to scroll horizontally. I want it in one of my current project. I need a horizontal content slider with previous and next arrow keys to slide the content. I don't want to use any plugin for this. Like yours i need a clean code to achieve this. Your help will be greatly appreciated. Reply
Kevin Liew Admin
Wed, 8th February 2012
Horizontally, you need to make sure .slider-body width = total of slides * slide's width.

Then, you need to set #hero-slider .panel float:left.

with that, the panel will align horizontally. For the scrolling part, don't have to worry about it, scrollTo plugin will scroll it by itself as long as you get the arrangement right. Reply
Onie Ross
Thu, 9th February 2012
I know and hope this will help me in my subjects in C++ and for future, ^^ Reply
Lev
Fri, 9th March 2012
You are the my king of Jquery Sliders and the MAIN - the explanation of them !!! Reply
Kasper
Sat, 5th May 2012
Hi Kevin,
Thanks for the great content slider.. Just what I was looking for.
Can you explain how to can add a class so that it is possible to have different icons for each tab..
Where exactly should this class be added in the html and how would it look in css?
Big up. Reply
Kevin Liew Admin
Sun, 6th May 2012
It will look something like this:

<li><a href="#" rel="#panel-1" class="active icon-1">Item 1</a></li>
<li><a href="#" rel="#panel-2" class="icon-2">Item 2</a></li>
<li><a href="#" rel="#panel-3" class="icon3">Item 3</a></li>

a.icon-1 {
background: transparent url(img.gif) 0 0 no-repeat;
padding-left:20px;
}

Something like that. Reply
Dewald
Thu, 7th June 2012
Hi, i hope you ca help me, im trying to get this to work as a custom joomla module, it just doesn't want to work? no button click through... any help? Reply
Christian
Thu, 12th July 2012
this pretty good tutorial thanks Reply
Kabah
Mon, 13th August 2012
Is there a way to make it automate? Insted you click the buttons the slide moves alone? Reply
Kevin Liew Admin
Mon, 13th August 2012
Hi Kabah, it's possible by using setInterval method. Reply
Ferhad
Mon, 3rd September 2012
Can you show some samples? i am beginner and i dont know how to do this :/ Reply
John-E.
Wed, 15th August 2012
Hi, great plugin! Bookmarked.

I am using this for a personal project, just for exploring and learning. I am trying to make the scroll go horizontal where the two choice UI-list is in one div, and the divs that should be chosen wich contains one login form and the other a registration form. The anchor-classes are being changed, but the content divs are not being moved or anything. I also would like the ID of the parent list iten (<LI>) to switch between #current and none, is this posible?

Below is a link to pastebinned code that should help create an image of what i want.

http://pastebin.com/RYzd887T Reply
Christina
Fri, 26th October 2012
This is a great, easy to follow slider. I'm a beginner and was able to figure out everything for myself but one thing--I want this to be clickable, but also rotate automatically if left alone. I assume I need to add this to the script somewhere, but what do I add and where? Thanks for your help :) Reply
Levi
Sat, 6th July 2013
Thanks for your tutorial!! Its much better than the others because it's simple, and I can modify it easy.. :)

Thank you : Levi Reply
Kevin
Mon, 2nd December 2013
This is brilliant, thank you so much it's exactly what I have been searching for! Reply
Kevin Smith
Fri, 6th December 2013
Excellent tutorial. I found the comment about converting to a horizontal slider very useful. It may be worth including that information in the main article body. Thanks! Reply

Leave a Comment

Please keep in mind that comments are moderated and rel="nofollow" is in use. You can use [code][/code] if you want to write codes. Don't spam us :) Thanks!

Advertisement