Home>Article>Web Front-end> A detailed introduction to APIs related to HTML5 element drag and drop (pictures and text)

A detailed introduction to APIs related to HTML5 element drag and drop (pictures and text)

黄舟
黄舟 Original
2017-03-11 15:58:27 1753browse

In fact, HTML5 just adds some useful APIs
Let us develop more easily
So that we can focus more on business logic
The use of these APIs is also very simple
But I My memory is not very good
So I still record it in the form of a blog (manual funny)
Let’s write about this drag and drop API today

Default drag

Speaking of drag In fact, the earliest implementation of drag-and-drop function was IE (IE4)
H5 is the drag-and-drop specification specified based on the IE instance
In the browser, there is a default drag
For example, pictures Drag

Drag the selected text

##Drag the link

Element drag

The browser allows us to drag images, text and links by default

It is also possible to drag other elements
Only on the element tag Add an attribute

When this element is dragged, the browser will display it as a translucent copy

Drag event

The drag event should be divided into There are two types

One type is the event triggered by the dragged element
The other type is the event triggered by the drag and drop target element

var source = document.getElementById('source');var target = document.getElementById('target');

Drag element

The drag element At this time, the dragged element will trigger the following event

  • dragstart

  • drag

  • dragend

When the mouse clicks on an element and starts to move, the dragstart event will be triggered (analogous to mousedown)

The drag event will be continuously triggered during the dragging process (analogous to mousemove)
The dragend event will be triggered when the mouse is released to cancel the drag (analogous to mouseup)

source.ondragstart = function(){ console.log('开始拖拽'); }source.ondrag = function(){ console.log('拖拽中'); }source.ondragend = function(){ console.log('拖拽结束'); }

Target element

When the dragged element is dragged onto a target element, the target element will trigger the following event

  • dragenter

  • dragover

  • dragleave

  • drop

Drag the element to the target, and the dragenter event will be triggered (analogous to mouseover)

When the dragged element is in the target element, the dragover event will continue to be triggered.
Leave the target element and trigger the dragleave event (analogous to mouseout)
If the element is dragged and dropped into the target element (release the mouse in the target element), the drop event will be triggered but the dragleave event will not be triggered

target.ondragenter = function(){ console.log('拖动进入目标元素'); }target.ondragover = function(){ console.log('目标元素中拖拽'); }target.ondragleave = function(){ console.log('拖动离开目标元素'); }target.ondrop = function(){ console.log('拖放'); }


At this time we will find that the drop event is not triggered when the element is dragged and dropped into the target element


We saw a special cursor (circle + backslash)

It means invalid drag and drop

So the drop event is not triggered
That is to say, the element cannot be dragged and dropped by default
As long as we cancel the default event
in the dragover event of the
target element, the problem can be solved

target.ondragover = function(e){ console.log('目标元素中拖拽'); e.preventDefault(); //增}
Data exchange

Just a simple drag and drop is meaningless

We need Perform data exchange

The object of this term data exchange is the attribute of the event object
dataTransfer
The two core methods of dataTransfer are setData() and getData()setData() is used Set data, use getData() to receive data

event.dataTransfer.setData('text','some text'); var text = event.dataTransfer.getData('text');//保存在dataTransfer中的数据只能在drop事件处理函数中处理

If we drag the selected text

The browser will call dataTransfer.setData by default to set the corresponding text data


setData() and getData() is a string of data type

In addition to the "text" text type, the data types defined by IE also include "URL"

H5 has extended it and can specify various MIME types
But for Backwards compatible, it also supports "text" and "URL"
They will be mapped to "text/plain" and "text/uri-list" respectively

If the data is saved as URL, the browser It will do special processing and treat it as a web link

(so dragging the link to another browser window will open the web page)


If necessary, we can manually save the data that needs to be transferred
var source = document.getElementById('source');var target = document.getElementById('target'); source.ondragstart = function(e){ e.dataTransfer.setData('text','传递文本数据'); } target.ondragover = function(e){ e.preventDefault(); } target.ondrop = function(e){ console.log(e.dataTransfer.getData('text')); }

Drag settings

There are two important properties in dataTransfer

dropEffect
andeffectAlloweddropEffect

The dropEffect attribute value is a string, indicating which placement behavior the dragged element can perform

To use this attribute, it must be set in the dragenter event handler function


    none Elements cannot be dragged and dropped here (default value for all elements except text boxes)
  • move Move to the target
  • copy Copy to target
  • link The target opens the drag element (the drag element must be a link and have a URL)

effectAllowed

The effectAllowed attribute value is also a character String, indicating which dropEffect is allowed to drag elements
To use this attribute, it must be set in the dragst event handler function

  • uninitialized No drag-and-drop behavior is set

  • none cannot be caused by any behavior

  • copy Only dropEffect values are allowed to be copy

  • link Only dropEffect values are allowed to be link

  • move Only allows dropEffect value to be move

  • copyLink Allows dropEffect value to be copy and link

  • copyMove allows dropEffect values to be copy and move

  • linkMove allows dropEffect values to be link and move

  • all allows any dropEffect

The above is the detailed content of A detailed introduction to APIs related to HTML5 element drag and drop (pictures and text). For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn