Isam: onMouseover setTimeout

Hallo Experten,

nachdem ich im Archiv nun lage gesucht habe und mit selfhtml auch nich wirklich weiter komme (ich gebe zu nicht alle 10000 Seiten gelesen zu haben) wende ich mich doch an euch.

Ich möchte mit einem onMouseover-Effekt erreichen dass ein div-Bereich sich vertikal zu verschieben beginnt, was eingeschränkt auch schon klappt.
Das Problem ist, dass ich die Funktion mit setTimeout ansprechen will, daher die 1. Frage: Führt setTimeout eine Schleife oder der Befehl nur einmalig aus. Wie ichs gemacht hatte,

onMouseover="window.setTimeout('scroll(-1)', 300)"

hatte sich bei onMouseover der div einmal verrückt und dann war schluss. Ich möchte aber, dass der div solange rückt wie die Mouse drauf is.

2. Ich habe dem div keine Höhe zugewiesen (und möchte das auch nicht, weil ich die variabel halten mag), möchte den aber von seiner Höhe abhängig nicht unendlich lange verrücken, kann ich die Höhe dennoch irgendwie bestimmen?

document.getElementsByTagId("content".style.height)

liefert nur 0.

3. Bei onMouseout soll das ganze natürlich wieder abbrechen, muss ich dazu für den setTimeout ne globale Variable definieren um das ganze mit clearTimeout abzubrechen oder ... ihr merkt vielleicht, die Essenze der Timeout-Befehle hab ich noch nicht erfasst.

Hier noch grad meine Rückfunktion:
  function scroll (x)
  {
 var a;

a = document.getElementById("content").style.top;
 a = a.substr(0,a.indexOf("px")) - 15 * x;
 document.getElementById("content").style.top = a+ "px";
  }

Bin echt noch Anfänger also bitte nich böse sein, falls die Frage blöd geschrieben, oder sonst dämlich ist.

Ich bedanke mich schon mal
i.

  1. Hallo Isam,

    Das Problem ist, dass ich die Funktion mit setTimeout ansprechen will, daher die 1. Frage: Führt setTimeout eine Schleife oder der Befehl nur einmalig aus. Wie ichs gemacht hatte,

    nur einmal.

    onMouseover="window.setTimeout('scroll(-1)', 300)"

    onMouseOver ist in Verbindung von setTimeout kritisch, weil der Event dauerhaft feuert, solange die Maus eben drüber ist, was bedeutet, dass Deine scroll-Funktion auch mehr als einmal ausgelöst wird.

    hatte sich bei onMouseover der div einmal verrückt und dann war schluss. Ich möchte aber, dass der div solange rückt wie die Mouse drauf ist.

    Da Deine Funktion mit setTimeout nur einmal ausglöst wird, müsstes Du diese Funktion rekursiv (also in sich selbst) nochmal aufrufen. Eben dann wirst Du wahrscheinlich aber o.g. Problem haben.

    Bis hier hin...
    bluntburn

    --
    jeden Tag 'ne Currywurst...
    1. hi,

      Da Deine Funktion mit setTimeout nur einmal ausglöst wird, müsstes Du diese Funktion rekursiv (also in sich selbst) nochmal aufrufen.

      oder er greift gleich zu setInterval, das beim mouseover aufgerufen wird, und onmouseout wieder mit clearInterval beendet wird.

      Eben dann wirst Du wahrscheinlich aber o.g. Problem haben.

      dann muss er halt eine prüfung einbauen, an welcher position die bewegung stoppen soll, unabhängig davon, ob die maus noch über dem bereich ist oder nicht.

      gruss,
      wahsaga

      1. Hey ihr beiden,

        mit dem setInterval war ich inzwischen auch schon drauf gekommen, funzt problemlos!

        Vielen vielen Dank! Aber noch mal was grundsätzliches, kann ich ein Attribut von einem Objekt bestimmen, wenn ich es nicht eindeutig zugewiesen habe, zB. die Höhe eines div, wenn ich den bewusst variabel halten möchte?

        Grüße i.

        1. hi,

          Aber noch mal was grundsätzliches, kann ich ein Attribut von einem Objekt bestimmen, wenn ich es nicht eindeutig zugewiesen habe, zB. die Höhe eines div, wenn ich den bewusst variabel halten möchte?

          zunächst mal gilt: um eine css-eigenschaft mit js auslesen zu können, muss diese zuvor explizit gesetzt worden sein (je nach browser teilweise sogar explizit per zuweisung über das style-attribut in betreffenden html-element).

          wenn es um die höhe geht, die sich dynamisch aus der menge des inhalts ergeben hat, kannst du jedoch versuchen die eigenschaft offsetHeight des betreffeden objektes auszulesen.
          weiss allerdings nicht, welche browser das unterstützen - also im zweifelsfalle ausprobieren.

          gruss,
          wahsaga

          1. guten abend,

            weiss allerdings nicht, welche browser das unterstützen - also im zweifelsfalle ausprobieren.

            document.getElementById("content").offsetHeight

            Die aktuellsten Versionen von Netscape und IE machen das wunderbar mit. Habs eben ausprobiert, nur Opera spuckt einen Wert der einige Pixel daneben liegt aus, is aber auch nicht so dramatsch für mein Vorhaben.

            Ich bedanke mich ganz herzlich

            i.