Saat Anda menggulir ke bawah halaman, item menu yang aktif berubah. Bagaimana ini dilakukan?
95
Ini dilakukan dengan mengikat ke acara gulir wadah (biasanya jendela).
Contoh cepat:
// Cache selectors
var topMenu = $("#top-menu"),
topMenuHeight = topMenu.outerHeight()+15,
// All list items
menuItems = topMenu.find("a"),
// Anchors corresponding to menu items
scrollItems = menuItems.map(function(){
var item = $($(this).attr("href"));
if (item.length) { return item; }
});
// Bind to scroll
$(window).scroll(function(){
// Get container scroll position
var fromTop = $(this).scrollTop()+topMenuHeight;
// Get id of current scroll item
var cur = scrollItems.map(function(){
if ($(this).offset().top < fromTop)
return this;
});
// Get the id of the current element
cur = cur[cur.length-1];
var id = cur && cur.length ? cur[0].id : "";
// Set/remove active class
menuItems
.parent().removeClass("active")
.end().filter("[href='#"+id+"']").parent().addClass("active");
});
Lihat di atas beraksi di jsFiddle termasuk animasi scroll.
menuItems = topMenu.find("a"),
kemenuItems = topMenu.find("a").slice(0,4),
, ganti4
dengan [link di halaman Anda - 1].Cukup periksa Kode dan Penembak Jitu saya dan tautan demo:
demo langsung
Tampilkan cuplikan kode
sumber
Sekadar melengkapi jawaban @Marcus Ekwall. Melakukan seperti ini hanya akan mendapatkan tautan jangkar. Dan Anda tidak akan mengalami masalah jika Anda memiliki campuran tautan jangkar dan tautan biasa.
Pada dasarnya saya diganti
oleh
Untuk mencocokkan semua tautan dengan jangkar di suatu tempat, dan mengubah semua yang diperlukan untuk membuatnya bekerja dengan ini
Lihat aksinya di jsfiddle
sumber
Jika Anda ingin jawaban yang diterima berfungsi di JQuery 3, ubah kode seperti ini:
Saya juga menambahkan coba-tangkap untuk mencegah javascript mogok jika tidak ada elemen oleh id itu. Jangan ragu untuk meningkatkannya lebih banyak lagi;)
sumber