Mouse-Position im Netscape/Moz
AntjeK
- javascript
Hallo zusammen!
Ich habe eine kleine Zoom-funktion gebastelt, mit der man per linken und rechten Mausklick in den Karten eines Mapservers zoomen kann. Das Funktioniert im IE/Opera bereits prima, so:
function zoom() {
//-----------------ZoomIn------------------------------------
if((actpic==0) && (event.button==1)) {
calc("D_3200",238,"1:3.200.000",true);
}
else
if((actpic==1) && (event.button==1)) {
calc("D_500",50,"1:500.000",true);
}
else
if((actpic==2) && (event.button==1)) {
....
die in dieser Funktion aufgerufene calc()-Fkt. sieht bisher so aus:
function calc(name, px, imageUrl, zoomStep){
x = window.event.offsetX;
y = window.event.offsetY;
....
Hier folgen einige immer wiederkehrende Berechnungen, die jeweils die neuen Parameter verwenden.
Wie gesagt, das x = window.event.offsetX funktioniert nicht im NS/Moz. Nun habe ich folgendes gefunden, was im NS sowie im IE gehen soll:
function getMouseXY(e) {
x = (document.all) ? window.event.x + document.body.scrollLeft : e.pageX;
y = (document.all) ? window.event.y + document.body.scrollTop : e.pageY;
}
Nur, ich habe keinen blassen Schimmer, wie ich das zusammensetzen soll. Das "e" als Parameter in die calc() zu uebergeben, funktioniert irgendwie nicht. Kann mir jemand helfen?
Antje
Wenn das die Funktion ist die beim Mausevent auftriit musst du hier den Parameter holen:
function zoom() {
function zoom(evt) {
und dann entsprechend deiner calc Funktion weitergeben:
//-----------------ZoomIn------------------------------------
if((actpic==0) && (event.button==1)) {
calc("D_3200",238,"1:3.200.000",true);
calc(evt, "D_3200",238,"1:3.200.000",true);
die in dieser Funktion aufgerufene calc()-Fkt. sieht bisher so aus:
function calc(name, px, imageUrl, zoomStep){
Hier seht es dann so aus:
function calc(evt, name, px, imageUrl, zoomStep){
x = evt ? evt.pageX : window.event.x + document.body.scrollLeft ;
y = evt ? evt.pageY : window.event.y + document.body.scrollTop;
Das Funktioniert übrigens im IE nicht immer. Da document.body nicht in jedem Modus gesetzt werden. Du brauchst für den IE 3 Varianten:
if(document.compatMode && document.compatMode == "BackCompat")
{
// IE 6 im Quirks-(BackCompat) Modus
_MOUSE_POS_.scrollLeft = _MOUSE_POS_.left + document.body.scrollLeft;
_MOUSE_POS_.scrollTop = _MOUSE_POS_.top + document.body.scrollTop;
}
else if (document.compatMode && document.compatMode == "CSS1Compat") {
// IE 6 im CSS1Compat Modus
_MOUSE_POS_.scrollLeft = _MOUSE_POS_.left + document.documentElement.scrollLeft;
_MOUSE_POS_.scrollTop = _MOUSE_POS_.top + document.documentElement.scrollTop;
}else if (document.body)
{
// IE < 6 (nicht sicher da ich nur den IE 4 hab)
_MOUSE_POS_.scrollLeft = _MOUSE_POS_.left + document.body.scrollLeft;
_MOUSE_POS_.scrollTop = _MOUSE_POS_.top + document.body.scrollTop;
}
Struppi.
Hallo Struppi!
Vielen Dank fuer deine rasche Antwort. Es sieht alles plausibel aus, geht aber trotzdem nicht.
Die NS-Javascript-Konsole meint zu dieser Zeile in der Zoom -funktion:
if ((actpic==0) && (event.button==1)){
Event ist nicht definiert. Es sieht so aus, als ob er den MAusklick nicht haben will...
Antje
hi,
_MOUSE_POS_.scrollLeft
sind solche variablennamen erlaubt?
laut http://selfhtml.teamone.de/javascript/sprache/regeln.htm#namen sollten sie m.E. mit einem buchstaben beginnen.
gruss,
wahsaga