Create a Thumbnail with Fading Caption Using jQuery

Written by Kevin Liew on 20 Oct 2009
259,765 Views • Tutorials

Introduction

Hi all, today we are going to learn to create another thumbnail effect with fading and transparent caption. It's simple and obviously I have running out of ideas in jQuery tutorial because this is similar to jQuery Thumbnail with Zooming Image and Fading caption. If you have any suggestion about tutorial, please contact me

Before we begin, I have already made different effect for thumbnail, you can check it out:

1. HTML

First of all, HTML. it's easy to understand, all your caption/description of the thumbnail should put inside the caption class.

<div class="item">
	<a href="#"><img data-src="image.gif" alt="title" title="" width="125" height="125"/></a>
	<div class="caption">
		<a href="">Title</a>
		<p>Description</p>
	</div>
</div>

2. CSS

I have put comment on each important CSS. However, if you want to learn more about CSS, you can visit my following posts:

body {
	font-family:arial;	
}

.item {
	width:125px;
	height:125px;	
	border:4px solid #222;	
	margin:5px 5px 5px 0;
	
	/* required to hide the image after resized */
	overflow:hidden;
	
	/* for child absolute position */
	position:relative;
	
	/* display div in line */
	float:left;
}

.item .caption {
	width:125px;
	height:125px;
	background:#000;
	color:#fff;
	font-weight:bold;
		
	/* fix it at the bottom */
	position:absolute;
	left:0;

	/* hide it by default */
	display:none;

	/* opacity setting */
	filter:alpha(opacity=80);    /* ie  */
	-moz-opacity:0.8;    /* old mozilla browser like netscape  */
	-khtml-opacity: 0.8;    /* for really really old safari */  
	opacity: 0.8;    /* css standard, currently it works in most modern browsers like firefox,  */

}

.item .caption a {
	text-decoration:none;
	color:#0cc7dd;
	font-size:16px;	
	
	/* add spacing and make the whole row clickable*/
	padding:5px;
	display:block;
}

.item .caption p {
	padding:5px;	
	margin:0;
	font-size:10px;
}

img {
	border:0;
	
	/* allow javascript moves the img position*/
	position:absolute;
}

.clear {
	clear:both;	
}

3. Javascript

I have declared two variables called move and zoom. Move variable is for the top and left value of the thumbnail, if you mouse over the image, the image will move according to the value you have set (i make it move to left, so after the zooming, it'll always display in center). And for the second variable - zoom, it's the value you need to set if you want to enable the zooming effect. Currently, it's set to 1.2 which will enlarge the image to 120%. Simple, and for the rest of the code I have added comments above it. If you have any question, please drop me a comment.

$(document).ready(function() {

	//move the image in pixel
	var move = -15;
	
	//zoom percentage, 1.2 =120%
	var zoom = 1.2;

	//On mouse over those thumbnail
	$('.item').hover(function() {
		
		//Set the width and height according to the zoom percentage
		width = $('.item').width() * zoom;
		height = $('.item').height() * zoom;
		
		//Move and zoom the image
		$(this).find('img').stop(false,true).animate({'width':width, 'height':height, 'top':move, 'left':move}, {duration:200});
		
		//Display the caption
		$(this).find('div.caption').stop(false,true).fadeIn(200);
	},
	function() {
		//Reset the image
		$(this).find('img').stop(false,true).animate({'width':$('.item').width(), 'height':$('.item').height(), 'top':'0', 'left':'0'}, {duration:100});	

		//Hide the caption
		$(this).find('div.caption').stop(false,true).fadeOut(200);
	});

});

Conclusion

Like this tutorials? You can express your gratitude by visiting my sponsors on the sidebar, bookmark it and help me to spread this tutorial to our friends! :) Thanks!

Demo Download
Join the discussion

Comments will be moderated and rel="nofollow" will be added to all links. You can wrap your coding with [code][/code] to make use of built-in syntax highlighter.

68 comments
Andrew 14 years ago
superb!
Reply
mkjones 14 years ago
Dang! I just spend a few hours coding a sliding effect but this is FAR better. Where were you yesterday!
Reply
rimmer 14 years ago
This is just beautiful! Thank you so much for taking the time to share these great jQuery-tuts :)
Reply
Mad Max 14 years ago
Excellent! Simple and effective.
thanks for sharing.
Reply
Jay Garcia 14 years ago
Pretty cool!
Reply
Michael Thompson 14 years ago
Mad Max 14 years ago
@kevin
You can center images moving it left and top by the same amount of pixel, only if you have square images (as in your example).
So i\'v made a little modification to your js, to have these offsets auto-calculated based on zoom level and regardless of image proportions:

var zoom = 1.2;
moveh = ($j(\'.banner\').width()-($j(\'.banner\').width() * zoom))/2; //negative value
movev = ($j(\'.banner\').height()-($j(\'.banner\').height() * zoom))/2; //negative value

and then use these 2 value in the animate parameters.

Hope it can be useful.
Reply
SohelElite 14 years ago
thanks for sharing.. Great
Reply
Hung Bui 14 years ago
Wow very nice in deed. Thanks for sharing this.
Reply
scvinodkumar 14 years ago
Fantastic!!!!. This is great!!!!
Reply
Matthew 14 years ago
Thanks Kevin. I already have a project in mind to use this on.
Reply
tutorial blog 14 years ago
thank
Reply
kevin Admin 14 years ago
@mike, yea, just remove this line:
# //Move and zoom the image
$(this).find(\'img\').stop(false,true).animate({\'width\':width, \'height\':height, \'top\':move, \'left\':move}, {duration:200});

and also the script to reset the image. it will work :)
Reply