Mausposition per Programm setzen
RaMi
- html
Hallo,
weiß jemand, ob folgendes möglich ist:
Ich habe eine verweis-sensitive Grafik und mache OnMouseOver.
Jetzt will ich die Grafik vergrößern, einfach indem ich "width" neu setze. Dann stimmen natürlich die "coords" nicht mehr.
Schön wäre es, wenn man jetzt die Mauspositionswerte, die beim "OnMouse" herangezogen werden, "on the fly" umrechnen könnte.
Das würde es ersparen, die "coords" neu zu berechnen (und damit alles neu laden zu müssen.
Ich hoffe, es wurde klar, was ich meine.
Gruss../RaMi
Ahoi RaMi,
weiß jemand, ob folgendes möglich ist:
Ich habe eine verweis-sensitive Grafik und mache OnMouseOver.
Ja das ist möglich, sieht vermutlich so aus:
<img onmouseover="tuWas()" src="/img.jpg">
Jetzt will ich die Grafik vergrößern, einfach indem ich "width" neu setze.
das geht auch
Dann stimmen natürlich die "coords" nicht mehr.
Welche Coords? woher kommen sie? etc. Hast du evt. eine Imagemap? die Coords stimmen schon noch, aber du musst den faktor berücksichtigen.
widthAlt = 100
widthNeu = 150
=> faktor 1,5
Schön wäre es, wenn man jetzt die Mauspositionswerte, die beim "OnMouse" herangezogen werden, "on the fly" umrechnen könnte.
hä?!?!?
Das würde es ersparen, die "coords" neu zu berechnen (und damit alles neu laden zu müssen.
Bahnhof
Bitte etwas ausführlicher beschreiben und evt. Code liefern, danke.
MfG
Hallo Daniel,
Danke für die Antwort, aber sie verwirrt mich etwas. Denn ganz so unverständlich erscheint mir meine Formulierung nicht:
Ich schrieb "Ich habe eine verweis-sensitive Grafik und mache OnMouseOver."
Also habe ich natürlich sowas:
<area id="61" shape="polygon" coords="204,249,...." href="#" onmouseover=....>
Und das tut ja auch alles.
Aber schau: Die erste Position "204,249", z.bsp., gilt doch nicht mehr, wenn ich einfach die dem Benutzer angezeigte map durch eine größere ersetze, bspweise um Faktor=2. Dann müssen auch diese coords-Werte ersetzt werden.
Was aber wäre, wenn "onmouseover" x/y Positionen erhält, die um diesen Faktor verändert sind (hier: halbiert)?
Dann könnte man die coords-Werte einfach so lassen.
(meine map hat sehr(!) viele und große Polygone)
Meine Frage ist etwa so gemeint:
Verwendet OnMouseOver die "puren" Mauskoordinaten, oder irgendwelche Variable, die normalerweise den Mauskoo entsprechen, die man aber auch (per java?) verändern kann? So daß man quasi dem OnMouseOver eine falsche Position vorspielt.
Ich bin mehr Laie also Kenner von html+java.
Habe aber auch schon im Internet rumgesucht. Aber nix passendes gefunden.
Gruss../RaMi
hi,
Meine Frage ist etwa so gemeint:
Verwendet OnMouseOver die "puren" Mauskoordinaten, oder irgendwelche Variable, die normalerweise den Mauskoo entsprechen, die man aber auch (per java?) verändern kann? So daß man quasi dem OnMouseOver eine falsche Position vorspielt.
mouseOver selber "verwendet" gar nichts, sondern ist ein Event, der ggf. eintreten kann.
Auf deinen Area-Elementen tritt er aber natürlich nur dann ein, wenn du die Maus auch in den definierten Bereich bewegst.
Wenn du mit Javascript irgendwie um einen "Faktor" veränderte Koordinaten abfragen willst, geht das per mouseover auf den Areas nicht. Du könntest natürlich bspw. mousemove über dem gesamten Bild abfangen - und dann an hand der aktuellen Koordinaten zu berechnen versuchen, welche Area jetzt betroffen sein müsste - das wird aber vermutlich aufwendig und frickelig.
Ich würde vorschlage, dass du zwei verschiedene Maps anlegst - das dürfte wesentlich einfacher sein.
gruß,
wahsaga
Danke allerseits.
Habe mir eigentlich schon gedacht, daß es so eine bequeme Lösung nicht gibt.
Im Internet findet man diverse "insidepoly()" javascripte, die sogar behaupten, schnell zu sein. Sowas könnte man an die Stelle der map setzen. Dann könnte man Imagesize u. Polygonflächen getrennt behandeln. Ist mir aber doch im Moment zu zeitaufwendig, weil ich mir nicht sicher bin, ob das bei vielen Koordinaten wirklich schnell genug ist. Müßte also erst testen.
Aber interessant ist der Gedanke doch schon: Sensitive Flächen unabhängig von Bildgröße.
Gruss..RaMi
hi,
Im Internet findet man diverse "insidepoly()" javascripte, die sogar behaupten, schnell zu sein. Sowas könnte man an die Stelle der map setzen. Dann könnte man Imagesize u. Polygonflächen getrennt behandeln. Ist mir aber doch im Moment zu zeitaufwendig, weil ich mir nicht sicher bin, ob das bei vielen Koordinaten wirklich schnell genug ist. Müßte also erst testen.
Kann ich mir nicht sonderlich performant vorstellen.
Dann eher noch die area-Elemente durchlaufen - und die einzelnen coords mit einem Faktor umrechnen und neu setzen.
Aber interessant ist der Gedanke doch schon: Sensitive Flächen unabhängig von Bildgröße.
Na ja, laut HTML 4.01-Spezifikation wären neben Pixel- wohl auch Prozentangaben erlaubt. Ich bin aber nicht im Bild, wie's da mit der Browser-Unterstützung aussieht - vermute aber, eher miserabel :-)
gruß,
wahsaga
Wen es noch interessiert: Habe eine Lösung gefunden.
Anstoß war ein Beispiel aus der selfhtml-Doku:
http://de.selfhtml.org/javascript/objekte/htmlelemente.htm
Das Beispiel zeigt natürlich nur das Prinzip.
Da ist eine Map mit einer (1) sensitive Area a1.
Die Koordinatenwerte sind nur fiktiv.
Geladen wird das img "xxx".
Es kann 100x100 oder 200x200 sein.
OnLoad ruft function "bildgroesse()"
Dort wird in Abhaengigkeit von der img-Höhe der Koo-String generiert und (UND DAS IST DER PUNKT) über document...coords eingesetzt.
-----------------------------------------------------
<html><head><title>Test</title>
<script type="text/javascript">
function showPosition() {
var bx = window.event.x ;
var by = window.event.y ;
var status = "Mausposition: X = " + bx +", Y = " + by; ;
window.status = status ;
};
function bildgroesse () {
var h = document.xxx.height; h2 = h / 100
var st = 25 * h2 + "," + 25 * h2 + "," + 75 * h2 + "," + 75 * h2
alert(st);
document.getElementById("a1").coords = st;
};
</script>
</head>
<body onMousemove="showPosition();">
<map name="Tb">
<area id="a1" shape="rect" coords="1,1,1,1"
href="#" title="Koordinaten" alt="Koordinaten">
</map>
<img src="h/b100.png" name="xxx" onload="javascript:bildgroesse()" usemap="#Tb" alt="Grafik">
</body></html>
-------------------------------------------------------------
Gruss../RaMi
function showPosition() {
var bx = window.event.x ;
var by = window.event.y ;
Les dir mal durch was diese Eigenschaften machen http://de.selfhtml.org/javascript/objekte/event.htm#x_y
Ausserdem kennen nicht alle Browser das globale Event Objekt (s. ebenfall auf der Seite)
<body onMousemove="showPosition();">
Also:
<body onMousemove="showPosition(event);">
oder noch besser im Skriptblock:
window.document.onmousemove = showPosition;
<img src="h/b100.png" name="xxx" onload="javascript:bildgroesse()" usemap="#Tb" alt="Grafik">
Das Label 'javascript:' ist hier unnötig.
Struppi.
Hallo Struppi,
function showPosition() {
Les dir mal durch was diese Eigenschaften machen
Das ist doch nur eine Zugabe! Kannst sie streichen. Auf meinem IE tuts tadellos.
Dann hast Du immer noch ein (Basis)Beispiel, wie man DYNAMISCH die
Koordinaten einer Verweis-sensitiven Map setzt.
Und das war meine Ausgangsfrage.
Wer es damals bereits gewusst hat, hätte mich ja auf diese Möglichkeit hinweisen können. Auch jetzt nehme ich natürlich alle Tipps, wie man es besser machen kann, dankend an.
Gruss../RaMi
function showPosition() {
Les dir mal durch was diese Eigenschaften machen
Das ist doch nur eine Zugabe! Kannst sie streichen. Auf meinem IE tuts tadellos.
D.h. du hast es nicht gelesen?
Es tut weder auf allen IEs, noch unter allen Umständen (was ist wenn du scrollen musst um das Bild zu erreichen?)
Es gibt daneben eine nicht geringe Verbreitung anderer Browser, wo deine Lösung es nicht tut.
Wer es damals bereits gewusst hat, hätte mich ja auf diese Möglichkeit hinweisen können. Auch jetzt nehme ich natürlich alle Tipps, wie man es besser machen kann, dankend an.
https://forum.selfhtml.org/?t=155054&m=1009441
Struppi.
Muss mich entschuldigen!
Ich hatte mich mit meinen Gedanken längst von meiner ursprünglichen Idee verabschiedet und auf dynamisches Ändern der KooDaten konzentriert. Das war also falsch mit meiner "Ausgangsfrage".
D.h. du hast es nicht gelesen?
Doch. Aber, wenn ich es richtig verstehe, zeigt es nur, wie man auf die MausKoo zugreift. Meine "Ausgangsfrage" war aber etwa so: Kann man dem "OnMouse..." falsche MausPositionen unterschieben (um eine Neuberechnung der KooDaten zu vermeiden)?
Es tut weder auf allen IEs, noch unter allen Umständen
Ich habe nicht die Absicht, ein universelles Script zu schreiben.
(was ist wenn du scrollen musst um das Bild zu erreichen?)
Kommt nicht vor.
Struppi.
../RaMi
Ahoi RaMi,
Also habe ich natürlich sowas:
achso, ImageMaps.
Aber schau: Die erste Position "204,249", z.bsp., gilt doch nicht mehr, wenn ich einfach die dem Benutzer angezeigte map durch eine größere ersetze,
und wann ersetzt du die grafik? durch was genau? durch ein vergrößertes bild der Area? oder allgemein eine größere version des vorherigen Images? oder ersetzt du das bild nach klick auf eine Lupe?
Meine Frage ist etwa so gemeint:
Verwendet OnMouseOver die "puren" Mauskoordinaten, oder irgendwelche Variable, die normalerweise den Mauskoo entsprechen, die man aber auch (per java?) verändern kann? So daß man quasi dem OnMouseOver eine falsche Position vorspielt.
onmouseover verwendet die in der Area angegeben coords, bzw. der Event wird dort ausgelöst, als 0/0 gilt die linke obere ecke.
MfG
Schön wäre es, wenn man jetzt die Mauspositionswerte, die beim "OnMouse" herangezogen werden, "on the fly" umrechnen könnte.
http://javascript.jstruebig.de/javascript/54/
Struppi.