jQuery image zoom effect

14 December 2009| 18 Comments| Print

I recently revamped my portfolio as it was looking dreary and completely uninspiring, I wanted to present my work in a way that was both easy to navigate, easy to maintain and most importantly looked smart and un-cluttered. When I was brainstorming for ideas, I initially thought I would break up my portfolio into categories to make it both easier to navigate and more structured in presentation. After much consideration I completely scrapped categories and decided on the simpler approach of having large thumbnails with a brief sentence of text on hover.

So today I’m going to run through the technique used to zoom the image thumbnails and display the overlay of text. You can see my portfolio here which is a good demo of what we’re creating of you can see the dedicated demonstration here

jquery-thumbs

The HTML

There are two DIV’s that make up the construction of each element, we first have out .item div which is the container for our image and caption. Directly inside the ‘item’ div we have the image with the ‘caption’ div directly below that with a link and paragraph tag inside. take a look at the code and image structure below to see the construction of the div elements.

structure

   <div class="item"><img src="http://papermashup.com/wp-content/themes/arthemia/portfolio/images/jennifer.jpg" height="271" width="304" />
      <div class="caption"><a href="http://jenniferjohnston.tv">Jennifer Johnston</a>
        <p>Scottish voiceover Jennifer Johnston. Branding, site design and development</p>
      </div>
    </div>

The CSS

.item {
	width:304px;
	height:271px;
	border:4px solid #333;
	margin:30px 12px 10px 5px;
	overflow:hidden;
	position:relative;
	float:left;
}
.item .caption {
	width:304px;
	height:71px;
	bottom:0;
	color:#fff;
	background:#000;
	font-weight:700;
	position:absolute;
	left:0;
	display:none;
	filter:alpha(opacity=82);
	-moz-opacity:0.9;
	opacity: 0.9;
}
.item .caption a {
	text-decoration:none;
	color:#0cc7dd;
	font-size:17px;
	letter-spacing:-1px;
	font-family:Arial, Helvetica, sans-serif;
	padding:5px;
	display:block;
}
.item .caption p {
	padding:5px;
	margin:0;
	color:#fff;
	line-height:15px;
	font-size:12px;
}
.item img {
	border:0;
	position:absolute;
}

The JavaScript

You can see that we’re setting two variables, ‘zoom’ and ‘move’. Notice that instead of declaring var again in front the variable ‘move’ i’ve omitted it. This is because if we’re setting multiple variables with jQuery you don’t need to add var each time, the values are almost chained.

The next steps are that we setup a .hover function that when triggered will animate the image width and height to give the impression that the image is zooming out, we’re also animating the caption to fade in and out on hover.

$(document).ready(function() {

        var zoom = 1.1
              move = -15;

	$('.item').hover(function() {

		width = $('.item').width() * zoom;
		height = $('.item').height() * zoom;

		$(this).find('img').stop(false,true).animate({'width':width, 'height':height, 'top':move, 'left':move}, {duration:300});
		$(this).find('div.caption').stop(false,true).fadeIn(300);
	},
	function() {

		$(this).find('img').stop(false,true).animate({'width':$('.item').width(), 'height':$('.item').height(), 'top':'0', 'left':'0'}, {duration:300});
		$(this).find('div.caption').stop(false,true).fadeOut(400);
	});

});

demodownload

18 Comments

  • Brian Jones

    Nice little effect – thank you for sharing!

  • Davinder

    Thank you soo much!

  • jQuery image zoom effect » Javascript & Web Design - Tous les jours le meilleur des ressources Javascript pour intégrateurs web front-end (avec parfois un soupçon de PHP)

    [...] Image jQuery – Cet effet réalisé avec quelques lignes de jQuery (et un soupçon de CSS) applique un léger effet de zoom sur une image tout en affichant sa description au survol de la souris sur le conteneur. Voir la démonstration. Posted in Helper CSS | Tagged Description, Image, jQuery, Zoom Cancel Reply [...]

  • Webstandard-Team

    Very nice effect, did you try it with a definition list too? No use of div.item, div.caption and p! Just dl, dt and dd!

  • Ashley (author)

    @Webstandard-Team i haven’t tried it with a definition list but i can’t see any reason why it wouldn’t work.

  • digitalbart

    Subtle but Nice effect, like it!

  • Brecht

    Wow, I love it!
    Thanks for sharing another great jQuery tutorial

  • Josh

    I’m doing something a little different with jQuery zoom in my WordPress plugin for getting images from flickr. It really works out nice.

  • rodman

    wow, cool looking zoom effect. i will sure use it on my site

  • Ashley (author)

    @rodman glad to hear you found it useful, thanks

  • 45+ Incredible jQuery Plugins Making Images more Dynamic and Elegant | tripwire magazine

    [...] jQuery image zoom effect [...]

  • Giancarlo

    Congratulations. This is a wonderful effect library!

  • 20 Plugins para jQuery | Renan Lima

    [...] jQuery image zoom effect – De apelo visual, este plugin é útil quando bem [...]

  • Mia

    This is def one of the best zoom effects Ive seen – its very smooth , and I like the fact of the thumbs being larger than the standard 150×150- however the zoom effect is simply awesome . Great work ! :D

  • PSDgator

    I think semantically it will be better if a set of DL/DT might be used. Any other thoughts expect DIVs?

  • Ashley (author)

    @PSDgator, I guess your right. a definition list would certainly make sense.

  • randsco

    This article is misnamed, as there’s no real “zoom” effect. A better title would be, “Nifty jQuery Caption Zoom”.

    However, let me submit a pure-CSS Image-caption zoom, which IS both an image zoom and a caption zoom (with the added benefit of not requiring or relying on jQuery or JavaScript – i.e., everyone gets to see it.

    Developed by me five years ago. Just as relevant today as it was then.

    Cheers,
    -stk

Leave a comment...

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

This is a Gravatar-enabled site. To get your own globally-recognized-avatar, register at Gravatar.