gibney.org
:
Technology
:
Javascript
:
Repository
:
list_order
(Entry Nr. 42, by user 1 |
edit
)
// This shall become a tool to order items in a list. // One will be able to select multiple items and drag them around. // I picture nifty flying words the magically find their place. ge_require_once('http://javascript.gibney.org/2d.js'); function mglo_element_mousedown(id) { if (Items[id].selected!=true) { if (mg_keys_keyPressed!=16) { for (i=0;i<mglo_nr_items;i++) { Items[i].selected=false; mg_setElementClass("mglo_"+i,"div_mglo_item"); ItemSwarm.Elements["mglo_"+i].FollowAim=true; } } ItemSwarm.Elements["mglo_"+id].FollowAim=false; Items[id].selected=true; mg_setElementClass("mglo_"+id,"div_mglo_item_selected"); } return true; } function mglo_element_mouseup(id) { if (Items[id].selected==true) { ItemSwarm.Elements["mglo_"+id].FollowAim=true; /* if (mg_keys_keyPressed!=16) // shift key -> keep selection (to select multiple elements) { Items[id].selected=false; mg_setElementClass("mglo_"+id,"div_mglo_item"); ItemSwarm.Elements["mglo_"+id].FollowAim=true; } */ } else { } } function mglo_mouseDown(e) { if (!e) e=event; // browser detection. mglo_drag_start_y=e.screenY; document.onmousemove=mglo_drag; for (i=0;i<mglo_nr_items;i++) { if(Items[i].selected) ItemSwarm.Elements["mglo_"+i].FollowAim=false; } return false; } function mglo_moveSelectedItem(i) { y= ItemSwarm.Elements["mglo_"+i].y; for (i2=0;i2<mglo_nr_items;i2++) { if (i2!=i && !Items[i2]["selected"]) { Aim2=ItemSwarm.Elements["mglo_"+i2].AimY; dist=Aim2-y; if ( (dist<0 && y_dif<0) || (dist>0 && y_dif>0)) { if ((Math.abs(dist)-Math.abs(y_dif))<20) { x_dist=ItemSwarm.Elements["mglo_"+i2].x-ItemSwarm.Elements["mglo_"+i].x; Aim1=ItemSwarm.Elements["mglo_"+i].AimY; ItemSwarm.Elements["mglo_"+i].AimY=Aim2; ItemSwarm.Elements["mglo_"+i2].AimY=Aim1; SpeedX=y_dif*6; SpeedY=y_dif; if (Math.abs(x_dist)>10) { SpeedX=0; SpeedY=0; } if (SpeedX> 20) SpeedX= 20; if (SpeedX<-20) SpeedX=-20; if (SpeedY> 20) SpeedY= 20; if (SpeedY<-20) SpeedY=-20; ItemSwarm.Elements["mglo_"+i2].SpeedX+=SpeedX; ItemSwarm.Elements["mglo_"+i2].SpeedY+=SpeedY; } } } } ItemSwarm.Elements["mglo_"+i].y+=y_dif; ItemSwarm.Elements["mglo_"+i].redraw(); } function mglo_mouseUp() { document.onmousemove=mglo_dragNot; for (i=0;i<mglo_nr_items;i++) { ItemSwarm.Elements["mglo_"+i].FollowAim=true; } } function mglo_drag(e) { if (!e) e=event; y_dif=e.screenY-mglo_drag_start_y; for (i=0;i<mglo_nr_items;i++) { if (Items[i]["selected"]) mglo_moveSelectedItem(i); } mglo_drag_start_y=e.screenY; return false; } function mglo_dragNot() { } mg_keys_keyPressed=false; function mg_keys_onkeydown(e) { if (!e) e=event; mg_keys_keyPressed=e.keyCode; //alert(mg_keys_keyPressed); } function mg_keys_onkeyup(e) { if (!e) e=event; mg_keys_keyPressed=false; //alert(mg_keys_keyPressed); } document.onkeydown=mg_keys_onkeydown; document.onkeyup=mg_keys_onkeyup; // replace inspiriert von // http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe/ function replace(text,find,replace) { var found = text.indexOf(find); var retVal= ""; var start = 0; while(found != -1) { retVal +=text.substring(start,found) +replace; start = found+find.length; found =text.indexOf(find,start); } retVal +=text.substring(start,text.length); return retVal; } function ListItem() { this.selected=false; } function mglo_onselectstart(e) { if (!e) e=event; return true; } function mglo_start() { ItemSwarm=new mg_2d_Swarm("ItemSwarm"); document.onmousedown=mglo_mouseDown; document.onmouseup=mglo_mouseUp; document.onselectstart=mglo_onselectstart; for (i=0;i<mglo_nr_items;i++) { //Items[i]=new ListItem(); ItemSwarm.addElement("mglo_"+i,true); } ItemSwarm.start(); } function mglo_addItem(id) { Items[mglo_nr_items]=new ListItem(); mglo_nr_items+=1; } // ---------------------------------------------------------------------------- // Main // ---------------------------------------------------------------------------- var mglo_drag_mode=false; var mglo_drag_start_y=0; var Items=new Array(); var mglo_nr_items=0;
Create a new entry at this position