Re zup17,
Le code qui te semble poser un problème sert en effet à mettre en actif ton menu à gauche (1-2-3) et il fonctionne.
Alors, du coup, tes messages d'erreurs sont-ils vraiment un problème ?
Ensuite, si tu cherches à les comprendre, après un examen un peu plus approfondi, je pense que le problème vient que
$( '.et_pb_scroll_' + $i ).offset()
est différent de null uniquement quand l'élément est présent dans la window (la partie visible, à l'écran, du site).
Si tu es sur 2, 1 et 3 sont peut-être hors de la window, et leur offset est null.
Mais cette partie du code est appelée à chaque event de scroll, c'est à dire à chaque mouvement de molette et teste chaque élément de ta page (le 1, le 2, le 3, qu'ils soient visible ou non):
1 2 3 4 5 6 7 8 9 10 11 12 13
|
for ( var $i = 0; $i <= $( '.side_nav_item a' ).length - 1; $i++ ) {
if ( $( window ).scrollTop() + $( window ).height() == $( document ).height() ) {
$last = $( '.side_nav_item a' ).length - 1;
$( '.side_nav_item a' ).removeClass( 'active' );
$( 'a#side_nav_item_id_' + $last ).addClass( 'active' );
} else {
if ( $( this ).scrollTop() >= $( '.et_pb_scroll_' + $i ).offset().top - $side_offset ) {
$( '.side_nav_item a' ).removeClass( 'active' );
$( 'a#side_nav_item_id_' + $i ).addClass( 'active' );
}
}
} |
le premier test sert à savoir si tu es en bas, et à activer le dernier item de menu, sinon, ben on active l'item du menu dont l'offset est inférieur au scrollTop de la window.
Si tu veux éviter le message d'erreur, test un truc comme ça:
1 2 3 4 5 6 7 8 9 10
|
...
} else {
if (typeof $( '.et_pb_scroll_' + $i ).offset() != "undefined") {
if ( $( this ).scrollTop() >= $( '.et_pb_scroll_' + $i ).offset().top - $side_offset ) {
$( '.side_nav_item a' ).removeClass( 'active' );
$( 'a#side_nav_item_id_' + $i ).addClass( 'active' );
}
}
} |
Je suis pas sûr à 100% de mon test, normalement je le testerai dans le code mais là...
A toi de voir le meilleur moyen de tester si $( '.et_pb_scroll_' + $i ).offset() est différent de null, c'est à dire si $( '.et_pb_scroll_' + $i ) est présent à l'écran.
Mais encore un fois, un tel test est plus propre et une bonne pratique, mais il n'est pas essentiel au bon fonctionnement de ton thème.
Partager