搜索
首页web前端H5教程html5指南-3.如何实现html元素拖拽功能_html5教程技巧

本文的内容是关于在html5中如何实现html元素拖拽功能。在html5之前要实现拖拽,需要借助js,现在html5内部就支持了拖拽的功能,但是要实现稍微复杂的功能还是少不了js的帮忙。下面我们看几个例子。
1.创建拖拽对象
我们可以通过draggable属性告诉浏览器,哪些元素需要实现拖拽功能。draggable有三个值:true:元素可以被拖拽;false:元素不能被拖拽;auto:浏览器自己判断元素是否能被拖拽。
系统默认值是auto,但auto情况下浏览器对不同元素拖拽功能的支持是不一样,如:支持img对象,不支持div对象。所以,如果需要拖拽一个元素,最好还是把draggale设置为true。下面我们看一个例子:

复制代码
代码如下:




Example




car1
car2
car3


drop here




<script> <br />var src = document.getElementById("src"); <br />var target = document.getElementById("target"); <br /></script>



运行效果:


2.处理拖拽事件
现在我们来了解拖拽相关的事件,有两种类型的事件,一种是拖拽对象的事件,一种是投放区的事件。拖拽事件包括:dragstart:当元素拖拽开始触发;drag:在元素拖拽过程中触发;dragend:元素拖拽结束时触发。下面我们就看一个例子:

复制代码
代码如下:




Example




car1
car2
car3


drop here




<script> <br />var src = document.getElementById("src"); <br />var target = document.getElementById("target"); <br />var msg = document.getElementById("msg"); <br />src.ondragstart = function (e) { <br />e.target.classList.add("dragged"); <br />} <br />src.ondragend = function (e) { <br />e.target.classList.remove("dragged"); <br />msg.innerHTML = "drop here"; <br />} <br />src.ondrag = function (e) { <br />msg.innerHTML = e.target.id; <br />} <br /></script>



运行效果:


3.创建投放区
我们来看投放区相关的事件:dragenter:当拖拽对象进入投放区时触发;dragover:拖拽对象在投放区内移动时触发;dragleave:拖拽对象没有投放到投放区,离开投放区的时候触发;drop:拖拽对象投放在投放区时触发。
我们来看一个例子:

复制代码
代码如下:




Example




car1
car2
car3


drop here




<script> <br />var src = document.getElementById("src"); <br />var target = document.getElementById("target"); <br />var msg = document.getElementById("msg"); <br />var draggedID; <br />target.ondragenter = handleDrag; <br />target.ondragover = handleDrag; <br />function handleDrag(e) { <br />e.preventDefault(); <br />} <br />target.ondrop = function (e) { <br />var newElem = document.getElementById(draggedID).cloneNode(false); <br />target.innerHTML = ""; <br />target.appendChild(newElem); <br />e.preventDefault(); <br />} <br />src.ondragstart = function (e) { <br />draggedID = e.target.id; <br />e.target.classList.add("dragged"); <br />} <br />src.ondragend = function (e) { <br />var elems = document.querySelectorAll(".dragged"); <br />for (var i = 0; i < elems.length; i++) { <br />elems[i].classList.remove("dragged"); <br />} <br />} <br /></script>



运行结果:


4.使用DataTransfer
我们使用DataTransfer从拖拽对象向投放区传递数据。DataTransfer有下面的属性和方法:types:返回数据的格式;getData():返回指定格式数据;setData(, ):设置指定格式数据;clearData():移除指定格式数据;files:返回已经投放的文件数组。 
我们来看下面的例子,他实现的效果和例3一样:

复制代码
代码如下:




Example




car1
car2
car3


drop here




<script> <br />var src = document.getElementById("src"); <br />var target = document.getElementById("target"); <br />target.ondragenter = handleDrag; <br />target.ondragover = handleDrag; <br />function handleDrag(e) { <br />e.preventDefault(); <br />} <br />target.ondrop = function (e) { <br />var droppedID = e.dataTransfer.getData("Text"); <br />var newElem = document.getElementById(droppedID).cloneNode(false); <br />target.innerHTML = ""; <br />target.appendChild(newElem); <br />e.preventDefault(); <br />} <br />src.ondragstart = function (e) { <br />e.dataTransfer.setData("Text", e.target.id); <br />e.target.classList.add("dragged"); <br />} <br />src.ondragend = function (e) { <br />var elems = document.querySelectorAll(".dragged"); <br />for (var i = 0; i < elems.length; i++) { <br />elems[i].classList.remove("dragged"); <br />} <br />} <br /></script>



5.拖拽文件
html5支持file api,可以让我们操作本地文件。一般我们不直接使用file api,我们可以结合其他特性一起使用,比如结合拖拽特效,如下例:

复制代码
代码如下:




Example





Drop Files Here





<script> <br />var target = document.getElementById("target"); <br />target.ondragenter = handleDrag; <br />target.ondragover = handleDrag; <br />function handleDrag(e) { <br />e.preventDefault(); <br />} <br />target.ondrop = function (e) { <br />var files = e.dataTransfer.files; <br />var tableElem = document.getElementById("data"); <br />tableElem.innerHTML = "<tr><th>Name<th>Type<th>Size"; <br />for (var i = 0; i < files.length; i++) { <br />var row = "<tr><td>" + files[i].name + "<td>" + files[i].type + "<td>" + files[i].size + ""; <br />tableElem.innerHTML += row; <br />} <br />e.preventDefault(); <br />} <br /></script>



DataTransfer返回FileList对象,我们可以把他当做file数组对象,file包含下面属性:name:文件名字;type:文件类型(MIME类型);size:文件大小。
运行效果:


6.上传文件
下面介绍一个通过拖拽ajax上传文件的实例。

复制代码
代码如下:




Example







Bananas:






Apples:






Cherries:






File:






Total:


items





Drop Files Here









效果:

上面的一些例子不同浏览器运行效果可能不同,我用的是chrome浏览器,除了例5和6不支持多文件外,其他例子运行正常。大家可以下载demo。
demo下载地址:Html5Guide.draggable.rar
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何将HTML转换为MP4格式如何将HTML转换为MP4格式Feb 19, 2024 pm 02:48 PM

标题:HTML如何转换为MP4格式:详细代码示例在日常的网页制作过程中,我们常常会遇到将HTML页面或者特定的HTML元素转换为MP4视频的需求。例如将动画效果、幻灯片或其他动态元素保存为视频文件。本文将介绍如何使用HTML5和JavaScript将HTML转换为MP4格式,并提供具体的代码示例。HTML5的video标签和CanvasAPIHTML5引入

JS中appendChild与append区别JS中appendChild与append区别Feb 20, 2024 pm 06:57 PM

JS中appendChild与append区别,需要具体代码示例在JavaScript中,当我们需要动态地向DOM(文档对象模型)中添加子元素时,我们通常使用appendChild和append这两个方法。虽然它们的目的都是为了向父元素中添加子元素,但在使用上却有一些区别。一、appendChild方法appendChild方法是DOM节点对象的方法之一,用

我们如何在所有HTML元素上嵌入自定义数据属性?我们如何在所有HTML元素上嵌入自定义数据属性?Aug 28, 2023 pm 12:49 PM

在本文中,我们需要在所有HTML元素上嵌入自定义数据属性。我们可以使用HTML中的data-*属性来实现。在HTML中,data-*属性用于自定义仅对网页或应用程序私有的数据。该属性可为HTML元素添加自定义值。HTML中的data-*属性由两部分组成−属性值可以是任意字符串。属性名称应只包含小写字母,并且在前缀"data-"之后必须至少有一个字符。这些数据通常在JavaScript中用于改善用户体验。以下是在HTML元素上嵌入自定义数据属性的示例。示例1在这个例子中,我们已

JSP文件使用的技巧和注意事项JSP文件使用的技巧和注意事项Feb 01, 2024 am 09:15 AM

JSP文件的打开技巧与注意事项1.使用文本编辑器打开JSP文件JSP文件本质上是文本文件,因此可以使用任何文本编辑器来打开它们。一些流行的文本编辑器包括记事本、记事本++、SublimeText和Atom。2.在IDE中打开JSP文件如果你正在使用集成开发环境(IDE)来开发JSP应用程序,那么你也可以在IDE中打开JSP文件。一些流行的IDE包括Ec

HTML盒模型的概念及作用HTML盒模型的概念及作用Feb 18, 2024 pm 09:49 PM

HTML盒模型是一种用于描述元素在网页中布局和定位的概念。它将每个HTML元素包装在一个矩形的盒子中,这个盒子由内容区域、内边距、边框和外边距组成。在编写网页时,了解盒模型对于控制元素的尺寸、位置和样式都非常重要。具体的盒模型示例可以通过以下代码进行演示:

CSS中相对单位和绝对单位有何异同?CSS中相对单位和绝对单位有何异同?Feb 18, 2024 pm 10:07 PM

CSS(层叠样式表)是一种用于描述网页上元素样式的标记语言。在CSS中,有两种不同的长度单位,分别是相对单位和绝对单位。相对单位是相对于元素自身或其父元素的大小来计算的。常见的相对单位有:百分比(%)、em和rem。百分比单位是相对于父元素的大小来计算的。例如,如果父元素的宽度为400px,子元素的宽度设置为50%,那么子元素的实际宽度就是200px(400

HTML全局属性的实际运用场景:5个提升网页开发效率的技巧HTML全局属性的实际运用场景:5个提升网页开发效率的技巧Feb 18, 2024 pm 05:35 PM

HTML全局属性的实际应用案例:提升网页开发效率的5个技巧HTML作为构建网页结构的标记语言,拥有许多全局属性,它们可以被应用在不同的元素上,用于实现不同的功能和效果。在网页开发过程中,合理地使用这些全局属性可以极大地提高开发效率。本文将为您介绍5个实际应用案例,并附上相应的代码示例。class属性的应用:批量修改样式class属性可以给HTML元素指定

深入学习响应式布局框架:适合初学者到专家的详尽指南深入学习响应式布局框架:适合初学者到专家的详尽指南Feb 19, 2024 pm 05:43 PM

响应式布局框架解析:从初学者到专家的必备指南随着移动设备的普及和多样化,响应式布局成为了现代Web设计的必备技能。响应式布局框架以其简单、灵活和可维护的特点,成为了开发者们的首选工具。然而,对于初学者来说,学习和理解响应式布局框架可能会感到有些困惑。本文将从初学者到专家,为您提供一个详细的指南,帮助您掌握响应式布局框架,同时提供具体的代码示例。什么是响应式布

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),