博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTML5 拖动
阅读量:4317 次
发布时间:2019-06-06

本文共 2531 字,大约阅读时间需要 8 分钟。

触发的事件有:dragstart事件、drag事件和dragend事件。

按下鼠标键并开始移动鼠标的时候,会在被拖拽的元素上触发dragstart事件。这时候光标变成”不能放”符号(圆环中有一条反斜线),表示不能把元素放在自己上门。拖拽开始时,可以通过ondragstart事件处理程序运行JavaScript代码。

  触发dragstart事件后,随即会触发drag事件,而在元素被拖动期间会持续触发drag事件。这个事件与mousemove和touchmove事件类似。当拖动停止时(无论把元素放到了有效的放置目标,还是放到了无效的放置目标上),都会发生dragend事件。

  上面说的三个事件的目标都是被拖动的元素触发。默认情况下,浏览器不会再拖动期间改变被拖动元素的外观。但是可以自行修改。不过,大多数浏览器会为正被拖动的元素创建一个半透明的副本,这个副本始终跟随光标移动。当某个元素被拖动到一个有效的放置目标的时候,会触发的事件有:dragenter事件、dragover事件和dragleave或者drop事件。

  只要有元素被拖动到放置目标上,就会触发dragenter事件(类似于mouseover事件)。紧随其后的是dragover事件,而且在被拖动的元素还在放置目标的范围内移动是,会连续触发dragover事件。如果元素被拖出放置目标,dragover事件不再发生,但是会触发dragleave事件(类似于mouseout事件)。如果元素被放到了放置目标中会触发drop事件而不是dragleave事件。dragenter事件、dragover事件和dragleave或者drop事件的目标都是作为放置目标的元素。

 

  自定义放置目标

 

  在拖动元素经过某些无效放置目标的时候,可以看到一种特殊鼠标手势(圆环中一条反斜线),表示不能放置。虽然所有元素都支持放置目标事件,但是这些元素默认是不允许放置的。如果拖动元素经过不允许放置的元素,无论用户如何操作,都不会发生drop事件。不过,你可以把任何元素变成有效的放置目标,方法是重写dragenter和dragover事件的默认行为。

  重写了默认行为之后,就会发现当拖动着元素移动到放置目标上的时候,光标变成允许放置的符号。在Firefox 3.5+中,放置事件的默认行为是打开被放到放置目标上的url。如果是把图像拖到放置目标上,页面就会转向图像文件。如果是把文本拖放到放置目标上,则会导致无效url错误。所以为了让Firefox支持政正常的拖放,还要取消drop事件的默认行为,阻止打开拖拽元素的URL。

HTML5 拖动

 

Drag it

 

FQ出去问了下谷歌找到了DataTransfer的API,下面就介绍一下:

DataTransfer

拖拽数据传递对象,一般使用方式event.Transfer。

dataTransfer . dropEffect [ = value ]

拖拽效果,可选值:“none”, “copy”, “copyLink”, “copyMove”, “link”, “linkMove”, “move”, “all”, and “uninitialized”。

dataTransfer . items

拖拽的数据集合,是一个数组。

dataTransfer . setDragImage (element, x, y)

Uses the given element to update the drag feedback, replacing any viously specified feedback.

英文有点拗口,就是拖拽过程中定义一个元素替换原有的,可以看到拖拽元素跟随的效果。

dataTransfer . addElement (element)

Adds the given element to the list of elements used to render the drag feedback.

dataTransfer . types

Returns a DOMStringList listing the formats that were set in the dragstart event. In addition, if any files are being dragged, then one of the types will be the string “Files”.

data = dataTransfer . getData (format)

Returns the specified data. If there is no such data, returns the empty string.

获取自定义的数据格式,如ev.dataTransfer.getData("text");通常是配合ev.dataTransfer.setData使用。

dataTransfer . setData (format, data)

Adds the specified data.

添加自定义数据格式,如ev.dataTransfer.setData("text", ev.target.innerHTML);有点像jquery里面的data

dataTransfer . clearData ( [ format ] )

 

Removes the  of the specified formats. Removes all data if the argument is omitted.

清除自定义的数据格式及其数据。

dataTransfer . files

Returns a FileList of the files being dragged, if any.

拖拽的文件列表对象。

 

可参考,里面讲解很细:  

转载于:https://www.cnblogs.com/steamedCray/p/5053309.html

你可能感兴趣的文章
看到第三条眼眶已经湿了
查看>>
记一次CentOS7进单用户模式修改密码的失败经历(faild to load SELinux policy freezing)...
查看>>
shh整合后web.xml、spring配置文件和struts.xml的内容
查看>>
ExportToExcel SharePointSolutionInstaller
查看>>
C# 发送邮件内容嵌入图片
查看>>
HMACSHA512
查看>>
C#实现office文档转换为PDF或xps
查看>>
关于MVC整理
查看>>
etcd使用经历
查看>>
力扣 报错 runtime error: load of null pointer of type 'const int'
查看>>
angular_directive的controllerAs
查看>>
Ubuntu下修改为永久DNS的方法
查看>>
BabeLua常见问题
查看>>
Javascript 中 == 和 === 区别是什么?
查看>>
conductor 事件处理程序
查看>>
C#设计模式——小结
查看>>
文件修改等
查看>>
阅读后提问
查看>>
SQL 基本(Head First)
查看>>
由函数clock想到的
查看>>