Rolf B: Ich throttle

Beitrag lesen

Hallo Gunnar Bittersmann,

ich bin mir nicht sicher, ob ich das gleiche "funktioniert nicht" erlebe wie Du. Ich sehe nämlich im "throttle" Beispiel gar keine Pfeilchen. Wenn ich aber dorthin klicke, wo sie sein sollten, scrollt das Menü.

Wenn ich mit der Tab-Taste durchlaufe und focusin zuschlägt, erfolgt das Scrollen nicht immer smooth. Nur bei kleinen Scrollmengen. Beim Sprung von Prodigy nach SNW dagegen gibt's einen Sprung.

Edit 1: Ok, das Scrollen beim "dahin klicken wo der Pfeil ist" dürfte am focusin liegen - ich klicke eine Haaresbreite eines Titels an und der wird vom focusin-Handler ins Blickfeld gerollt.

Edit 2: Deine toogleScrollButtonsThrottled-Funktion ruft throttle(fn, time) auf. Allerdings tut throttle nichts, sondern liefert eine verthrottlete Funktion zurück, die Du dann an Stelle der unverthrottleten Funktion verwenden kannst. Es funktioniert also nicht, diese Funktion

function toogleScrollButtonsThrottled() {
	throttle(toogleScrollButtons, 200);
}

als Eventhandler zu setzen. Du müsstest sie im addEventListener als Funktion aufrufen, und Du müsstest das Ergebnis von throttle zurückgeben. Das ist aber unnötige Mühe, mach es so:

const toogleScrollButtonsThrottled = throttle(toogleScrollButtons, 200);

Jetzt gehen nur die Pfeile nicht mehr weg.

Edit 2: Was vermutlich daran liegt, dass die Chance hoch ist, dass der letzte Aufruf von toggleScrollButtonsThrottled zu einem Throttling führt. Entweder baust Du in den setTimeout-Aufruf in throttle einen "Nachklapperer" ein, der die Funktion ein letztes Mal aufruft nachdem gethrottelt wurde, oder Du brauchst ein zweites Event, dass das Ende des Scrollings erkennt.

Der Nachklapperer führt dann aber zum gleichen Verhalten wie das Debouncing - der Pfeil verschwindet erst nach einer Verzögerung. Du musst also vermutlich irgendwie anders erkennen, dass Du am Anschlag angekommen bist.

Die Eventhandlerfunktion sollte daher in ihrer Ausführung beschränkt werden.

Wieso eigentlich. Warum findest Du es so schlimm, dass das hidden-Flag zu oft zugewiesen wird? Solange sich das Flag seinen Wert nicht ändert, dürfte das im Browser keine Aktion hervorrufen. Ohne Throttle scheint der Pen ganz prima zu funktionieren.

Rolf

--
sumpsi - posui - obstruxi