# Prüfen ob Maustaste gedrückt ist



## SAMariter (2. Oktober 2010)

Hallo, ich bins mal wieder.

Ich möchte eine Funktion mit einem Event-Handler (onmousemove) starten. Diese Funktion soll aber nur dann ausgeführt werden, wenn gleichzeitig die linke Maustaste gedrückt wird. Somit müßte ich in meiner aufgerufenen Funktion als allererstes prüfen ob die Taste gedrückt ist. Geht das irgendwie**** Also nochmal zum verdeutlichen: ich brauche hier nicht den Event-Handler onmousedown sondern einen Befehl zum prüfen.

Danke.

CU Uli


----------



## SpiceLab (2. Oktober 2010)

Gibt nix, was nicht möglich wäre ;-)


event
button (Maustastencode, Microsoft)
which (Tastatur-/Maustastencode, Netscape)


----------



## SAMariter (2. Oktober 2010)

Oh, super, danke.

Ich habe das jetzt schon ein bissen anders gelößt, aber ich werde das auf jeden Fall noch mit "deinen" Methoden ausprobieren.

Nun aber noch ein weiterführendes Problem:

Ich habe diese Funktion mit dem onmousemove. In dieser Funktion soll immer die aktuelle Position des Mauszeigers ermittelt werden. Ich sitze nun bald schon ne stunde an diesem banalen problem, aber ich finde einfach keine Lösung... 

Ob relativ zum Objekt, dem Anzeigebereich oder des Browsers, ist mir eigentlich relativ egal, nur in allen Browsern sollte es funktionieren.

CU Uli


----------



## SpiceLab (2. Oktober 2010)

Hast du nicht die weiteren Eigenschaften des eben verlinkten event-Objekts überflogen?


----------



## SAMariter (2. Oktober 2010)

Nicht nur überflogen, sondern so ziemlich alles schon ausprobiert damit. Es will einfach nichts klappen. Ich glaube das ist einfach nicht die richtige Uhrzeit zum Programmieren.

ich habe in meiner aufgerufenen Funktion folgendes geschrieben.

alert(window.event.pageX);

das würde für mich sinn machen. Aber da tut sich rein garnichts. *grummel*

CU


----------



## SAMariter (2. Oktober 2010)

Ich glaube jetzt habe ichs:

zum rufen im DIV-Tag: 
onmousemove="rotationstart(event)"

und die Funktion:
function rotationstart(element) {
     alert(element.pageX);
}

Das scheint zu funktionieren.

CU


----------



## SpiceLab (2. Oktober 2010)

Wirklich alles ausprobiert?

Wenn ich dich richtig versteh, wandelst du einfach den anhängigen Beispielcode für screenX, screenY in clientX, clientY um 


```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Test</title>
<script type="text/javascript">
function Mausklick (Ereignis) {
  if (!Ereignis)
    Ereignis = window.event;
  alert("x-Wert: " + Ereignis.clientX + "px" + " / y-Wert: " + Ereignis.clientY + "px");
}

document.onclick = Mausklick;
</script>
</head><body>
<p>Klicken Sie irgendwo ins Dokument, um die Position auszugeben.</p>
</body>
</html>
```
bzw. mit dem onmousemove-Event:


```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Test</title>
<script type="text/javascript">
function Mausbewegung (Ereignis) {
  if (!Ereignis)
    Ereignis = window.event;
  alert("x-Wert: " + Ereignis.clientX + "px" + " / y-Wert: " + Ereignis.clientY + "px");
}

document.onmousemove = Mausbewegung;
</script>
</head><body>
<p>Bewegen Sie die Maus im Dokument, um die Position auszugeben.</p>
</body>
</html>
```


----------



## Quaese (2. Oktober 2010)

Hi,

ganz so trivial ist das Problem leider nicht. Du musst hier zum einen unterscheiden, welchen Browser du verwendest (IE und clientx/clientY, Nicht-IE pageX/pageY). Bei IEs musst du zusätzlich beachten, die gescrollten Bereiche (scrollLeft/scrollTop) zu addieren.

Weiterhin musst du noch testen, in welchem Modus sich ein IE befindet, um das richtige body-Objekt zu verwenden.

Beispiel:

```
<html>
<head>
<title>Test</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <!--
function hMouseMove(objEvt){
  var objMouse = {};
  objMouse.x = (window.event)? (window.event.clientX+objBody.scrollLeft) : objEvt.pageX;
  objMouse.y = (window.event)? (window.event.clientY+objBody.scrollTop) : objEvt.pageY;

  document.getElementById("out_id").innerHTML = "(" + objMouse.x + ", " + objMouse.y + ")";
}

window.onload = function(){
  // Passendes Body-Objekt ermitteln
  if(document.all && !window.opera)
    objBody =(window.document.compatMode == "CSS1Compat")? window.document.documentElement : window.document.body || null;
  else
    objBody = document.documentElement;

  document.onmousemove = function(evt){
    hMouseMove(evt);
  }
}
 //-->
</script>
</head>
<body>
  <div id="out_id"></div>
</body>
</html>
```
Ciao
Quaese


----------



## SAMariter (2. Oktober 2010)

danke für eure antworten. Nur muß ich euch leider sagen, das genau das was Ihr da geschrieben habt nicht funktioniert. Die beispiele habe ich im Internet zu hauf gefunden. die nehmen alle folgendes als Auslöser für die Positionsermittlung:

document.onmousemove = Mausbewegung;

Das problem scheint jedoch zu sein, das das nicht gleichzeitig mit meinem Objekt angehängten Event-Handler onmousemove funktioniert. Da hat sich die gemessene Position des Mauszeigers nicht mehr verändert solnage ich in dem Objekt rumgefahren bin. Bin ich aus dem Objekt raus, und an einer anderen Stelle wieder rein, zeigt der die Position an, an der ich in das Objekt rein bin, die bleibt dann aber wieder gleich. ich muß also wirklich mit dem vom Objekt ausgleösten onmousemove die Position ermitteln und das geht eben nur mit dem wie ich es oben weiter geschrieben habe.

@Quaese: danke für die Antwort, die unterschiedlichen "Messverfahren" habe ich durch eine Browserweiche berücksichtigt. Und das dazuzählen beim Scrollen kann ich in meinem Fall vernachlässigen, da ich nur die Richtung der Mausbewegung brauche also immer relativ zur letzten Pos.

CU Uli


----------



## SAMariter (2. Oktober 2010)

Damit ihr mal wisst wovon wir hier überhaupt reden:

http://www.mehr-autoteile.de/wuerfel.shtml

das funktioniert im moment jedoch erst im Firefox und Opera. IE noch nicht und andere habe ich noch nicht getestet.

Viel Spaß beim drehen ;-)

CU Uli


----------



## Quaese (2. Oktober 2010)

Hi,

so ganz verstehe ich dein Problem nicht.

Folgendes Codefragment funktioniert bei mir (IE und Non-IE) und zeigt die aktuelle Cursorposition über dem Zielelement an.

```
<html>
<head>
<title>Test</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <!--
function hMouseMove(objEvt){
  var objMouse = {};
  objMouse.x = (window.event)? (window.event.clientX+objBody.scrollLeft) : objEvt.pageX;
  objMouse.y = (window.event)? (window.event.clientY+objBody.scrollTop) : objEvt.pageY;

  // Falls eine Objekt-Referenz in globaler Variablen gespeichert ist -> Offset in Element ausgeben
  if(objOver!=null){
    document.getElementById("out_id").innerHTML = "(" + (objMouse.x-objOver.offsetLeft) + ", " + (objMouse.y-objOver.offsetTop) + ")";
  }
}

// Speichert die Referenz des Objektes, wenn sich die Maus daraüber befindet,
// sonst null
var objOver = null;

window.onload = function(){
  // Passendes Body-Objekt ermitteln
  if(document.all && !window.opera)
    objBody =(window.document.compatMode == "CSS1Compat")? window.document.documentElement : window.document.body || null;
  else
    objBody = document.documentElement;

  document.onmousemove = function(evt){
    hMouseMove(evt);
  }

  var objTmp = document.getElementById("overDiv");

  if(objTmp.addEventListener){
    // Referenz des Objektes an globale Variable zuweisen
    objTmp.addEventListener("mouseover", function(){ objOver=objTmp;}, false);
    // null an globale Variable zuweisen
    objTmp.addEventListener("mouseout", function(){ objOver=null;}, false);
  }else if(objTmp.attachEvent){
    // Referenz des Objektes an globale Variable zuweisen
    objTmp.attachEvent("onmouseover", function(){objOver=objTmp;});
    // null an globale Variable zuweisen
    objTmp.attachEvent("onmouseout", function(){objOver=null;});
  }
}
 //-->
</script>
</head>
<body>
  <div id="out_id">&nbsp;</div>
  <div id="overDiv" style="width: 200px; height: 200px; background: #369; cursor: default;">&nbsp;</div>
</body>
</html>
```
Ciao
Quaese


----------



## SpiceLab (2. Oktober 2010)

Möchte hier mal von der Seitenlinie den Ball ins Spiel einwerfen, dass mein Code-Beispiel *browserübergreifend* (FF, Google-Chrome, IE, Opera, Safari) funktioniert ;-)

Oder stand ich hier zu nächtlicher Stunde ohne Flutlicht alleine auf'm Platz, und hab die Spielregeln nicht richtig gelesen? :-(


----------



## Quaese (3. Oktober 2010)

Hi,

es funktioniert browserübergreifend, gibt aber jeweils immer nur die Koordinaten relativ zum Viewport an - Scrollen unberücksichtigt.

Ciao
Quaese


----------



## SpiceLab (3. Oktober 2010)

Danke - in meinen beiden Demos gibt's ja auf Anhieb erstmal nix zu scrollen ;-)


----------

