JS: Knoten im Kopf

  • Ja, so einen Knoten im Kopf und Brett vorm Kopf, dass mir noch nicht mal ein Titel einfällt. Ich versuche mal zu erklären was ich vorhabe, was ich habe und was ich möchte, bzw. wo ich hänge.

    Im Prinzip geht es um einen Counter, der die Ansicht von Unterkünften in der Unterkunftsliste zählen soll. Das aber nicht so pauschal, alle 20 wurden angezeigt, sondern welche auch wirklich sichtbar waren, also in Abhängigkeit vom Viewport.

    Grundvoraussetzung ist also schon mal ein Listener auf Scroll und Resize.

    Das an sich habe ich schon, also ich weiß, welches DIV vollständig im Viewport ist. Das soll nun aber nicht einfach so gewertet werden, sondern in Abhängigkeit der Dauer, wie lange es im Viewport war bzw. eben einen Mindestwert von z.B. 3 Sekunden.

    Und hier beginnt nun der Knoten, eigentlich genau bei der Dauer.

    Bisher wird immer validiert, wenn man scrollt oder der Viewport sich ändert. Das ist aber ein schlechter Ansatz, denn man scrollt ja nicht immer. Dennoch wird es benötigt, um überhaupt zu erkennen, ob ein DIV drinnen ist.

    Also kam die Idee das zusätzlich mit einem setInterval zu machen, der z.B. alle 250ms selbst validiert und eben einen Zähler dann um 250ms erhöht, wenn das DIV drinnen war. Rein gedanklich hört sich das nicht schlecht an, aber auch hier hänge ich irgendwie.

    Mir scheint, als ob das mit dem Listener dann irgendwie kollidiert bzw. doppelt gemoppelt ist. Hatte es auch schon mit einem Timestamp versucht, aber das geht gar nicht, denn das DIV kann ja kurz drinnen gewesen sein, dann 2 Minuten draussen und dann wieder kurz drinnen und wieder draussen, etwa wenn man schnell hoch und runter scrollt. Also Timestamp geht definitiv nicht. Daher der Ansatz mit dem Timer, der bei 0 beginnt und bei 3000ms enden soll.

    Kann einer meinen Knoten etwas entwirren?

    Danke und Gruß,
    Ingo

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Ich weiß echt nicht, das ist verhext. Ich schreibsel hier alles möglich aufs Papier, ja, extra Papier, weil man da mehr Gedanken reinmalen kann als im Editor und komme keinen Schritt weiter. Dann poste ich hier und nach dem Post denke ich mir, warum machst Du das nicht so? Und wieder, einen großen Schritt weiter. Es scheint erst mal zu laufen. Ob das Ressourcen-freundlich ist, keine Ahnung.

    Ich darf keinen Listener auf Scroll nehmen, denn der kollidiert in der Tat. Den auf Resize brauche ich aber, wenn sich der Viewport ändert.

    Also den für Resize auf 50ms gesetzt, damit der eine Änderung erkennt und dann die eigentliche Validierung per setInterval mit 100ms. Also wird alle 100ms geprüft, was im Viewport ist und bei den Divs, die drinnen sind, der Timer um 100ms erhöht. Bei mehr als 3s fliegen die raus bzw. in die Queue und der Rest wird "begutachtet". Die Queue wird dann alle 250ms abgearbeitet, die mir das Traking an die DB schickt.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Das könnte sein ;) Wobei, wenn ich die etwas fragen würde, wo ich noch nicht mal weiß, wie ich es fragen soll, dann würde die mich wahrscheinlich nur doof ansehen :pieks:

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • besser ist vielleicht ein hund:
    Katze: Sie lieben mich, sie pflegen mich, ICH muss ein Gott sein!
    Hund: Sie lieben mich, sie pflegen mich, es müssen Götter sein!

    Aber zum Thema kann ich leider nix beitragen. JS bin ich auf Kriegsfuss, kann es lesen aber nicht coden.

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!

  • Hund geht nicht, zu viel Arbeit, keine Zeit. Katze überlegte ich mir schon, aber DG-Wohnung und im Sommer immer alle Fenster offen. Will keine Feuerwehr rufen müssen, weil die auf dem Dach rumrennt und nicht mehr runter kommt :(

    Ansonsten. Ich stehe mit JS auch auf dem Kriegsfuß. Hier ist fast nichts Wissen, sondern fast alles try and error. Meine Seiten bestanden früher aus vielleicht max. 1% JS, und sie gingen auch ohne. Jetzt sind es ca. 20% und ohne geht fast nix mehr.

    Was ich mir nun noch zusammenbasteln muss ist etwas wie onExit, denn es kann ja sein, dass einer einen Link klickt oder die Seite schließt, bevor die Queue abgeschickt wurde. Die muss aber auf jeden Fall gesendet werden, egal was passiert.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(