Today we will make simple and nice jQuery gallery which will load images ‘ajaxy’. Also our gallery will support working with predefined custom sets of images. I hope that our result will interesting for you.
Here are links to demo and downloadable package:
Live Demo
[sociallocker]
download in package
[/sociallocker]
Now please download the example files and lets start coding !
Step 1. HTML
index.html
As usual, we start with the HTML.
| 01 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | 
| 02 | <htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"> | 
| 03 | <head> | 
| 04 |     <title>Ajax photo gallery (jQuery) with custom images sets | Script tutorials</title> | 
| 05 |     <linkrel="stylesheet"type="text/css"href="css/style.css"/> | 
| 06 |     <scripttype="text/javascript"src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> | 
| 07 |     <scripttype="text/javascript"src="js/main.js"></script> | 
| 08 | </head> | 
| 09 | <body> | 
| 10 |     <divclass="example"> | 
| 11 |         <h2>Ajax photo gallery (jQuery) with custom images sets</h2> | 
| 12 |         <divid="gallery"> | 
| 13 |             <ulid="sets"></ul> | 
| 14 |             <divid="loading"></div> | 
| 15 |             <imgid="photo"src="images/pic1.jpg"/> | 
| 16 |             <ulid="thumbs"></ul> | 
| 17 |         </div> | 
| 18 |     </div> | 
| 19 | </body> | 
| 20 | </html> | 
As you can see – we don`t going to load anything in beginning. All images will loaded only when page will loaded.
Step 2. CSS
Here are our styles:
css/style.css
| 001 | * { | 
| 002 |     margin:0; | 
| 003 |     padding:0; | 
| 004 | } | 
| 005 | body { | 
| 006 |     background:#eee; | 
| 007 |     margin:0; | 
| 008 |     padding:0; | 
| 009 | } | 
| 010 | .example { | 
| 011 |     position:relative; | 
| 012 |     background-color:#fff; | 
| 013 |     width:850px; | 
| 014 |     overflow:hidden; | 
| 015 |     border:1px#000solid; | 
| 016 |     margin:20pxauto; | 
| 017 |     padding:20px; | 
| 018 |     border-radius:3px; | 
| 019 |     -moz-border-radius:3px; | 
| 020 |     -webkit-border-radius:3px; | 
| 021 | } | 
| 022 | /* gallery styles */ | 
| 023 | #gallery { | 
| 024 |     background-color:#888; | 
| 025 |     height:630px; | 
| 026 |     overflow:hidden; | 
| 027 |     position:relative; | 
| 028 |     width:800px; | 
| 029 |     border-radius:10px; | 
| 030 |     -moz-border-radius:10px; | 
| 031 |     -webkit-border-radius:10px; | 
| 032 | } | 
| 033 | #gallery ul#sets { | 
| 034 |     display:table; | 
| 035 |     list-style:noneoutsidenone; | 
| 036 |     margin:10pxauto; | 
| 037 |     overflow:hidden; | 
| 038 | } | 
| 039 | #gallery ul#sets li { | 
| 040 |     float:left; | 
| 041 |     margin-right:10px; | 
| 042 | } | 
| 043 | #gallery ul#sets li a { | 
| 044 |     background-color:#000; | 
| 045 |     color:#fff; | 
| 046 |     cursor:pointer; | 
| 047 |     display:block; | 
| 048 |     font-size:14px; | 
| 049 |     font-weight:normal; | 
| 050 |     height:26px; | 
| 051 |     line-height:26px; | 
| 052 |     padding:10px20px; | 
| 053 |     text-decoration:none; | 
| 054 |     -moz-border-radius:5px;-webkit-border-radius:5px;-khtml-border-radius:5px;border-radius:5px5px5px5px; | 
| 055 |     background: -moz-linear-gradient(#363636, #010101); /* FF 3.6+ */ | 
| 056 |     background: -ms-linear-gradient(#363636, #010101); /* IE10 */ | 
| 057 |     background: -webkit-gradient(linear, lefttop, leftbottom, color-stop(0%, #363636), color-stop(100%, #010101)); /* Safari 4+, Chrome 2+ */ | 
| 058 |     background: -webkit-linear-gradient(#363636, #010101); /* Safari 5.1+, Chrome 10+ */ | 
| 059 |     background: -o-linear-gradient(#363636, #010101); /* Opera 11.10 */ | 
| 060 |     filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#363636', endColorstr='#010101'); /* IE6 & IE7 */ | 
| 061 |     -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#363636', endColorstr='#010101')"; /* IE8+ */ | 
| 062 |     background: linear-gradient(#363636, #010101); /* the standard */ | 
| 063 | } | 
| 064 | #gallery ul#sets li a:hover{ | 
| 065 |     background-color:#ff6a11; | 
| 066 |     background: -moz-linear-gradient(#ff9317, #ff6a11); /* FF 3.6+ */ | 
| 067 |     background: -ms-linear-gradient(#ff9317, #ff6a11); /* IE10 */ | 
| 068 |     background: -webkit-gradient(linear, lefttop, leftbottom, color-stop(0%, #ff9317), color-stop(100%, #ff6a11)); /* Safari 4+, Chrome 2+ */ | 
| 069 |     background: -webkit-linear-gradient(#ff9317, #ff6a11); /* Safari 5.1+, Chrome 10+ */ | 
| 070 |     background: -o-linear-gradient(#ff9317, #ff6a11); /* Opera 11.10 */ | 
| 071 |     filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff9317', endColorstr='#ff6a11'); /* IE6 & IE7 */ | 
| 072 |     -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff9317', endColorstr='#ff6a11')"; /* IE8+ */ | 
| 073 |     background: linear-gradient(#ff9317, #ff6a11); /* the standard */ | 
| 074 | } | 
| 075 | #gallery #loading { | 
| 076 |     text-align:center; | 
| 077 | } | 
| 078 | #gallery #photo { | 
| 079 |     display:block; | 
| 080 |     margin:10pxauto; | 
| 081 | } | 
| 082 | #gallery ul#thumbs { | 
| 083 |     bottom:-25px; | 
| 084 |     left:250px; | 
| 085 |     list-style:noneoutsidenone; | 
| 086 |     margin:0auto; | 
| 087 |     opacity:0.5; | 
| 088 |     overflow:hidden; | 
| 089 |     position:absolute; | 
| 090 |     width:300px; | 
| 091 |     -moz-transition: bottom0.5s ease-in-out; | 
| 092 |     -ms-transition: bottom0.5s ease-in-out; | 
| 093 |     -o-transition: bottom0.5s ease-in-out; | 
| 094 |     -webkit-transition: bottom0.5s ease-in-out; | 
| 095 |     transition: bottom0.5s ease-in-out; | 
| 096 | } | 
| 097 | #gallery ul#thumbs:hover { | 
| 098 |     opacity:1; | 
| 099 |     bottom:10px; | 
| 100 | } | 
| 101 | #gallery ul#thumbs li { | 
| 102 |     border:1pxsolid#888; | 
| 103 |     cursor:pointer; | 
| 104 |     float:left; | 
| 105 |     height:38px; | 
| 106 |     width:58px; | 
| 107 | } | 
| 108 | #gallery ul#thumbs li:hover { | 
| 109 |     border:1pxsolid#fff; | 
| 110 | } | 
| 111 | #gallery ul#thumbs li img { | 
| 112 |     width:100%; | 
| 113 | } | 
Step 3. JS (jQuery)
Now, its time to see how our gallery working:
js/main.js
| 01 | // defining sets of images (galleries) | 
| 02 | varimages = { | 
| 03 |     'set 1': [ | 
| 04 |         'pic1.jpg', | 
| 05 |         'pic2.jpg', | 
| 06 |         'pic3.jpg', | 
| 07 |         'pic4.jpg', | 
| 08 |         'pic5.jpg', | 
| 09 |         'pic6.jpg', | 
| 10 |         'pic7.jpg', | 
| 11 |         'pic8.jpg', | 
| 12 |         'pic9.jpg', | 
| 13 |         'pic10.jpg' | 
| 14 |     ], | 
| 15 |     'set 2': [ | 
| 16 |         'pic2.jpg', | 
| 17 |         'pic3.jpg', | 
| 18 |         'pic4.jpg', | 
| 19 |         'pic5.jpg', | 
| 20 |         'pic6.jpg', | 
| 21 |         'pic7.jpg', | 
| 22 |         'pic8.jpg', | 
| 23 |         'pic9.jpg', | 
| 24 |         'pic10.jpg', | 
| 25 |         'pic11.jpg', | 
| 26 |         'pic12.jpg', | 
| 27 |         'pic5.jpg', | 
| 28 |         'pic6.jpg', | 
| 29 |         'pic7.jpg', | 
| 30 |         'pic8.jpg' | 
| 31 |     ], | 
| 32 |     'set 3': [ | 
| 33 |         'pic1.jpg', | 
| 34 |         'pic2.jpg', | 
| 35 |         'pic3.jpg', | 
| 36 |         'pic4.jpg', | 
| 37 |         'pic5.jpg', | 
| 38 |         'pic6.jpg', | 
| 39 |         'pic7.jpg', | 
| 40 |         'pic8.jpg', | 
| 41 |         'pic9.jpg', | 
| 42 |         'pic10.jpg', | 
| 43 |         'pic11.jpg', | 
| 44 |         'pic12.jpg', | 
| 45 |         'pic4.jpg', | 
| 46 |         'pic5.jpg', | 
| 47 |         'pic6.jpg' | 
| 48 |     ] | 
| 49 | }; | 
| 50 | $(document).ready(function(){ // on document ready | 
| 51 |     $('#gallery').gallery(); | 
| 52 | }); | 
| 53 | $.fn.gallery = function() { | 
| 54 |     varself = this; | 
| 55 |     varsetimgs; | 
| 56 |     this.each(function() { | 
| 57 |         varg = this; | 
| 58 |         g.load_sets = function(el) { // function - load sets of images | 
| 59 |             $.each(images, function(key, value) { | 
| 60 |                 $(el).append('<li><a id="'+key+'" href="#" title="'+key+'">'+key+'</a></li>'); | 
| 61 |             }); | 
| 62 |             varsets = $(el).find('li a'); | 
| 63 |             $(sets).click(function() { // binding onclick to our sets | 
| 64 |                 varset = $(this).attr('id'); | 
| 65 |                 g.setimgs = images[set]; | 
| 66 |                 $(g).find('#thumbs').html(''); | 
| 67 |                 g.load_thumbs($(g).find('#thumbs')[0], 0); | 
| 68 |                 $(g).find('#loading').html('Loading <strong>1</strong> of '+g.setimgs.length+' images'); | 
| 69 |             }); | 
| 70 |             sets[0].click(); | 
| 71 |         } | 
| 72 |         g.load_thumbs = function(el, index) { // function - load thumbs of set | 
| 73 |             $(el).append('<li><img id="'+ g.setimgs[index] + '" src="images/thumb_'+ g.setimgs[index] + '" /></li>'); | 
| 74 |             vartn = newImage(); | 
| 75 |             $(tn).load(function() { | 
| 76 |                 vara = $($(el).find('li')[index]).find('img')[0]; | 
| 77 |                 $(a).append(this); | 
| 78 |                 $(a).click(function() { // binding onclick to thumbs | 
| 79 |                     vari = $(this).attr('id'); | 
| 80 |                     $(g).find('#photo').attr('src', 'images/'+i); | 
| 81 |                     returnfalse; | 
| 82 |                 }); | 
| 83 |                 if((index + 1) < g.setimgs.length) { | 
| 84 |                     g.load_thumbs(el, (index + 1)); | 
| 85 |                     $(g).find('#loading strong').html(index + 2); | 
| 86 |                 } else{ | 
| 87 |                     $(g).find('#loading').html('Finished loading <strong>'+ g.setimgs.length + '</strong> images'); | 
| 88 |                     $($(g).find('#thumbs li img')[0]).click(); | 
| 89 |                 } | 
| 90 |             }); | 
| 91 |             tn.src = 'images/thumb_'+ g.setimgs[index]; | 
| 92 |         } | 
| 93 |         // oninit - load sets for gallery | 
| 94 |         g.load_sets($(g).find('#sets')[0]); | 
| 95 |     }); | 
| 96 | }; | 
As you can see – in most beginning we defining set of used images. And during initialization – we loading our sets and loading first set automatically. Binding onclick events etc. Initialization of gallery very easy – $(‘#gallery’).gallery();
Step 4. Images
All our images located in ‘images’ folder. Here are thumb images (thumb_pic1.jpg, thumb_pic2.jpg .. thumb_pic12.jpg) and full-size images too(pic1.jpg, pic2.jpg .. pic12.jpg)
Live Demo
Conclusion
New photo gallery is done! I hope that you enjoyed this article. Good luck in your projects!
 
 






