Toon posts:

[JS] Coordinaten linkerbovenhoek Mozilla - Events

Pagina: 1
Acties:

Verwijderd

Topicstarter
Om de coordinaten van de linkerbovenhoek van een Element te bepalen
gebruik je in IE onderstaande code. Ik wil mijn code Mozilla compatibel
maken, maar het lukt me maar niet. Wie weet hoe je de coordinaten van
de linkerbovenhoek van een Element kan bepalen?

code:
1
2
3
4
e = window.event;
var element = e.srcElement;
var x = e.clientX - e.offsetX - 3;
var y = e.clientY - e.offsetY - 3 + element.offsetHeight;

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

offsetTop en offsetLeft?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 08:20

crisp

Devver

Pixelated

event is in Mozilla geen global, maar een parameter die meegegeven wordt aan de event-handler

Intentionally left blank


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
this._showTopMenu = function(o, e) {
  if (!e) {
    e = window.event;
    var element = e.srcElement;
    var x = e.clientX - e.offsetX - 3;
    var y = e.clientY - e.offsetY - 3 + element.offsetHeight;
  } else {
     // ???
  }
}


De functie wordt als volgt aangeroepen:

code:
1
this._showTopMenu(o, (window.event?null:e));


De functie waarin this._show... staat krijgt e mee als parameter...

[ Voor 27% gewijzigd door Verwijderd op 10-02-2004 11:29 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

e.srcElement word iig e.Target

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 08:20

crisp

Devver

Pixelated

JavaScript:
1
2
3
4
5
6
this._showTopMenu = function(o, e) {
  if (typeof e == 'undefined') e = event;
  var element = typeof e.srcElement == 'undefined'? e.target : e.srcElement;
  var x = e.clientX - e.offsetX - 3;
  var y = e.clientY - e.offsetY - 3 + element.offsetHeight;
}


zoiets?

denk ook nog even aan dit verhaaltje mbt het achterhalen van het current element in de bubbling / capturing fase: crisp in "IE className wijziging verloopt traag" - target en srcElement geven altijd het initiele element terug, iets wat je niet altijd wilt als er meerdere events getriggered worden omdat elementen mogelijk over elkaar heen liggen.

Intentionally left blank


Verwijderd

Topicstarter
Het probleem is die offsetX, volgens mij kan je die niet
zo gebruiken in Mozilla. of wel? :s het wordt iig niet goed
weergegeven...

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 08:20

crisp

Devver

Pixelated

Verwijderd schreef op 10 februari 2004 @ 11:36:
Het probleem is die offsetX, volgens mij kan je die niet
zo gebruiken in Mozilla. of wel? :s het wordt iig niet goed
weergegeven...
probeer anders eens layerX en layerY voor moz, of kijk even in de DOM viewer welke properties er zijn

[ Voor 10% gewijzigd door crisp op 10-02-2004 11:41 ]

Intentionally left blank


Verwijderd

Topicstarter
Als elementen niet gepositioneert zijn dan is de positioneringscontext het BODY-element. e.pageX - e.layerX is dan dus 0 :(

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 08:20

crisp

Devver

Pixelated

Verwijderd schreef op 10 februari 2004 @ 11:50:
Als elementen niet gepositioneert zijn dan is de positioneringscontext het BODY-element. e.pageX - e.layerX is dan dus 0 :(
Dan positioneer je ze toch, bijvoorbeeld met position:relative ?

Intentionally left blank


Verwijderd

Topicstarter
Vraag me niet waarom, maar dit werkt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
     if (!e) {
      e = window.event;
      var element = e.srcElement;
      var x = e.clientX - e.offsetX - 3;
      var y = e.clientY - e.offsetY - 3 + element.offsetHeight;
    } else {
      var element = e.target;
      var xInElement = e.pageX - e.target.offsetLeft - document.body.offsetLeft - (e.pageX - e.layerX);
      var yInElement = e.pageY - e.target.offsetTop - document.body.offsetTop - (e.pageY - e.layerY);
      var x = e.pageX - xInElement;
      var y = e.pageY - yInElement + e.target.offsetHeight;
    }


:D

[ Voor 72% gewijzigd door Verwijderd op 10-02-2004 12:04 ]


Verwijderd

En waar het allemaal keurig staat uitgelegd:
http://www.quirksmode.org/viewport/compatibility.html
Pagina: 1