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 |
#2 · Zasláno: 10. 1. 2011, 20:05:05
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 |
#3 · Zasláno: 10. 1. 2011, 20:21:21
Reaguji na blamberga:
var x = event.offsetX || event.layerX; var y = event.offsetY || event.layerY; 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 |
#4 · Zasláno: 10. 1. 2011, 20:50:21
Mě to fungovalo, vrátilo to oběkt. Ale to tys teď ukázal, vypadá kratší.
|
||
Witiko Profil |
#5 · Zasláno: 11. 1. 2011, 19:29:07 · Upravil/a: Witiko
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 |
#6 · Zasláno: 11. 1. 2011, 21:38:54
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 offset ovým bubláním pekelně rychle.
|
||
Witiko Profil |
#7 · Zasláno: 11. 1. 2011, 22:50:34 · Upravil/a: Witiko
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 |
#8 · Zasláno: 11. 1. 2011, 23:05:06
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. |
||
Časová prodleva: 13 let
|
0