lightfly: Opera und Cursor verändern

Hallo

Ich habe ein kleines Javascript, das aufgerufen wird wenn man die Maus auf einem Div herumschiebt, es soll dann den Mauscursor dabei verändern:

im HTML:

<div id="sdeAA">&nbsp;</div>

Javascript das im onload ausgeführt wird:

document.getElementById('sdeAA').onmousemove = changeCursor;

Die funktion changeCursor ist folgendermassen definiert:

changeCursor = function()
  {
     this.style.border = '1px solid green';
     this.style.cursor = 'move';
  }

Das heisst als wenn ich mit der Maus über mein Div Hoverer müsste sich der Mauszeiger in ein Move-Cursor ändern. Das tut er auch im Firefox, sowie im Internet Explorer 6. Der Opera hingegen zickt herum und verändert den Mauszeiger erst wen ich das zweite Mal über das Div Hovere. Also Hovere darüber -> nichts passiert, ich verlasse mit der Maus mein Div und Hovere erneut darüber -> Mauszeiger verändert sich, d.h. funktioniert.

Gibt es eine Möglichkeit das das Script im Opera auch beim ersten mal Hovern funktioniert? z.b. den Browser irgendwie dazu zu kriegen den Mauszeiger neu zu Zeichnen?

Anmerkung: Ich muss es mit Javascript Lösen, da im Endresultat sich der Zeiger innerhalb des Divs, je nachdem wo man sich im Div befindet, nicht nur in einen Move-Cursor verändern soll, sondern auch z.b. in einen Resize-Cursor.

Für Lösungsansätze bedanke ich mich schon mal im Voraus :)

gruss

lightfly

  1. Hi,

    blöde Idee, aber ruf doch in "changeCursor()" "changeCursor()" nochmal auf ... aber pass auf dass es keine Endlosschleife gibt.

    Eine gute Lösung is das sicher nicht, aber evtl. funktionierts erstmal ... ich würds mal probieren.

    1. Hi,

      blöde Idee, aber ruf doch in "changeCursor()" "changeCursor()" nochmal auf ... aber pass auf dass es keine Endlosschleife gibt.

      Eine gute Lösung is das sicher nicht, aber evtl. funktionierts erstmal ... ich würds mal probieren.

      Hat leider nicht funktioniert - ergenbnis bleibt das gleiche, erst beim zweiten mal Hovern hab ich das richtige Ergebnis.

  2. Hallo,

    Anmerkung: Ich muss es mit Javascript Lösen, da im Endresultat sich der Zeiger innerhalb des Divs, je nachdem wo man sich im Div befindet, nicht nur in einen Move-Cursor verändern soll, sondern auch z.b. in einen Resize-Cursor.

    Die betr. Bereiche innerhalb des Div lassen sich nicht per CSS
    "beschreiben" bzw. mit dem "Resize-Cursor" versehen?

    Grüsse
    Cyx23

    1. Die betr. Bereiche innerhalb des Div lassen sich nicht per CSS
      "beschreiben" bzw. mit dem "Resize-Cursor" versehen?

      Leider nicht, weils in dem Div nichts (ausser einem &nbsp;) drin hat.

      1. Hallo,

        Leider nicht, weils in dem Div nichts (ausser einem &nbsp;) drin hat.

        Ist doch egal was bzw. ob überhaupt was im Div steht.
        Du gibst das hover doch auf das Div, nicht den Inhalt.

        Also per CSS z.B. so:

        #bspdiv{ width:100px; height:25px;}
        #bspdiv:hover{ cursor:crosshair;}

        Zack fertig.

        Grüße, Matze

        1. #bspdiv{ width:100px; height:25px;}
          #bspdiv:hover{ cursor:crosshair;}

          wie schon erwähnt:

          Anmerkung: Ich muss es mit Javascript Lösen, da im Endresultat sich der Zeiger innerhalb des Divs, je nachdem wo man sich im Div befindet, nicht nur in einen Move-Cursor verändern soll, sondern auch z.b. in einen Resize-Cursor.

          Es funktioniert ja auch in Firefox und im Internet Explorer, das heisst mein Ansatz kann nicht Grundlegendfalsch sein. Da is eben nur dieser fiese "Bug" im Opera....

          Aber Danke für deine Hilfe.

          1. Hallo,

            Anmerkung: Ich muss es mit Javascript Lösen, da im Endresultat sich der Zeiger innerhalb des Divs, je nachdem wo man sich im Div befindet, nicht nur in einen Move-Cursor verändern soll, sondern auch z.b. in einen Resize-Cursor.

            Sry, mal wieder nur halb gelesen.
            Wie wär es denn, wenn du ein transparentes GIF in der Größe des Kontainers plazierst, dann mit area shape aufteilst und die Cursor auf die einzelnen areas legst?

            So umgehst du zumindest JavaScript.

            Grüße, Matze

        2. Hallo,

          #bspdiv{ width:100px; height:25px;}
          #bspdiv:hover{ cursor:crosshair;}

          das könnte doch wohl zunächst auch einfach so ausschauen:

            
          #bspdiv{ width:100px; height:25px;cursor:move;}  
          
          

          Allerdings sehe ich bei der ganzen Geschichte noch nicht das Problem,
          wird das Div per dhtml bewegt?

          Sonst hilft sowas vmtl.:

            
          window.onload=function(){  
           document.getElementById('sdeAA').onmousemove = changeCursor;  
           document.getElementById('sdeAA').onmouseover=changeCursor;  
                                   }  
            
            
            changeCursor = function()  
            {  
            this.style.cursor = 'move';  
               this.style.border = '1px solid green';  
            
            }  
          
          

          Grüsse
          Cyx23

          1. wird das Div per dhtml bewegt?

            Nicht nur bewegt, sondern auch vergrössert bzw verkleinert. Darum brauch ich ja auch innerhalb des Divs verschiedene Bereiche, die jeweils einen mittels verändertem Cursor signalisieren, das man das Objekt nun Verschieben/Resizen kann. Aber wie gesagt, das Funktioniert eigentlich ja schon - das einzige problem ist das der opera den cursor nicht richtig darstellt, bzw erst beim zweiten mal drüber hovern.

            Folgenden Würgaround hab ich noch versucht:

            sobald der cursor in einen bereich wechselt, bei dem der cursor wechseln sollte, das div per style.display erst mal auszublenden (none) und dann wieder anzeigen (block) um einen onmouseover zu erzwingen (weil mit dem funktionierts komischerweise) -> das funktioniert, ist nicht schön, abers tut ;)

            1. Hallo,

              sobald der cursor in einen bereich wechselt, bei dem der cursor wechseln sollte, das div per style.display erst mal auszublenden (none) und dann wieder anzeigen (block) um einen onmouseover zu erzwingen (weil mit dem funktionierts komischerweise) -> das funktioniert, ist nicht schön, abers tut ;)

              Hatte ähnliche Methoden schon für alte Konqueror genutzt, war damals
              wohl visibility. Bei deinem Beispiel schien aber das vorher gepostete
              Script mit ..over _und_ ..move besser geeignet.
              Aber wenn du jetzt einen Weg gefunden hast und keine unerwünschten
              Flimmereffekte auftreten ist es ja alles ok :-)

              Grüsse

              Cyx23