Deprecated since Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)
This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Avoid using it and update existing code if possible; see the compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.
This section describes how to implement objects that can be dragged around and dropped onto other objects.
Many user interfaces allow one to drag particular objects around within the interface. For example, dragging files to other directories, or dragging an icon to another window to open the document it refers to. Mozilla and XUL provide a number of events that can handle when the user attempts to drag objects around.
A user can start dragging by holding down the mouse button and moving the mouse. The drag stops when the user releases the mouse. Event handlers are called when the user starts and ends dragging, and at various points in-between.
Mozilla implements dragging by using a drag session. When a user requests to drag something that can be dragged, a drag session should be started. The drag session handles updating the mouse cursor and where the object should be dropped. If something cannot be dragged, it should not start a drag session. Because the user generally has only one mouse, only one drag session is in use at a time.
Note that drag sessions can be created from within Mozilla itself or from other applications. Mozilla will translate the data being dragged as needed.
The list below describes the event handlers that can be called, which may be placed on any element. You only need to put values for the handlers where you need to do something when the event occurs.
ondraggesture
; this is the HTML 5 spec name for the event and may be used in HTML or XUL; however, for backward compatibility with older versions of Firefox, you may wish to continue using ondraggesture
in XUL.There are two ways that drag and drop events can be handled. This first involves using the drag and drop XPCOM interfaces directly. The second is to use a JavaScript wrapper object that handles some of this for you. The code for this wrapper can be found in a file named toolkit/content/nsDragAndDrop.js nsDragAndDrop.js
which is contained in the widget-toolkit (or global) package.
Two interfaces are used to support drag and drop. The first is a drag service, nsIDragService and the second is the drag session, nsIDragSession.
The nsIDragService is responsible for creating drag sessions when a drag starts, and removing the drag session when the drag is complete. The function invokeDragSession
should be called to start a drag inside an ondraggesture
event handler. Once this function is called, a drag has started.
The function invokeDragSession takes four parameters, as described below:
invokeDragSession(element, transferableArray, region, actions)
event.target
during the event handler.The interface nsIDragService
also provides the function getCurrentSession
which can be called from within the drag event handlers to get and modify the state of the drag. The function returns an object that implements nsIDragSession
.
The interface nsIDragSession is used to get and set properties of the drag that is currently occuring. The following properties and methods are available:
true
if the element the mouse is currently over can accept the object currently being dragged to be dropped on it. Set the value to false
if it doesn't make sense to drop the object on it. This should be changed in the ondragover
and ondragenter
event handlers.index
, should be the index of the item to return.true
if the data being dragged contains data of the specified flavor.