Firefox and other Mozilla applications support a number of features for handling drag and drop. This allows the user to click and hold the mouse button down over an element, drag it to another location, and release the mouse button to drop the element there. A translucent representation of what is being dragged will follow the mouse pointer during the drag operation. The drop location may be a different application. Web sites, extensions, and XUL applications may make use of this functionality to customize what elements may be dragged, the drag feedback, as well as specify where elements may be dropped.
Drag and drop basics
When a drag begins, a number of pieces of information may be provided:
- the data to be dragged, which may be of a number of different formats. For example, textual data containing a string of text being dragged. For information about this, see Drag Data.
- the drag feedback image which appears beside the mouse pointer during the drag operation. This image may be customized; however, most of the time, you would not specify this, and a default image will be generated based on the element where the mouse was pressed down. To learn more about drag feedback images, see Setting the Drag Feedback Image.
- drag effects that are allowed. Three such effects are possible:
copyto indicate that the data being dragged will be copied from its present location to the drop location,
moveto indicate that the data being dragged will be moved, and
linkto indicate that some form of relationship or connection will be created between the source and drop locations. During the drag operation, the drag effects may be modified to indicate that certain effects are allowed at certain locations. If allowed, a drop may occur at that location. See Drag Effects for more details.
Mozilla and Firefox support a number of features not in the standard drag and drop model. These allow you to drag multiple items and drag non-string data. For more information, see Dragging and Dropping Multiple Items.
For a list of common data types used for drag and drop, see Recommended Drag Types.
A quick reference is available for the best practice for dragging the following kinds of items:
See DataTransfer for a reference to the DataTransfer object.
A number of events are used which are fired during various stages of the drag and drop operation. Note that only drag events are fired; mouse events such as
mousemove are not fired during a drag operation. Also note that
dragend are not fired when dragging a file into the browser from the OS.
The dataTransfer property of all drag events holds data about the drag and drop operation.
Fired on an element when a drag is started. The user is requesting to drag the element the
dragstartevent is fired at. During this event, a listener would set information such as the drag data and image to be associated with the drag. This event is not fired when dragging a file into the browser from the OS. For information about this, see Starting a Drag Operation.
- Fired when the mouse is first moved over an element while a drag is occurring. A listener for this event should indicate whether a drop is allowed over this location. If there are no listeners, or the listeners perform no operations, then a drop is not allowed by default. This is also the event to listen to if you want to provide feedback that a drop is allowed such as displaying a highlight or insertion marker. For information about this, see Specifying Drop Targets.
- This event is fired as the mouse is moved over an element when a drag is occuring. Much of the time, the operation that occurs during a listener will be the same as the dragenter event. For information about this, see Specifying Drop Targets.
- This event is fired when the mouse leaves an element while a drag is occurring. Listeners should remove any highlighting or insertion markers used for drop feedback.
This event is fired at the source of the drag, that is, the element where
dragstartwas fired, during the drag operation.
dropevent is fired on the element where the drop occurred at the end of the drag operation. A listener would be responsible for retrieving the data being dragged and inserting it at the drop location. This event will only fire if a drop is desired. It will not fire if the user cancelled the drag operation, for example by pressing the Escape key, or if the mouse button was released while the mouse was not over a valid drop target. For information about this, see Performing a Drop.
- The source of the drag will receive a dragend event when the drag operation is complete, whether it was successful or not. This event is not fired when dragging a file into the browser from the OS. See Finishing a Drag for more information.