drag n drop
princip:
( během přesouvání musí mít prvek position:absolute)
A) V momentu události onmousedown zjistit pozici prvku start={x,y} a uložit posun=getMousePos()-start,
- nastavit prvku onmousemove:
var mMove=function(e) { ....
object.style.top = getMousePos().y - posun.x;
object.style.left = getMousePos().x - posun.y;
}
- nastavit prvku onmouseup (pokud není použitý trvale jako document.onmouseup)
B) V momentu události onmouseup vynulovat prvku onmousemove
Napadly mě tyhle varianty
1. jen 1 prvek vybavený touto schopností
2. každý prvek který bude označený (třebas class="dragable") lze přesouvat
3. Univerzál => funkce (které předáš xpos, ypos a HTML kód) vytvoří přemísťovatelný objekt a umístí ho na dané souřadnice
U všech 3 způsobů je třeba:
funkce getMousePos() , která pokud dojde ke scrollingu dokumentu musí zahrnout i toto (musí dát abs.souřadnice vzhledem k poč.dokumentu)
Ad1 nejjednodušší: prvku se nastaví position,top,left,onmousedown,onmouseup
Ad2+3 Použije se document.onmousedown/onmouseup.
přetahovaný obrázek se umístí vždy nad ostatními aniž se změní jejich z-pořadí
Ad2 Ve fázi A je třeba spočítat top a left prvku (nutno iterovat přes parenty) a nastavit mu position absolute.
Určovat překrývání prvků navzájem jde jedině neustálým zvyšováním last z-indexu (teoreticky by jednou přetekl...v praxi snad ne).
Ad3 Použije se document.onmousedown/onmouseup.
(makeDragable, removeDragable a Drag zaktualizují seznam objektů a podle jejich pořadí jim nastaví hodnoty z-index)
Použití např. obrázková galerie:
var images=["petr.jpg","pavel.jpg","olda.jpg"];
for(i=0;i<images.length;i++) makeDragable(20*(1+i),10*(1+i),"<img src='"+images[i]+"' />")
/*********/