Autor Zpráva
blamberg
Profil *
Ahojte.

Mám na stránce <div onmousemove="mmove(event);">…</div> .

ve funci mmove potřebuji z eventu vytáhnout souřadnici myši relativně k prvku div, který ji zavolal. Jde to?

event.clientX = vrácí poze relativně k oknu klienta.

Díky za tip, borci!
Darker
Profil
Myslím, že existuje něco jako getBoundingClientRect. Ale vím to jen díky svému DOM inspektoru. Funguje to V IE, Opeře Firefoxu.
Chamurappi
Profil
Reaguji na blamberga:
var x = event.offsetX || event.layerX;
var y = event.offsetY || event.layerY;
V Exploreru tím zjistíš souřadnice od nejbližšího offset-rodiče, což je element se zapnutým hasLayout — takže tomu <div>u nastav šířku, nebo plavání, nebo zoom: 1 atd.


Reaguji na Darkera:
S tím by to měl složitější.
Darker
Profil
Mě to fungovalo, vrátilo to oběkt. Ale to tys teď ukázal, vypadá kratší.
Witiko
Profil
Script, který z daného elementu "vybublá" až ke kořenovému a zjistí tak jeho pozici:

function findPos(obj) {
  if(typeof obj != "object") return false;
  var curleft = [0,0];
  if(obj.offsetParent)
    for(;obj.offsetParent;obj = obj.offsetParent)  {
      curleft[0] += obj.offsetLeft;
      curleft[1] += obj.offsetTop;
    }
  else {
    if(obj.x)
      curleft[0] += obj.x;
    if(obj.y)
      curleft[1] += obj.y;
  }
  return curleft;
}

Edit: Viditelně jsem špatně pochopil s čím má blamberg problém, no snad shledáte script užitečným i tak. :)
Chamurappi
Profil
Reaguji na Witika:
while(1)
Co to? Proč ta nekonečná smyčka? To mi připomíná nedávný případ.

no snad shledáte script užitečným i tak
Osobně jsem to zatím v běžné praxi nepotřeboval.
Kdyby tě omrzelo vybublávání, zkus prozkoumat metodu, o které psal Darker. U ní je sice zapotřebí zakalkulovat pozice posuvníků, ale lze s ní dosáhnout téhož — ve srovnání s offsetovým bubláním pekelně rychle.
Witiko
Profil
Chamurappi:
Změněno, ale skutečně si neumím představit případ, kdy by se utvořila smyčka, jelikož při neexistenci offsetParent daného objektu dojde k přerušení cyklu. :)

Kdyby tě omrzelo vybublávání, zkus prozkoumat metodu, o které psal Darker.
To rozhodně udělám, jednalo by se o vítanou mikro-optimalizaci do aplikací, kde jsem výše zmíněnou funkci užil. :)
Chamurappi
Profil
Reaguji na Witika:
for(;obj.offsetParent;obj = obj.offsetParent)
Já bych tedy tu smyčku napsal raději takhle, přijde mi to mnohem názornější:
while(obj)
{
  curleft[0] += obj.offsetLeft;
  curleft[1] += obj.offsetTop;
  obj = obj.offsetParent;
}

skutečně si neumím představit případ, kdy by se utvořila smyčka
O to nejde. Psát nekonečný cyklus a z něj podmíněně vyskakovat je naprosto nepřirozené, když máš při ruce přímo k tomu určené jazykové konstrukce.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: