Friday, August 3, 2012

Mini WayPoints

Mini WayPoints

Kode ini dibuat berdasarkan efek plugin jQuery WayPoints, meskipun Saya tidak tahu apakah plugin WayPoints berisi seperti ini atau tidak. Di sini Saya cuma mengambil ciri khasnya yang menarik: Setiap item navigasi terkait akan berubah warna saat seksi yang menjadi tujuannya mencapai tempat yang tepat.

Markupnya cuma terdiri dari sebuah elemen <nav> dan beberapa elemen <section> dengan ID yang ditentukan berdasarkan hash pada masing-masing tautan:

HTML

<nav>
    <li><a href='#home'>Home</a></li>
    <li><a href='#about'>About</a></li>
    <li><a href='#portfolio'>Portfolio</a></li>
    <li><a href='#contact'>Contact</a></li>
</nav>
<section id='home'> ... </section>
<section id='about'> ... </section>
<section id='portfolio'> ... </section>
<section id='contact'> ... </section>

CSS

nav {
  position:fixed !important;
  position:absolute;
  top:0;
  right:0;
  left:0;
  z-index:77;
}

nav ul {
  margin:0 0;
  padding:0 0;
  background-color:black;
  height:30px;
  overflow:hidden;
}

nav li {
  list-style:none;
  margin:0 0;
  padding:0 0;
  float:left;
  display:inline;
}

nav a {
  font:bold 11px/30px Arial,Sans-Serif;
  color:white;
  display:block;
  padding:0 15px;
  text-decoration:none;
}

nav a:hover {color:#ccc;}
nav a.active {background-color:darkblue;}

section {
  padding:30px;
  border-top:2px solid darkred;
  height:1000px;
}

#home {margin-top:30px;background-color:green;}
#about {background-color:skyblue;}
#portfolio {background-color:gray;}
#contact {background-color:orange;}

jQuery

$(function() {
    var navHeight = $('nav').outerHeight();
    $('nav a').on("click", function() {
        var hash = this.hash,
            target = $(hash).offset().top - navHeight;
        // Smooth scrolling...
        $('html,body').stop().animate({
            scrollTop: target
        }, 1500, function() {
            window.location.hash = hash;
            $(window).scrollTop($(hash).offset().top - navHeight);
        });
        return false;
    });
    $(window).on("scroll resize", function() {
        $('nav a').each(function() {
            var section = this.hash,
                sectionTop = $(section).offset().top,
                windowTop = $(window).scrollTop() + navHeight,
                sectionEnd = sectionTop + $(section).outerHeight() - navHeight;
            // Add or remove active class based on the section relating to the navigation
            if ((windowTop >= sectionTop) && (windowTop <= sectionEnd)) {
                $(this).closest('nav').find('.active').removeClass('active');
                $(this).addClass('active');
            } else {
                $(this).removeClass('active');
            }
        });
    }).trigger("scroll");

 // Scroll to section ID based on window.location.hash
    // The 'navHeight' was only used to add the jump spacing.
    if (window.location.hash) {
        var hash = window.location.hash;
        $(window).scrollTop($(hash).offset().top - navHeight);
    }

});

Lihat Demo

Labels: , , ,

9 Comments:

At Friday, August 3, 2012 at 9:55:00 PM GMT+7, Blogger Surga Kenari said...

oh ini ternyata code nya..

 
At Friday, August 3, 2012 at 10:22:00 PM GMT+7, Blogger Fahmi Athailla said...

Wah hampir sama kaya postingan yang mas taufic post dulu, cuma kan kalau yang dulu ngeSlidenya bisa kemana aja, wah keren nih...di coba dulu dehh :D

 
At Friday, August 3, 2012 at 10:27:00 PM GMT+7, Blogger Unknown said...

Coba utak atik dlu akh.... (y) :-bd

 
At Saturday, August 4, 2012 at 11:52:00 AM GMT+7, Blogger Beben Koben said...

keren sekaliii ^_^

 
At Saturday, August 4, 2012 at 4:56:00 PM GMT+7, Blogger Taufik Nurrohman said...

Sebenarnya fokusnya bukan pada efek animasinya tapi pada efek perpindahan warna menu navigasinya. Keunikannya di situ. Kalau halaman demo di atas digulung secara manual, maka warna menu akan berpindah-pindah sesuai dengan posisi seksi yang terkait dengan menu tersebut. Di sini Saya menggunakan perbandingan jarak gulungan layar dengan posisi atas panel dan posisi bawah panel:

$(window).on("scroll resize", function() {
$('nav a').each(function() {
var section = this.hash,
sectionTop = $(section).offset().top,
windowTop = $(window).scrollTop() + navHeight,
sectionEnd = sectionTop + $(section).outerHeight() - navHeight;
// Add or remove active class based on the section relating to the navigation
if ((windowTop >= sectionTop) && (windowTop <= sectionEnd)) {
$(this).closest('nav').find('.active').removeClass('active');
$(this).addClass('active');
} else {
$(this).removeClass('active');
}
});
});

 
At Saturday, August 4, 2012 at 10:29:00 PM GMT+7, Blogger Unknown said...

asik.. bisa berubah warna.. hampir sama dengan tutorial sebelumnya ya om.. tentang perpindahan halaman website..

 
At Saturday, August 4, 2012 at 11:17:00 PM GMT+7, Blogger Bayu Handono said...

buat blogazine cocok kayaknya :D

 
At Sunday, August 5, 2012 at 7:39:00 PM GMT+7, Blogger Unknown said...

kok di saya,
backgroundnya tdk fullscreen ?

 
At Monday, August 6, 2012 at 12:34:00 PM GMT+7, Blogger Taufik Nurrohman said...

Soalnya terbawa sama margin & padding elemen-elemen pembungkusnya. Supaya jadi full screen, semua kerenggangan harus dinetralkan, misalnya seperti ini:

html,
body,
#outer-wrapper,
#content-wrapper,
#main-wrapper,
#main,
.post-outer,
.post,
.post-body {
margin:0 0 !important;
padding:0 0 !important;
width:auto !important;
}


Tapi ini tidak mutlak, tergantung ID dan kelas masing-masing elemen.

 

Post a Comment

<< Home