• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > HTML5元素拖拽drag与拖放drop相关API的具体介绍(图文)

HTML5元素拖拽drag与拖放drop相关API的具体介绍(图文)

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML5,drag,drop等相关知识,匿名希望在学习及工作中可以帮助到您
其实HTML5就是新增一些有用的API
让我们更轻松的开发
从而把更多精力都放在业务逻辑上来
这些API的使用也非常简单
不过我的记性不太好
所以还是以博客的形式记录下来(手动滑稽)
今天就来写一下这个拖拽API

默认拖拽

说起拖放,其实最早实现拖放功能的还是IE(IE4)
H5就是在IE实例的基础上指定的拖拽规范
在浏览器中,是有默认拖拽的
比如说图片的拖拽

选中文本的拖拽

链接的拖拽

元素拖拽

浏览器默认允许我们拖拽图像、文本以及链接
让其它元素被拖动也是可以实现的
只需要在元素标签上添加一个属性

<p draggable="true"></p>

当拖拽这个元素的时候,浏览器就会以半透明复本的方式显示

拖拽事件

拖拽事件应该分为两类
一类是被拖拽元素触发的事件
另一类是拖放目标元素触发的事件

<p id="source" draggable="true"></p><p id="target"></p>  <!-- 样式略 -->
var source = document.getElementById('source');var target = document.getElementById('target');

拖拽元素

拖拽元素的时候,被拖拽元素会触发以下事件

  • dragstart

  • drag

  • dragend

当鼠标点中元素并且开始移动时,就会触发dragstart事件(类比mousedown)
拖拽过程中会持续不断地触发drag事件(类比mousemove)
松开鼠标取消拖拽时就会触发dragend事件(类比mouseup)

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

目标元素

当拖拽的元素拖到一个目标元素上时,目标元素会触发以下事件

  • dragenter

  • dragover

  • dragleave

  • drop

拖拽元素到目标上,就会触发dragenter事件(类比mouseover)
当拖动元素在目标元素中,就会持续触发dragover事件
离开目标元素,触发dragleave事件(类比mouseout)
若拖放元素到了目标元素中(在目标元素中松开鼠标),就会触发drop事件而不会触发dragleave事件

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


这时我们会发现元素拖放到目标元素中时
并没有触发drop事件

我们看到了一个特殊的光标(圆环+反斜线)
意思就是无效的拖放
所以导致没有触发drop事件
也就是说元素默认是不能够拖放
只要我们在目标元素的dragover事件中取消默认事件就可以解决问题

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

数据交换

只是简单的拖放毫无意义
我们需要进行数据交换
而这个用语数据交换的对象就是事件对象的属性dataTransfer
dataTransfer的两个核心方法是setData()和getData()
setData()用于设置数据,getData()用语接收数据

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

如果我们拖拽了选中文本
那么浏览器默认就会调用dataTransfer.setData,设置对应文本数据

setData()和getData()就是数据类型的字符串
IE定义的数据类型除了“text”文本类型还有“URL”
H5对它进行了扩展,可以指定各种MIME类型
但为了向后兼容,它同样支持“text”和“URL”
它们会被分别映射为“text/plain”和“text/uri-list”

如果数据保存为URL,浏览器会做特殊处理,把它当成网页链接
(所以拖拽链接到另外的浏览器窗口就会打开网页)


必要的话,我们可以手动保存需要传输的数据

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'));
}

拖拽设置

在dataTransfer中还有两个重要的属性
dropEffect和effectAllowed

dropEffect

dropEffect属性值为字符串,表示被拖动元素可以执行哪一种放置行为
要使用这个属性,必须在dragenter事件处理函数中设置

  • none 不能把元素拖放至此(除文本框外全部元素的默认值)

  • move 移动到目标

  • copy 复制到目标

  • link 目标打开拖动元素(拖动元素必须是链接并有URL)

effectAllowed

effectAllowed属性值也是字符串,表示允许拖动元素哪种dropEffect
要使用这个属性,必须在dragst事件处理函数中设置

  • uninitialized 没有设置任何拖放行为

  • none 不能由任何行为

  • copy 仅允许dropEffect值为copy

  • link 仅允许dropEffect值为link

  • move 仅允许dropEffect值为move

  • copyLink 允许dropEffect值为copy和link

  • copyMove 允许dropEffect值为copy和move

  • linkMove 允许dropEffect值为link和move

  • all 允许任意dropEffect

以上就是HTML5元素拖拽drag与拖放drop相关API的具体介绍(图文)的详细内容,更多请关注微课江湖其它相关文章!

您可能想查找下面的文章:

  • HTML5知识点总结
  • HTML5的本地存储
  • HTML5本地存储之IndexedDB
  • Html5实现文件异步上传功能
  • Html5新标签datalist实现输入框与后台数据库数据的动态匹配
  • 详解HTML5 window.postMessage与跨域
  • HTML5拖放API实现拖放排序的实例代码
  • 解决html5中video标签无法播放mp4问题的办法
  • HTML5新特性 多线程(Worker SharedWorker)
  • Html5新增标签有哪些

相关文章

  • 2018-12-03H5的视频播放库video.js详解
  • 2018-12-03什么情况下更适合使用 font-icon,相比图片 css sprites 有哪些优势?
  • 2018-12-03 HTML5中classList属性
  • 2018-12-03html5构建触屏网站之网站尺寸探讨_html5教程技巧
  • 2018-12-03关于老式浏览器兼容HTML5和CSS3的问题详解
  • 2017-08-06Html5 postMessage实现跨域消息传递
  • 2018-12-03怎样用canvas来绘制彩色七巧板
  • 2018-12-03HTML5如何实现元素拖拽_html5教程技巧
  • 2018-12-03H5实现上传本地图片并能够预览的功能代码
  • 2018-12-03html5实现把上传的图片转成base64编码在显示(代码实例)

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
    • HTML5 canvas基本绘图之图形组合
    • html5使用canva实现验证码效果(代码实例)
    • 谷歌AMP和百度MIP对SEO的影响
    • html5中实现table表格中的斜线表头效果的5种做法
    • 安卓平台的浏览器 touchend 事件触发失效?
    • HTML5注册表单的自动聚焦与占位文本示例代码_html5教程技巧
    • HTML5 Web Workers之网站也能多线程的实现_html5教程技巧
    • HTML5安全介绍之内容安全策略(CSP)简介_html5教程技巧
    • 设计师很感兴趣的10个HTML5动画工具

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有