Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/09/2014, 19:40
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Menu autoselectivo en desplazamiento vertical

En realidad, el cambio se produce cuando la división es visible al momento de hacer scroll. Recuerda que la condición hace que precisamente se controle eso. Prueba haciendo más altas a las divisiones para que lo compruebes.

Con respecto a lo otro (las anclas o almohadillas), no lo había añadido porque no era el fin del ejemplo, pero sí, es lo que deberías de usar, aunque también podrías hacerlo sin ellas, pero usándolas, se te hará todo más fácil.

Saludos

Edito: Creo que ya sé a qué te referías. Quieres que el cambio se de cuando la parte superiore de la sección o división quede encuadrada en la parte superior de la ventana. Bastaría con que, a la resta que hay en la condición, le sumes la altura interna de la ventana (sin la barra de direcciones, de favoritos, etc., solo el contenido) menos la altura del menú. El código quedaría así:

Código Javascript:
Ver original
  1. var divs = document.querySelectorAll("div"),
  2.     opts = document.querySelectorAll("nav li"),
  3.     nav = document.querySelector("nav"),
  4.     heightNav = parseInt(window.getComputedStyle(nav, null).height),
  5.     totDivs = divs.length,
  6.     totOpts = opts.length,
  7.     fn = function(j){
  8.         for (var i = 0; i < totOpts; i++){
  9.             opts[i].style.background = i == j ? "steelblue" : "lightsteelblue";
  10.         }
  11.     };
  12.  
  13. window.addEventListener("scroll", function(e){
  14.     for (var i = 0; i < totDivs; i++){
  15.         if (this.scrollY > (divs[i].offsetTop - document.documentElement.clientHeight) + (this.innerHeight - heightNav)){
  16.             fn(i);
  17.         }
  18.     }
  19. }, false);

DEMO

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 19/09/2014 a las 20:09 Razón: Actualización