Diskuze: Zvýrazňování aktuální položky menu
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Vim, ze je pozde, ale proc to neudelat klasicky pomoci css a html. Staci jeden class.
Jedná se o One-Page, tj když uživatel scrolluje, mění se podbarevní aktuální položky v menu, které odpovídá aktuálnímu obsahu, to se čistě pomocí CSS neudělá .
bylo mi řečeno že offset() je již zastaralé a místo něho se používá position() které dává 2 hodnoty, top a left... tzn. ty potřebuješ position().top
jako další musíš porovnávat scroll okna vůči pozici bloku odshora až pozici odshora + výška ...
celkový script může vypadat třeba takto :
(mám jednotlivé sekce v divu #main a v section)
$("#main section").each(function(){
var a = $(window).scrollTop(); //kde se aktuálně nachází okno
var b = $(this).position().top; //jakou má pozici odshora aktuální selection
var vyskaMenu = $('nav').height(); //zjistí výšku mena
var vyskaSection = $(this).height(); //zjistí výšku section
if( ( (a + vyskaMenu + 15) > b ) && ( a < (b + vyskaSection) ) ) //přidáno 15px, jinak se ti bude přepínat přesně na hranu
{
$("nav ul li").removeClass('aktivni');
// + nastavení třídy správnému li v menu
}
});
takto nějak by to mohlo fungovat
Pomož si data atributy:
var body = $('body');
$('[data-activate]').each(function() {
var element = $(this);
var targetLink = $(element.data('activate'));
var scrollTop = body.scrollTop();
if (element.offset().top > scrollTop) {
targetLnk.addClass('active');
} else {
targetLnk.removeClass('active');
}
});
// HTML
<h1 data-activate="#javascript">JavaScript</h1>
Nezkoušel jsem to, ale myšlenka je z toho doufám patrná.
Zobrazeno 5 zpráv z 5.