This is a documentation for Board Game Arena: play board games online !

Draggable: Difference between revisions

From Board Game Arena
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by one other user not shown)
Line 5: Line 5:


<pre>
<pre>
createMyDraggableInStock: function(targetDivId, allDragTargets) {
createMyDraggableInStock(targetDivId, allDragTargets) {
var draggableObj = new ebg.draggable();
var draggableObj = new ebg.draggable();
draggableObj.create(this, targetDivId, targetDivId);
draggableObj.create(this, targetDivId, targetDivId);
Line 39: Line 39:
});
});
return draggableObj;
return draggableObj;
},
}


</pre>
</pre>
Line 56: Line 56:
** game: Patchwork
** game: Patchwork


 
Common drag and drop problems: https://www.codemzy.com/blog/drag-and-drop-bug-fixes


[[Category:Studio]]
[[Category:Studio]]

Latest revision as of 10:54, 16 December 2025

Draggable is the component that supports drag and drop.

This is example on how to use this with stock, see full implementation in "sharedcode" game in bga.


		createMyDraggableInStock(targetDivId, allDragTargets) {
			var draggableObj = new ebg.draggable();
			draggableObj.create(this, targetDivId, targetDivId);

			dojo.connect(draggableObj, 'onStartDragging', this, (item_id, left, top) => {
				//console.log("onStart", item_id, left, top);
			});
			dojo.connect(draggableObj, 'onDragging', this, (item_id, left, top, dx, dy) => {
				//console.log("onDrag", item_id, left, top, dx, dy);
				var targetParent = this.getDragTarget(item_id, allDragTargets, left, top);
				if (targetParent) {
					dojo.query(".drag_target_hover").removeClass("drag_target_hover");
					dojo.addClass(targetParent, "drag_target_hover");
				}

			});
			dojo.connect(draggableObj, 'onEndDragging', this, (item_id, left, top, bDragged) => {
				if (!bDragged) return;
				//console.log("onDrop", item_id, left, top, bDragged);
				var targetParent = this.getDragTarget(item_id, allDragTargets, left, top);
				const fromstock = this.getStockSourceByDivId(item_id);
				const cardId = this.getStockCardIdByDivId(item_id);
				const tostock = this.getStockByTargetId(targetParent);
				if (tostock && tostock != fromstock) {
					var cardType = fromstock.getItemTypeById(cardId);
					tostock.addToStockWithId(cardType, cardId);
					fromstock.removeFromStockById(cardId);
				} else {
					fromstock.resetItemsPosition();
				}

				dojo.query(".drag_target_hover").removeClass("drag_target_hover");
			});
			return draggableObj;
		}

Modern alternatives

Draggable it was created long time ago when HTML5 did not have such support, it probably best to use direct html5 spec now

Common drag and drop problems: https://www.codemzy.com/blog/drag-and-drop-bug-fixes