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);
}
});
Labels: JavaScript, jQuery, Lanjutan, Potongan
9 Comments:
oh ini ternyata code nya..
By Surga Kenari, at Friday, August 3, 2012 at 9:55:00 PM GMT+7
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
By Fahmi Athailla, at Friday, August 3, 2012 at 10:22:00 PM GMT+7
Coba utak atik dlu akh.... (y) :-bd
By Unknown, at Friday, August 3, 2012 at 10:27:00 PM GMT+7
keren sekaliii ^_^
By Beben Koben, at Saturday, August 4, 2012 at 11:52:00 AM GMT+7
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');
}
});
});
By Taufik Nurrohman, at Saturday, August 4, 2012 at 4:56:00 PM GMT+7
asik.. bisa berubah warna.. hampir sama dengan tutorial sebelumnya ya om.. tentang perpindahan halaman website..
By Unknown, at Saturday, August 4, 2012 at 10:29:00 PM GMT+7
buat blogazine cocok kayaknya :D
By Bayu Handono, at Saturday, August 4, 2012 at 11:17:00 PM GMT+7
kok di saya,
backgroundnya tdk fullscreen ?
By Unknown, at Sunday, August 5, 2012 at 7:39:00 PM GMT+7
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.
By Taufik Nurrohman, at Monday, August 6, 2012 at 12:34:00 PM GMT+7
Post a Comment
<< Home