JavaScript: Mouse Event deaktivieren?

rown

Mitglied
Hallo Leute,

das Thema von gestern habe ich ein wenig verrissen... es waren dann einfach zuviele Zeilen. Ich habe das Thema geschlossen, Ordnung gemacht und mir mein Problem nochmal genau angeschaut. Auf der Testseite http://www.r-own.de/index2.php ist ein grünes Rechteck. Bei einem MouseOver wird i von 0-9 hochgezählt und bei =9 wieder gleich 0. Alles klappt soweit, solange ich nach dem MouseOver bis Ablauf von i innerhalb des Bereichs bleibe. Wenn ich vorher den Bereich verlasse, springt er zwar wieder in MouseOver, da er ja noch nicht fertig ist, aber das ist auch kein Problem. Wenn allerding innerhalb der Ablaufzeit zweimal oder gar drei- viermal ein MouseoverSignal gesendet wird, dann zählt er auch zwei- dreimalmal von 0-9. Das will ich nicht. Ich würde nun gerne innerhalb des if-Befehles das Mouse.Event.OnMouseOver deaktivieren, um es im else-Befehl wieder zu aktivieren. Leider habe ich keine Ahnung wie ich das bewerkstelligen kann.
HTML:
<body>
	<div id="gruen">
		<div id="rechteck_gruen" onmouseover="gruen_over()" onmouseout="gruen_out()"></div>
		<div id="ausgabe_gruen_1"> </div>
		<div id="ausgabe_gruen_2"> </div>
	</div>
	</body>
	
<script type="text/javascript">
  var i=0;
  var is_Ani=false;
	
  function gruen_over() 
  {	
  if (i<9)
	{
	isAni=true;
	i++;
	document.getElementById("ausgabe_gruen_1").innerHTML = "i: " + i + ";  is_Ani: " + isAni + "  !!MouseOver jetzt deaktiviert!!";
	setTimeout("gruen_over()",200);
	}
  else 
	{
	isAni=false;
	i=0
	document.getElementById("ausgabe_gruen_1").innerHTML = "i: " + i + ";  is_Ani: " + isAni + "  !!MouseOver wieder aktiviert!!";
	}
	document.getElementById("ausgabe_gruen_2").innerHTML = ""
	document.getElementById("ausgabe_gruen_2").innerHTML = "zuletzt aufgerufenes Mouse-Event: mouseOVER"
  }
  
  function gruen_out() //eigentlich unnütz, nur zum verdeutlichen
	{
	document.getElementById("ausgabe_gruen_2").innerHTML = ""
	document.getElementById("ausgabe_gruen_2").innerHTML = "zuletzt aufgerufenes Mouse-Event: mouseOUT"
	}
  </script>

Es wäre großartig, wenn mir jemand den richtigen Befehl nennen kann und wie ich den da einbauen muss.

Grüße
Rown
 
So klappt das bei mir...
Ich bin mir nicht ganz sicher, aber ich denke du kannst Events, die als Attribute im HTML-Tag selbst festgelegt sind nicht entfernen.. Bitte um Korrektur falls ich falsch liege!

HTML:
<body>
	<div id="gruen">
		<div id="rechteck_gruen" style="border: 1px solid #0d0; width: 300px;height: 200px;" onmouseout="gruen_out()"></div>
		<div id="ausgabe_gruen_1" style="border: 1px solid #0d0; width: 300px;height: 200px;"> </div>
		<div id="ausgabe_gruen_2" style="border: 1px solid #0d0; width: 300px;height: 200px;"> </div>
	</div>
	</body>
Javascript:
  var e_rg;
  var f_go;
  var i=0;
  var is_Ani=false;
  
  window.onload = function(){
  
    e_rg = document.getElementById('rechteck_gruen');
    f_go = function(){
      gruen_over(e_rg);
    }
    
    if(e_rg.attachEvent){
      e_rg.attachEvent( "onmouseover", f_go );
    } else {
      e_rg.addEventListener( "mouseover", f_go, false );
    }
  }
  	
  function gruen_over(element){	
    removeEvent(element, "mouseover", f_go, false);
    if (i<9){
      isAni=true;
      i++;
      document.getElementById("ausgabe_gruen_1").innerHTML = "i: " + i + ";  is_Ani: " + isAni + "  !!MouseOver jetzt deaktiviert!!";
      setTimeout(function(){
        gruen_over(element);
      },200);
    } else {
      addEvent(element, "mouseover", f_go, false);
      isAni=false;
      i=0
      document.getElementById("ausgabe_gruen_1").innerHTML = "i: " + i + ";  is_Ani: " + isAni + "  !!MouseOver wieder aktiviert!!";
      document.getElementById("ausgabe_gruen_2").innerHTML = ""
      document.getElementById("ausgabe_gruen_2").innerHTML = "zuletzt aufgerufenes Mouse-Event: mouseOVER"
    }
  }
  
  function addEvent(element, type, fn, bubbles){
    if(element.attachEvent){
      element.attachEvent("on"+type, fn);
    } else {
      element.addEventListener(type, fn, bubbles);
    }
  }
  
  function removeEvent(element, type, fn, bubbles){
    if(element.detachEvent){
      element.detachEvent("on"+type, fn);
    } else {
      element.removeEventListener(type, fn, bubbles);
    }
  }
  
  function gruen_out(){
  	document.getElementById("ausgabe_gruen_2").innerHTML = ""
  	document.getElementById("ausgabe_gruen_2").innerHTML = "zuletzt aufgerufenes Mouse-Event: mouseOUT"
  }
 
Zuletzt bearbeitet von einem Moderator:
Hallo Back2toxic,

schaue erst eben wieder hier rein, weil ich gestern ein wenig sauer aufgrund deines Kommentars "erst denken" war. Aber wie sich gerade zeigt, hattest du nicht mich damit gemeint. Das beruhigt mich. Werde mir gleich deine Sachen anschauen, aber da ich den Befehl "Objekt".onmouseover=null nicht gefunden habe, habe ich über nacht das hier geschrieben und das funktioniert ganz gut.

PHP:
var i_start=0;
  var i_fin=30;
  var i_speed=50;
  
  /*------------------*/
  
  var i_aaa=i_start;

  function over_ini_aaa (id, width, height)
	{if (i_aaa==i_start) {obj_aaa_id=id; obj_aaa_w=width; obj_aaa_h=height; over_aaa(); }}
	
  function over_aaa ()
	{if (i_aaa==i_start) {iteration_aaa();}}
	
  function iteration_aaa()
	{if  (i_aaa < i_fin) 
		 {i_aaa++; happen_aaa(); setTimeout("iteration_aaa()",i_speed);}
	else {i_aaa=i_start;}}
  
  function happen_aaa ()
	{
	style_aaa=document.getElementById(obj_aaa_id).style;
	style_aaa.width = parseInt((50/i_aaa)*Math.sin(i_aaa) + obj_aaa_w) + "px"; 
	style_aaa.height = parseInt((-50/i_aaa)*Math.sin(i_aaa) + obj_aaa_h) + "px";
	}

Bei mouseover wird die over_ini_aaa() gestartet. Die if-Abfrage an der Stelle ist noch überflüssig. Dann werden die Werte übernommen, weil er sie sich bei setTimeout irgendwie nicht merkt. Er springt in over_ini_aaa() und wenn i_aaa noch nicht abgelaufen, also 0 ist, dann springt er auch nicht in die interation_aaa. happen_aaa() macht dann das, warum das alles eigentlich geschrieben wurde.

Allerding habe ich jetzt ein Problem mit dem Bubbling, da ich in meiner eigentlichen Anwendung Buttons in der Box habe und diese bei einem mouseover auch wieder die over_ini_aaa starten (Was kein Stress ist solange i_aaa nicht abgelaufen ist, aber danach.) CPoly hat mir in meinem verrissenen Thread etwas dazu geschrieben, allerdings habe ich das noch nicht verstanden.

Und übrigen: "aaa" ist vorerst noch Platzhalter um da später eine Variable einzufügen. Gegenwertig arbeite ich noch mit "bbb" und "ccc", weil ich das auch noch nicht herausgefunden habe.

So jetzt lese ich erstmal deine Sachen.

Danke
Rown
 
Zurück