Artikel Copas 100%

Berbagi seadaanya.

Select Menu
  • Home
  • Blogging
    • Tutorial Blogspot
    • CSS
    • jQuery
    • Widget
  • Tools
    • Font Awesome
    • HTML Editor
    • HTML Encrypter
    • Code Color
    • Responsive Cek
  • Sitemap
  • Static Page
  • Error Page
Home » CSS » jQuery » Polaroid Photobar Gallery with jQuery

Kamis, 16 Januari 2014

Polaroid Photobar Gallery with jQuery

Add Comment
CSS, jQuery
Dalam tutorial ini kita akan membuat galeri gambar dengan tampilan Polaroid. Kami akan memiliki album yang akan memperluas ke set thumbnail sedikit diputar yang bermunculan di hover. Gambar penuh akan meluncur di dari bawah sekali thumbnail diklik. Pada tampilan gambar penuh pengguna dapat menavigasi melalui gambar atau hanya memilih thumbnail lain yang akan ditampilkan.


  • Demo
  • Download



The Markup

Kita akan mencakup semua HTML ke dalam div dengan class "pp_gallery". Ini akan terdiri dari div loading, navigasi yang akan muncul ketika container thumbnail utama gambar penuh di tampilkan.

Di dalam container thumbnail kita gunakan class "pp_thumbContainer", kita akan memiliki beberapa div untuk album dan div untuk kembali ke tampilan album. Setiap album akan berisi thumbnail dengan deskripsi di dalam div class "konten". Kita juga akan mencakup elemen div untuk deskripsi album itu sendiri.
<div id="pp_gallery" class="pp_gallery">
<div id="pp_loading" class="pp_loading"></div>
<div id="pp_next" class="pp_next"></div>
<div id="pp_prev" class="pp_prev"></div>
<div id="pp_thumbContainer">
<div class="album">
<div class="content">
<img src="images/album1/thumbs/1.jpg" alt="images/album1/1.jpg" />
<span>The Sixties by Tetsumo</span>
</div>
<div class="content">
<img src="images/album1/thumbs/2.jpg" alt="images/album1/2.jpg" />
<span>The Sixties by Tetsumo</span>
</div>
...
<div class="descr">
The Sixties
</div>
</div>
<div class="album" style="bottom:-90px;">
...
</div>
...
<div class="pp_back">Albums</div>
</div>
</div>
Struktur HTML preview gambar penuh kita buat secara dinamis, berikut kodenya:
<div id="pp_preview" class="pp_preview">
<img src="images/album1/1.jpg" />
<div class="pp_descr"><span>Description</span></div>
</div>

The CSS

Kita akan mulai dengan css reset dan beberapa style umum untuk body:
*{
margin:0;
padding:0;
}
body{
background:#000 url(../bg.jpg) repeat center center;
font-family:"Myriad Pro", "Trebuchet MS", Helvetica, sans-serif;
font-size:12px;
color: #fff;
overflow:hidden;
}
Selanjutnya, kita akan membuat style div loading dan navigasi untuk melangkah melalui gambar ketika kita berada dalam mode preview:
.pp_loading{
display:none;
position:fixed;
top:50%;
left:50%;
margin:-35px 0px 0px -35px;
background:#fff url(../icons/loader.gif) no-repeat center center;
width:70px;
height:70px;
z-index:999;
opacity:0.7;
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
}
.pp_next, .pp_prev{
cursor:pointer;
top:50%;
margin-top:-16px;
width:32px;
height:32px;
position:fixed;
text-align:center;
border:1px solid #111;
color:#fff;
-moz-box-shadow:0px 0px 3px #000;
-webkit-box-shadow:0px 0px 3px #000;
box-shadow:0px 0px 3px #000;
}
.pp_next{
right:-40px;
background:#222 url(../icons/next.png) no-repeat center center;
}
.pp_prev{
left:-40px;
background:#222 url(../icons/prev.png) no-repeat center center;
}
div loading di posisikan tepat di tengah layar menggunakan 50% negative margin trick, kita dapat mengatur bagian atas dan kiri untuk 50% dan menambahkan margin atas dan kiri dengan nilai negatif dari setengah dari lebar elemen, atau tinggi, masing-masing.

Hal yang sama kita lakukan untuk item navigasi, hanya saja di sini elemen vertikal akan berpusat di tengah.

Thumbnail kontainer akan diposisikan di bagian bawah halaman:
#pp_thumbContainer{
position:fixed;
bottom:0px;
left:0px;
height:65px;
width:100%;
}
Awalnya album tersembunyi tapi ketika kita buka halaman, album akan meluncur dari bawah, jadi kita akan menetapkan nilai dasar awal untuk -90 piksel:
#pp_thumbContainer .album{
position:absolute;
width:200px;
height:65px;
bottom:-90px;
}
Nilai kiri untuk posisi album akan dihitung secara dinamis pada page load. Kita akan menyebarkan semua album merata di seluruh lebar halaman.

Uraian tentang album dan elemen kembali akan di bagi menjadi beberapa gaya:
.album .descr,
.pp_back{
position:absolute;
bottom:0px;
left:-16px;
background:#222;
text-align:center;
border:1px solid #111;
padding:5px;
cursor:pointer;
width:169px;
color:#fff;
cursor:pointer;
text-shadow:0px 0px 1px #fff;
-moz-box-shadow:1px 1px 4px #000;
-webkit-box-shadow:1px 1px 4px #000;
box-shadow:1px 1px 4px #000;
text-transform:uppercase;
bottom:120px;
left:-100px;
width:80px;
}
Wrapper untuk gambar dan judul gambar akan memiliki gaya berikut:
#pp_thumbContainer .content{
position:absolute;
top:0px;
height:155px;
cursor:pointer;
}
#pp_thumbContainer img{
border:5px solid #fff;
-moz-box-shadow:1px 1px 7px #000;
-webkit-box-shadow:1px 1px 7px #000;
box-shadow:1px 1px 7px #000;
}
.pp_preview{
position:fixed;
top:150%;
left:50%;
}
.pp_preview img{
position:absolute;
top:0px;
left:0px;
border:10px solid #fff;
border-bottom:45px solid #fff;
-moz-box-shadow:1px 1px 7px #000;
-webkit-box-shadow:1px 1px 7px #000;
box-shadow:1px 1px 7px #000;
}
.pp_descr{
height:45px;
line-height:45px;
font-size:20px;
width:100%;
bottom:0px;
left:0px;
position:absolute;
text-align:center;
color:#00021c;
}

The JavaScript

Akan ada banyak animasi di seluruh JavaScript. Album akan bergeser dari bawah ketika halaman mulai loading. Setelah album diklik, kita akan melihat tampilan thumbnail gambar dalam album. Ketika kita memilih thumbnail, kita perlu menciptakan div pratinjau dan slider dalam dari bawah. Gambar akan diubah ukurannya sehingga cocok ke jendela.
var ie    = false;
if ($.browser.msie) {
ie = true;
}
//current album/image displayed
var current = -1;
var album = -1;
//windows width
var w_width = $(window).width();
//caching
var $albums = $('#pp_thumbContainer div.album');
var $loader = $('#pp_loading');
var $next = $('#pp_next');
var $prev = $('#pp_prev');
var $images = $('#pp_thumbContainer div.content img');
var $back = $('#pp_back');
var nmb_albums = $albums.length;
var spaces = w_width/(nmb_albums+1);
var cnt = 0;
//preload all the images (thumbs)
var nmb_images = $images.length;
var loaded = 0;
$images.each(function(i){
var $image = $(this);
$('<img />').load(function(){
++loaded;
if(loaded == nmb_images){
//let's spread the albums evenly at the bottom of the page
$albums.each(function(){
var $this = $(this);
++cnt;
var left = spaces*cnt - $this.width()/2;
$this.css('left',left+'px');
$this.stop().animate({'bottom':'0px'},500);
}).unbind('click').bind('click',spreadPictures);
//also rotate each picture of an album with a random number of degrees
$images.each(function(){
var $this = $(this);
var r = Math.floor(Math.random()*41)-20;
$this.transform({'rotate' : r + 'deg'});
});
}
}).attr('src', $image.attr('src'));
});
spreadPictures function akan melakukan hal yang sama: akan memindahkan album yang dipilih ke kiri dan tersebar ke seluruh thumbnail:
function spreadPictures(){
var $album = $(this);
//track which album is opened
album = $album.index();
//hide all the other albums
$albums.not($album).stop().animate({'bottom':'-90px'},300);
$album.unbind('click');
//now move the current album to the left
//and at the same time spread its images throughout
//the window, rotating them randomly, hide the description of the album

//store the current left for the reverse operation
$album.data('left',$album.css('left'))
.stop()
.animate({'left':'0px'},500)
.find('.descr')
.stop()
.animate({'bottom':'-30px'},200);
var total_pic = $album.find('.content').length;
var cnt = 0;
//each picture
$album.find('.content')
.each(function(){
var $content = $(this);
++cnt;
//window width
var w_width = $(window).width();
var spaces = w_width/(total_pic+1);
var left = (spaces*cnt) - (140/2);
var r = Math.floor(Math.random()*41)-20;
//var r = Math.floor(Math.random()*81)-40;
$content.stop().animate({'left':left+'px'},500,function(){
$(this).unbind('click')
.bind('click',showImage)
.unbind('mouseenter')
.bind('mouseenter',upImage)
.unbind('mouseleave')
.bind('mouseleave',downImage);
}).find('img')
.stop()
.animate({'rotate': r+'deg'},300);
$back.stop().animate({'left':'0px'},300);
});
}
Sekarang kita akan menentukan apa yang terjadi ketika kita klik pada item untuk kembali ke tampilan album. Kita akan menampilkan album ke posisi kiri awal dan album lain lagi. Jika pengguna sedang melihat gambar penuh, kita akan membuat slide ke atas, keluar dari jendela (hideCurrentPicture):
$back.bind('click',function(){
$back.stop().animate({'left':'-100px'},300);
hideNavigation();
//there's a picture being displayed
//lets slide the current one up
if(current != -1){
hideCurrentPicture();
}

var $current_album = $('#pp_thumbContainer div.album:nth-child('+parseInt(album+1)+')');
$current_album.stop()
.animate({'left':$current_album.data('left')},500)
.find('.descr')
.stop()
.animate({'bottom':'0px'},500);

$current_album.unbind('click')
.bind('click',spreadPictures);

$current_album.find('.content')
.each(function(){
var $content = $(this);
$content.unbind('mouseenter mouseleave click');
$content.stop().animate({'left':'0px'},500);
});

$albums.not($current_album).stop().animate({'bottom':'0px'},500);
});
Fungsi berikutnya, yang disebut showImage, akan menampilkan gambar penuh dengan menggesernya dari bawah. Jika ada gambar lain yang ditampilkan, kita akan geser yang satu. Untuk preview, kita perlu mengatur margin negatif (-) sesuai dengan lebar dan tinggi gambar. Kita juga akan memutar preview secara acak:
function showImage(nav){
if(nav == 1){
//reached the first one
if(current==0){
return;
}
var $content = $('#pp_thumbContainer div.album:nth-child('+parseInt(album+1)+')')
.find('.content:nth-child('+parseInt(current)+')');
//reached the last one
if($content.length==0){
current-=2;
return;
}
}
else
var $content = $(this);

//show ajax loading image
$loader.show();

//there's a picture being displayed
//lets slide the current one up
if(current != -1){
hideCurrentPicture();
}

current = $content.index();
var $thumb = $content.find('img');
var imgL_source = $thumb.attr('alt');
var imgL_description = $thumb.next().html();
//preload the large image to show
$('<img style=""/>').load(function(){
var $imgL = $(this);
//resize the image based on the windows size
resize($imgL);
//create an element to include the large image
//and its description
var $preview = $('<div />',{
'id' : 'pp_preview',
'className' : 'pp_preview',
'html' : '<div class="pp_descr"><span>'+imgL_description+'</span></div>',
'style' : 'visibility:hidden;'
});
$preview.prepend($imgL);
$('#pp_gallery').prepend($preview);
var largeW = $imgL.width()+20;
var largeH = $imgL.height()+10+45;
//change the properties of the wrapping div
//to fit the large image sizes
$preview.css({
'width' :largeW+'px',
'height' :largeH+'px',
'marginTop' :-largeH/2-20+'px',
'marginLeft' :-largeW/2+'px',
'visibility' :'visible'
});
Cufon.replace('.pp_descr');
//show navigation
showNavigation();

//hide the ajax image loading
$loader.hide();

//slide up (also rotating) the large image
var r = Math.floor(Math.random()*41)-20;
if(ie)
var param = {
'top':'50%'
};
else
var param = {
'top':'50%',
'rotate': r+'deg'
};
$preview.stop().animate(param,500);
}).error(function(){
//error loading image.
//Maybe show a message : 'no preview available'
}).attr('src',imgL_source);
}
//click next image
$next.bind('click',function(){
current+=2;
showImage(1);
});
//click previous image
$prev.bind('click',function(){
showImage(1);
});
//slides up the current picture
function hideCurrentPicture(){
current = -1;
var r = Math.floor(Math.random()*41)-20;
if(ie)
var param = {
'top':'-100%'
};
else
var param = {
'top':'-100%',
'rotate': r+'deg'
};
$('#pp_preview').stop()
.animate(param,500,function(){
$(this).remove();
});
}
//shows the navigation buttons
function showNavigation(){
$next.stop().animate({'right':'0px'},100);
$prev.stop().animate({'left':'0px'},100);
}

//hides the navigation buttons
function hideNavigation(){
$next.stop().animate({'right':'-40px'},300);
$prev.stop().animate({'left':'-40px'},300);
}
function upImage(){
var $content = $(this);
$content.stop().animate({
'marginTop' : '-70px'
},400).find('img')
.stop()
.animate({'rotate': '0deg'},400);
}
function downImage(){
var $content = $(this);
var r = Math.floor(Math.random()*41)-20;
$content.stop().animate({
'marginTop' : '0px'
},400).find('img').stop().animate({'rotate': r + 'deg'},400);
}
Terakhir, kita akan menggunakan fungsi pengubah ukuran gambar penuh (full image) agar sesuai dengan ke jendela:
function resize($image){
var widthMargin = 50
var heightMargin = 200;

var windowH = $(window).height()-heightMargin;
var windowW = $(window).width()-widthMargin;
var theImage = new Image();
theImage.src = $image.attr("src");
var imgwidth = theImage.width;
var imgheight = theImage.height;

if((imgwidth > windowW)||(imgheight > windowH)){
if(imgwidth > imgheight){
var newwidth = windowW;
var ratio = imgwidth / windowW;
var newheight = imgheight / ratio;
theImage.height = newheight;
theImage.width= newwidth;
if(newheight>windowH){
var newnewheight = windowH;
var newratio = newheight/windowH;
var newnewwidth =newwidth/newratio;
theImage.width = newnewwidth;
theImage.height= newnewheight;
}
}
else{
var newheight = windowH;
var ratio = imgheight / windowH;
var newwidth = imgwidth / ratio;
theImage.height = newheight;
theImage.width= newwidth;
if(newwidth>windowW){
var newnewwidth = windowW;
var newratio = newwidth/windowW;
var newnewheight =newheight/newratio;
theImage.height = newnewheight;
theImage.width= newnewwidth;
}
}
}
$image.css({'width':theImage.width+'px','height':theImage.height+'px'});
}
Terakhir jangan lupa tambahkan javascript ini di atas </head>
<script src="js/cufon-yui.js" type="text/javascript"></script>
<script src="js/Note_this_400.font.js" type="text/javascript"></script>

  • Demo
  • Download


Sekian tutorial kali ini mengenai Polaroid Photobar Gallery with jQuery, semoga bermanfaat buat sobat semua!
Suka Artikel? Bagikan: Facebook Twitter Google+
0 Komentar untuk "Polaroid Photobar Gallery with jQuery"

Posting Lebih Baru Posting Lama Beranda
Langganan: Posting Komentar (Atom)

Popular Week

  • EDU Backlink
    EDU Backlink
    Backlink .EDU sekarang ini masih menjadi incaran bagi para blogger untuk menaikkan ranking situs/blog mereka, tapi kadang-kadang kita meras...
  • Bosan Dengan Dunia Blogger..
    Bosan Dengan Dunia Blogger..
    Selamat pagi sobat semua.. Mungkin anda sudah merasakan suatu kejenuhan yang anda alami saat ini dengan blog anda mungkin pertama anda membu...
  • About This Tattoo
    About This Tattoo
    Apa itu Tattoo? Dalam Bahasa Indonesia disebut dengan istilah "Rajah". Tattoo merupakan produk dari Body Decorating dengan mengga...
  • Opini Tentang Blog Ini
    Opini Tentang Blog Ini
    Sejauh ini saya sudah merasa bersalah dengan apa yang saya share.  Beberapa hal gak penting terkadang juga saya share sampai sampai sobat bi...
  • Optimasi Posting Blog
    Optimasi Posting Blog
    Yang namanya sebuah blog, tentu tidak terlepas dari posting. Posting dalam blogger merupakan sebuah "entry" yang ditulis dengan me...
  • 7 Apps Android Untuk Pengguna Blogger
    7 Apps Android Untuk Pengguna Blogger
    Dibawah ini adalah 7 AplikasiAdroid yang populer dan banyak digunakan oleh pengguna Blogger. Dan sebagai seorang pengguna blogger tidak ada ...
  • Free Download Smadav 9.3 Pro Full Version + Serial Number
    Free Download Smadav 9.3 Pro Full Version + Serial Number
    Semenjak Blogger saya di hapus saya jarang update di Faceblog jadi ketinggalan software yang sudah update deh, tapi gak apa apa daripada g...
  • Menampilkan Pesan Pada Jam Tertentu
    Menampilkan Pesan Pada Jam Tertentu
    Pernah terpikirkan untuk menampilkan pesan pada jam tertentu (Time Message) pada blog kita? tentu saja ya, Ada kalanya ketika sedang tidak o...
  • Scattered Polaroids Gallery (Tersebar)
    Scattered Polaroids Gallery (Tersebar)
    Sebuah flat bergaya Polaroid Galeri di mana item-item (di sini saya gunakan foto) yang tersebar secara acak dalam sebuah wadah (Container). ...
  • Karma - Creative Landing Page Blogger Templates
    Karma - Creative Landing Page Blogger Templates
    Karma adalah template untuk blogger yang menyediakan banyak fitur yang luar biasa yang paling canggih. Template ini sangat maju, mungkin sed...
Diberdayakan oleh Blogger.

Labels

  • Android
  • Blogging
  • CSS
  • Facebook
  • Game
  • jQuery
  • Komputer
  • Lain-Lain
  • Photoshop
  • SEO
  • Software
  • Template
  • Twitter
  • Widget

Blog Archive

  • ▼  2014 (101)
    • ►  Juli (5)
    • ►  Juni (10)
    • ►  Mei (12)
    • ►  April (12)
    • ►  Maret (11)
    • ►  Februari (14)
    • ▼  Januari (37)
      • Pop Up Facebook Like Box With Lightbox Effect Vali...
      • Dynamic Mag Responsive Blogger Template
      • Adobe Photoshop Cs6
      • Headline Breaking News di Blog
      • Faster Vsand Blogger Templates SEO Valid HTML5 Res...
      • Loading Page Blogger
      • Floating Social Share Buttons for Blogger
      • Recent Comment Blogger Valid HTML5
      • Recent Posts Slider With Navigation
      • List Icon Font Awesome dan CSS Value Content V4.0.3
      • Tips SEO Dari Google [Download]
      • Karma - Creative Landing Page Blogger Templates
      • Compact News Previewer with jQuery
      • Polaroid Photobar Gallery with jQuery
      • Hover and Click Trigger for Circular Elements with...
      • CSS3 Lightbox
      • jQuery Image Slider With Three Panels and 3D Look
      • Accordion Style Slider with Valid CSS3
      • Slide Show jQuery Carousel
      • Menambah Tombol Open / Close pada Blog
      • 7 Apps Android Untuk Pengguna Blogger
      • Timely Alarm Clock - Bitspin Sekarang Gratis Setel...
      • Aplikasi Kamera Android Terbaik Pilihan 2014
      • Icon Social Share dengan Tooltip
      • Membuat Google Custom Search Engine di Blogger
      • Popular Posts Multi Color Flat UI
      • Photo Collage Max 2.2.5.6 Full Crack
      • Blackberry Messenger for PC
      • RespoAum Responsive Blogger Template
      • Elegant Photography Blogger Template
      • News Pro Responsive Blogger Template
      • iNews 2014 Responsive Blogger Template
      • Label Cloud CSS Blogger (Versi Hijau)
      • Widget Kotak Berlangganan With Sosial Icons
      • Cara Mengaktifkan dan Setting Robot.txt Pada Blog
      • Membuat Breadcrumbs Terindex Oleh Google
      • Cara Membuat Menu Navigasi Vertical Di Blog
  • ►  2013 (71)
    • ►  Desember (13)
    • ►  November (6)
    • ►  Agustus (1)
    • ►  Juni (8)
    • ►  Mei (33)
    • ►  April (10)

Labels

  • Android
  • Blogging
  • CSS
  • Facebook
  • Game
  • jQuery
  • Komputer
  • Lain-Lain
  • Photoshop
  • SEO
  • Software
  • Template
  • Twitter
  • Widget

Labels

  • Android
  • Blogging
  • CSS
  • Facebook
  • Game
  • jQuery
  • Komputer
  • Lain-Lain
  • Photoshop
  • SEO
  • Software
  • Template
  • Twitter
  • Widget

About Me

Unknown
Lihat profil lengkapku or visit on

© Artikel Copas 100% powered by Blogger.com.
All Right Reserved.