Javascript fehler
bearbeitet von OrlokHallo Mely
Erstmal sorry, dass ich auf [deine andere Frage](https://forum.selfhtml.org/self/2015/nov/13/javascript-fehler/1654350#m1654350) bisher noch nicht geantwortet habe. ;-)
Du wolltest wissen, wie ich darauf gekommen bin, dass das Problem mit den von mir genannten Anweisungen zusammenhängen könnte…
Naja, da gibt es nicht viel dazu zu sagen:
- Die zu dem Wert von `$target.offset( ).top`{: .language-javascript} hinzugezählten ‚+2‘ wurden in deiner Funktion `onScroll` *nicht* berücksichtigt und erschienen mir davon abgesehen auch grundsätzlich sinnlos.
- Die `else`{: .language-javascript}-Anweisung wiederum schien auf den ersten Blick die einzig logische Ursache dafür zu sein, dass das mit der Link-Farbe nicht funktioniert hat, denn in deinem `click`-Handler hattest du ja die Anweisung `$(this).addClass('active')`{: .language-javascript} notiert, die *eigentlich* dafür sorgen sollte, dass der Link auch entsprechend eingefärbt wird. Es musste darum an deinem `scroll`-Handler liegen, der jedesmal (`else`{: .language-javascript}), wenn die `if`{: .language-javascript}-Bedingung *nicht* greift, automatisch die Klasse (*und somit die Farbe*) weggenommen hat.
> Gerade merke ich, dass das Problem ist zwar behoben, aber dass es neue Problem dadurch entsteht. Und zwar, dass wenn man die Seite neuladet mit F5 die Seite bleibt wo sie war, aber die Linkfarbe springt zu der Start.
Dass die Seite beim Neuladen an der Stelle bleibt wo sie war, dürfte am **Browser** liegen, der es sich gewissermaßen *merkt*, bis wohin die Seite gescrollt war. – *„It's not a bug, it's a feature!“*
Nun hast du aber in deinem HTML die Zeile `<a href="#index" class="active">Start</a>`{: .language-html}, die dafür sorgt, dass zunächst mal der *erste* Link in deinem Menü eingefärbt ist – was an und für sich auch sinnvoll ist, aber hier nun dazu führt, dass die Position in der Seite nach dem Neuladen mit der Link-Farbe nicht mehr übereinstimmt.
Du könntest nun natürlich *erzwingen*, dass die Seite beim Laden automatisch an den Anfang springt, wenn sie dort nicht schon ist, aber ich denke es wäre ***besser***, einfach die Farbe der Links entsprechend anzupassen.
Dazu bräuchtest du denke ich im Grunde nur beim Start die Funktion `onScroll` *manuell* aufrufen, wobei du diesen Aufruf in deine Handlerfunktion für `DOMContentLoaded` integrieren könntest:
~~~ javascript
document.addEventListener('DOMContentLoaded', function ( ) {
onScroll( ); // <-- manueller Aufruf beim Start
if (window.innerWidth < 500) {
var a = document.querySelectorAll('a.fancybox');
var len = a.length, i;
for (i = 0; i < len; i += 1) {
a[i].removeAttribute('class');
a[i].removeAttribute('href');
}
}
});
~~~
Habe es natürlich nicht getestet, aber das *sollte* funktionieren. ;-)
Viele Grüße,
Orlok