Back to the Main Page
All of these examples assume that the library has been imported as noted in the Documentation.
This is an example of implementing drag-and-drop ordering functionality to a web page using the DP_PanelManager component provided by the DepressedPress.
Try dragging the panels along the row. Notice how the panels automatically rearrange themselves.
The code for the above form and the related script follows:
<div id="ExamplePanel" style="height: 100px;"></div>
<script type="text/javascript">
PanelManager = new DP_PanelManager();
BodyPanelManager = new DP_PanelManager();
// Get the Target Pos
var TargetPos = PanelManager.addPanel("ExamplePanel").getPosition();
// Create Panel out of the Body Element
myBody = BodyPanelManager.addPanel("BODY");
// Capture mouse movements
myBody.addEvent("mousemove", dragger);
// The dragger function - moves whatever element is in the "dragger.Element" container to match the mouse position
function dragger(Event) {
if ( dragger.Element ) {
CurMousePos = PanelManager.getMousePosition(Event);
dragger.Element.setPosition([PanelTPos, CurMousePos[1] - dragger.ClickOffset[1]]);
};
};
// Create containers for the Dragged object
dragger.Element = null;
dragger.ClickOffset = [0,0];
// Set Panel Constants
var PanelCnt = 7;
var PanelLPos = TargetPos[1];
var PanelTPos = TargetPos[0] + 10;
var PanelH = 40;
var PanelMargin = 10;
var OrderSeed = 100;
// Create Panels
var CurPanelLPos = PanelLPos;
for ( var Cnt = 1; Cnt <= PanelCnt; Cnt++ ) {
var PnlId = "Pnl_" + "_" + Cnt;
var CurPnl = PanelManager.newPanel(PnlId);
// Style the panel
CurPnl.style.backgroundColor = "green";
CurPnl.style.border = "3px solid black";
CurPnl.style.color = "white";
CurPnl.style.fontWeight = "bold";
CurPnl.style.padding = "0px";
// Load the Content
CurPnl.load("<div style='text-align: center;'>" + Cnt + "</div>");
// Display the panel
CurPnl.setDisplay("show");
// Set the size and position
CurPanelW = getRand(50,20);
CurPnl.setSize([PanelH, CurPanelW]);
CurPnl.setPosition([PanelTPos, CurPanelLPos]);
CurPanelLPos = CurPanelLPos + CurPnl.getSize()[1] + PanelMargin;
// Register Events
CurPnl.addEvent("mousedown", startDrag);
// CurPnl.addEvent("mouseout", endDrag);
CurPnl.addEvent("mouseup", endDrag);
};
// Start Drag Event
function startDrag(Event) {
// Bring the Current element to the top (prevent mouse events getting lost from overlap)
this.setOrder(OrderSeed++);
// Set the Current Panel Opacity
this.setOpacity(50, 0, 100);
// Set the dragger
dragger.Element = this;
// Get the Current Mouse Position
var CurMousePos = PanelManager.getMousePosition(Event);
// Get the Current Panel Position
var CurPanelPos = this.getPosition();
// Calculate the Panel Click Position
dragger.ClickOffset = [(CurMousePos[0] - CurPanelPos[0]), (CurMousePos[1] - CurPanelPos[1])];
};
// End Drag Event
function endDrag(Event) {
// Set the Current Panel Opacity
this.setOpacity(100, 0, 100);
// Reset the dragger properties (nothing is being dragged
dragger.Element = null;
dragger.ClickOffset = [0,0];
// Get the Order of the panels
var PanelList = PanelManager.getPanelList("left");
// Loop over the List
var CurLPos = PanelLPos;
for ( var Cnt=0; Cnt < PanelList.length; Cnt++ ) {
if ( PanelList[Cnt].id != "ExamplePanel" ) {
PanelList[Cnt].setPosition([PanelTPos, CurLPos], 0, 200);
CurLPos = CurLPos + PanelList[Cnt].getSize()[1] + PanelMargin;
};
};
};
// Random Number Generator
function getRand(Max, Min) {
if ( typeof Min != 'number') { Min = 0 };
Max = Max + 1;
return (Math.floor( Math.random() * ( Max - Min ) ) + Min);
};
</script>