PoWl_238: Prüfen, ob ein Interval schon gestartet ist

Hi,

ich löse mit dem onscroll Event ein Interval aus, das mein floatingMenü Schritt für Schritt zur neuen Scroll-Position nachrückt. Sobald es die Position erreicht hat, wird das Interval per clearInterval zurückgesetzt.

Allerdings werden somit immer ganz ganz viele Intervalle gestartet, denn das onscroll Event wird ja beim Scrollen sehr oft ausgelöst. Ich kann zwar zuvor mit clearInterval das Interval zurücksetzen und dann neu setzen, allerdings fängt dann der Zähler mit der Verzögerung wieder erneut an zu zählen, das gibt dann hässliche Aussetzer.

Kann ich irgendwie prüfen, ob ein bestimmtes Interval schon am laufen ist? Ansonsten würde ich das mit einer zusätzlichen Variable machen, die beim ersten Start gesetzt und bei Erreichen der Endposition geleert wird.

mfg PoWl

  1. Hallo,

    ich löse mit dem onscroll Event ein Interval aus, das mein floatingMenü Schritt für Schritt zur neuen Scroll-Position nachrückt.

    warum das? Was hast du gegen position:fixed?

    Allerdings werden somit immer ganz ganz viele Intervalle gestartet, denn das onscroll Event wird ja beim Scrollen sehr oft ausgelöst.
    Kann ich irgendwie prüfen, ob ein bestimmtes Interval schon am laufen ist? Ansonsten würde ich das mit einer zusätzlichen Variable machen, die beim ersten Start gesetzt und bei Erreichen der Endposition geleert wird.

    Du könntest auch von setInterval() auf setTimeout() umsteigen. Das läuft grundsätzlich nur einmal, wenn man es nicht nicht neu anstößt.

    Abgesehen davon: Bist du wirklich sicher, dass so ein allmähliches Nachrücken sein muss? Ich finde, das stört.

    So long,
     Martin

    --
    Er war ein Mann wie ein Baum. Sie nannten ihn Bonsai.
    1. Ich finde so eine fließende Menü Animation ganz nett. Das Menü beschleunigt und bremst ab, es ist nicht einfach nur ein hartes stockendes Nachrücken. Das würde mich auch nerven.

      Einfach die Variable, in der das Interval gespeichert ist, auslesen, funktioniert nicht. Da erhalte ich eine Zahl, die mir angibt, wie oft da schon ein Interval gestartet wurde. Die wird folglich einfach immer größer. Manchmal, wenn ich den Browser ne Weile allein lasse und dann wieder öffne, nimmt diese sogar irgendwelche utopischen Werte wie 2342234 oder 95605 an..

      1. Hi,

        Ich finde so eine fließende Menü Animation ganz nett. Das Menü beschleunigt und bremst ab, es ist nicht einfach nur ein hartes stockendes Nachrücken. Das würde mich auch nerven.

        dann hast du mich falsch verstanden: Gerade dieses Nachgleiten finde ich störend. Entweder das Element scrollt normal mit dem Inhalt mit wie üblich, oder es bleibt fest und starr an seiner Position (daher hatte ich position:fixed als Alternative vorgeschlagen). Ohne Gleiten, ohne Ruckeln.
        Auch das "Soft-Scrolling" (im deutschen Windows: "Sanfter Bildlauf", teils auch "optimierter Bildlauf") finde ich ausgesprochen lästig.

        Einfach die Variable, in der das Interval gespeichert ist, auslesen, funktioniert nicht. Da erhalte ich eine Zahl, ...

        ... die keine numerische Bedeutung hat, sondern nur zum Wiedererkennen des internen Timer-Objekts dient, falls man clearTimeout() oder clearInterval() verwenden möchte (oder muss).

        So long,
         Martin

        --
        Ein Theoretiker ist ein Mensch, der praktisch nur denkt.
        1. [latex]Mae  govannen![/latex]

          dann hast du mich falsch verstanden: Gerade dieses Nachgleiten finde ich störend. Entweder das Element scrollt normal mit dem Inhalt mit wie üblich, oder es bleibt fest und starr an seiner Position (daher hatte ich position:fixed als Alternative vorgeschlagen). Ohne Gleiten, ohne Ruckeln.
          Auch das "Soft-Scrolling" (im deutschen Windows: "Sanfter Bildlauf", teils auch "optimierter Bildlauf") finde ich ausgesprochen lästig.

          Absolute Zustimmung. Sowas wird hier sofort deaktiviert, wie auch das weiche Scrollen in meinem Opera (aber ich bin da auch nicht die Norm; ich schalte eh alles ab; erste!! Einstellung bei einem frisch installierten Windows ist immer die Umstellung auf klassische Ansicht, klassisches Startmenü und Abschaltung sämtlicher Effekte)

          Um auf „nachziehende“ Navigation zurückzukommen: Dieser Effekt ist maximal in den ersten 2-3 Minuten nett, ich denke, spätestens dann würde ich entweder sie Seite verlassen oder JS deaktivieren, falls der Seiteninhalt wichtig genug ist.

          Cü,

          Kai

          --
          Even if you are a master of jQuery, you can only create mediocre (at best)
          scripts. The problem is that the authors you rely on have not mastered the
          DOM themselves. It's like one blind guy leading another off a cliff (D.Mark/clj)
          Foren-Stylesheet Site Selfzeug JS-Lookup
          SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
          1. Hallo,

            Auch das "Soft-Scrolling" (im deutschen Windows: "Sanfter Bildlauf", teils auch "optimierter Bildlauf") finde ich ausgesprochen lästig.
            Absolute Zustimmung. Sowas wird hier sofort deaktiviert, wie auch das weiche Scrollen in meinem Opera (aber ich bin da auch nicht die Norm; ich schalte eh alles ab; erste!! Einstellung bei einem frisch installierten Windows ist immer die Umstellung auf klassische Ansicht, klassisches Startmenü und Abschaltung sämtlicher Effekte)

            ACK! Und dann die Detailansicht im Explorer als Standard eingestellt, die Anzeige von versteckten und Systemdateien aktiviert. Dann noch unnötige Dienste wie DTC, DNS-Cache, Indexer, BITS, Remote-Desktop, Scheduler deaktivieren, und dann geht's schon allmählich.

            Um auf „nachziehende“ Navigation zurückzukommen: Dieser Effekt ist maximal in den ersten 2-3 Minuten nett

            Ja, aber auch nur dann, wenn man ihn zum ersten Mal sieht und sich eine Weile an der Spielerei erfreuen mag. Wenn mir sowas auf der dritten, vierten Seite unabhängig voneinander wieder begegnet, ist es auch keine 2..3 Minuten mehr "nett".

            Ciao,
             Martin

            --
            Warum können wir heute so sicher sagen, dass Gott keine Frau sein kann?
            Weil dann nach "Es werde Licht" der nächste Satz "Wie sieht denn das hier aus?!" gewesen wäre.
            1. [latex]Mae  govannen![/latex]

              ACK! Und dann die Detailansicht im Explorer als Standard eingestellt, die Anzeige von versteckten und Systemdateien aktiviert. Dann noch unnötige Dienste wie DTC, DNS-Cache, Indexer, BITS, Remote-Desktop, Scheduler deaktivieren, und dann geht's schon allmählich.

              Der erste Schritt danach ist TweakUI aus den Microsoft-Powertoys zu installieren (und dort noch mehr Effekte und Automationen abzuschalten, die Menüverzögerung und „balloon-tips“ zu deaktivieren und vieles mehr) :)

              Um auf „nachziehende“ Navigation zurückzukommen: Dieser Effekt ist maximal in den ersten 2-3 Minuten nett

              Ja, aber auch nur dann, wenn man ihn zum ersten Mal sieht und sich eine Weile an der Spielerei erfreuen mag. Wenn mir sowas auf der dritten, vierten Seite unabhängig voneinander wieder begegnet, ist es auch keine 2..3 Minuten mehr "nett".

              Ack. Ich habe selbst mal auf meiner Site herumgespielt und "nur" das Öffnen/Schließen eines Sub-Menüs leicht verzögert, schon nach sehr kurzer Zeit ging mir das so auf den Zeiger, daß ich es sofort wieder ausgebaut habe. Es empfiehlt sich also, ausgiebig auf der eigenen Site zu surfen, dann merkt man schnell, wie nervig diese ganze Effekthascherei in Wirklichkeit ist. Mir gehen zur Zeit diese blöden Popups auf den Zeiger, die beim Überfahren bestimmte Wörter in Text irgendwelche Werbelinks einblenden. Gut, zu 95% steht mein Opera eh auf JS:aus Cookies:aus Plugins:aus Referrer:aus, aber manchmal vergesse ich halt, es wieder abzuschalten, wenn ich doch irgendwo JS aktiviert hatte. Von seitlich ein- und ausfahrenden Werbe-Layern wollen wir gar nicht erst anfangen :)

              Ich will mein Web 0.9 wiederhaben!!

              Cü,

              Kai

              --
              Even if you are a master of jQuery, you can only create mediocre (at best)
              scripts. The problem is that the authors you rely on have not mastered the
              DOM themselves. It's like one blind guy leading another off a cliff (D.Mark/clj)
              Foren-Stylesheet Site Selfzeug JS-Lookup
              SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
              1. Ich will mein Web 0.9 wiederhaben!!

                So, du willst also wieder Herr über deine Maus werden.

                mfg Beat

                --
                ><o(((°>           ><o(((°>
                   <°)))o><                     ><o(((°>o
                Der Valigator leibt diese Fische
      2. Einfach die Variable, in der das Interval gespeichert ist, auslesen, funktioniert nicht. Da erhalte ich eine Zahl, die mir angibt, wie oft da schon ein Interval gestartet wurde. Die wird folglich einfach immer größer.

        Selbst wenn es so wäre, wieso geht das nicht? Wenn der Interval noch nicht gestartet ist, hat die Variabel keinen Wert, d.h. du musst nur prüfen ob dort etwas anderes als kein Wert steht.

        Struppi.

      3. Hallo PoWl_238,

        Einfach die Variable, in der das Interval gespeichert ist, auslesen, funktioniert nicht. Da erhalte ich eine Zahl, die mir angibt, wie oft da schon ein Interval gestartet wurde. Die wird folglich einfach immer größer. Manchmal, wenn ich den Browser ne Weile allein lasse und dann wieder öffne, nimmt diese sogar irgendwelche utopischen Werte wie 2342234 oder 95605 an..

        du musst beim Anlegen und nach dem clearInterval diese Variable auf z.B. Null setzen, dann kannst du prüfen, ob gerade ein Intervall läuft.

        Gruß, Jürgen

  2. Kann ich irgendwie prüfen, ob ein bestimmtes Interval schon am laufen ist?

    setInterval hat einen Rückgabewert, den du doch auch brauchst um ihn zu stoppen. Diesen Wert kannst du doch verwenden ob das zu prüfen.

    Struppi.