拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。

浏览器支持:Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放(注:在 Safari 5.1.2 中不支持拖放。)。

2、相关属性及方法

设置元素为可拖放,把 draggable 属性设置为 true

index1

设置元素被拖动时触发的事件 ondragstart

...

放到何处 - ondragover ,以div 为例:

...

进行放置 - ondrop,以div 为例:

...

3、实现一个简单的 从左向右 或 从右向左拖动元素,且可以移动元素之前的排列位置。

效果图:

图1.初次加载

图2.从左向右拖动元素

图3.打乱右侧元素排序

图4.把右侧元素移向左边

html:

拖动元素的方法,未在元素上进行绑定,均在 js 里进行绑定

1

拖放(Drag 和 drop)

2

3

4 index1

5 index2

6 index3

7 index4

8 index5

9 index6

10 index7

11

12

13

javascript:

动态给 label元素 加上 id属性 及拖动事件

1 var moveItem = document.getElementsByTagName('label');

2

3 for (let i = 0; i < moveItem.length; i++) {

4 //动态设置label元素id

5 moveItem[i].setAttribute('id', 'label' + i);

6 moveItem[i].ondragstart = function (ev) {

7 //dataTransfer.setData() 方法设置被拖数据的数据类型和值

8 ev.dataTransfer.setData("Text", this.id);

9 };

10 }

设置 左边-〉右边 拖动 或 自身元素排序

1 document.getElementById('right').ondragover = function (ev) {

2 ev.preventDefault(); //阻止向上冒泡

3 }

4 document.getElementById('right').ondrop = function (ev) {

5 ev.preventDefault();

6 var id = ev.dataTransfer.getData('Text');

7 var elem = document.getElementById(id); //当前拖动的元素

8 var toElem = ev.toElement.id; //放置位置

9 if (toElem == 'right') {

10 //如果为container,元素放置在末尾

11 this.appendChild(elem);

12 } else {

13 //如果为container里的元素,则插入该元素之前

14 this.insertBefore(elem, document.getElementById(toElem));

15 }

16 }

设置右边-〉左边拖动 或 自身元素排序

1 document.getElementById('left').ondragover = function (ev) {

2 ev.preventDefault(); //阻止向上冒泡

3 }

4 document.getElementById('left').ondrop = function (ev) {

5 ev.preventDefault();

6 var id = ev.dataTransfer.getData('Text');

7 var elem = document.getElementById(id);

8 var toElem = ev.toElement.id;

9 if (toElem == 'left') {

10 //如果为container,元素放置在末尾

11 this.appendChild(elem);

12 } else {

13 //如果为container里的元素,则插入该元素之前

14 this.insertBefore(elem, document.getElementById(toElem));

15 }

16 }

代码解释:

ondragover 默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)

通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。

html元素拖动互换位置原理,HTML5 元素拖动 - 实现元素左右拖动, 或更改自身排序...相关推荐

  1. html元素拖动互换位置原理,【详】JS实现拖拽元素互换位置

    写在前面的废话 大家好,我是练习js时长接近两年半的个人练习生--李大雷 算了,直接 鸡,你太美~ 应用场景 很多时候,我们需要让用户来自定义自己想要的菜单顺序,或者一些按钮的排序,那么这个时候,怎么 ...

  2. Vue实现DOM元素拖放互换位置

    一.拖放和释放 HTML 拖放接口使得 web 应用能够在网页中拖放文件.这里将介绍了 web 应用如何接受从底层平台的文件管理器拖动DOM的操作. 拖放的主要步骤是为 drop 事件定义一个释放区( ...

  3. 伪元素在父元素中居中_web前端Html5开发CSS之元素五大居中方式,实用又简单!...

    大家是不是对元素居中的知识点很是模糊?是不是苦于找不到一个总结的通俗易懂的说明?是不是自己懒得去总结?今天小编在前端的学习与实践中总结出的元素的五大居中方式,黏贴了代码并对代码做了解释,希望对迷茫的有 ...

  4. python3查找元素在数组位置_Python:查找数组中元素的位置

    我有一个CSV包含气象数据,如最高和最低温度,降水量,经度和纬度的气象站等.每类数据存储在一个单一的列. 我想找出最高和最低温度的位置.找到最大值或最小值很容易: numpy.min(我的温度栏) 如 ...

  5. js 实现拖动元素到任意位置

    一.实现效果 二.实现代码 主要通过原生的 mousedown 和 mouseup 以及mouseleave 事件实现 <!DOCTYPE html> <html lang=&quo ...

  6. 使用vue-grid-layout完成桌面拖拽布局功能(实现两个元素互换位置)

    最近有个项目需要实现和windows桌面类似的图标拖拽功能,找了很多组件都没找到一个合适的,但通过本博主的不懈努力最后发现了两款不错的插件: sortablejs vue-grid-layout 本来 ...

  7. html5语义化标记元素_语义HTML5元素介绍

    html5语义化标记元素 Semantic HTML elements are those that clearly describe their meaning in a human- and ma ...

  8. 【顺序表】13 顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换

    问题描述 : 目的:使用自行设计的顺序表ADT或STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计. 应用1:试设计一个算法,用尽可能少的辅助空间将非空顺序表中前 m 个元素和后 ...

  9. 下列不属于html5语义元素,HTML5 新的语义元素

    HTML5 提供了新的语义元素来明确一个Web页面的不同部分: HTML5中新的语义元素 HTML5 元素 标签定义文档中的节(section.区段).比如章节.页眉.页脚或文档中的其他部分. 根据W ...

  10. HTML5用于定义一篇日志,[网页设计]HTML5之新增的元素

    今天打开博客看到自己有了一个小粉丝,说实话还是蛮开心的,坚持写博客大半年了,终于迎来了自己的第一个小伙伴.总算是坚持了那么久的事情看到了结果吧. 前几天参加了我们学院老师的比赛---<青年教师大 ...

最新文章

  1. 应用更新iOS 开发:应用内实现 更新提醒
  2. VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法
  3. cli3解决 ie11语法错误 vue_基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册...
  4. php 类分开写,自己前几天写的无限分类类_PHP教程
  5. android html footer 固定,前端小技巧之footer固定
  6. TFS Training for Kunlun bank (http://www.klb.cn/) 微软研发流程(ALM)管理培训会议(昆仑银行) 2016.09.21...
  7. 【NOI2016】循环之美,mobius反演+杜教筛
  8. php单独输出每个单词,PHP:在特定短语/单词之后搜索文本文件并输出
  9. NGUI_2.6.3_(3D视图ScrollView)
  10. initrd.img处理
  11. Anaconda常用命令大全
  12. pymongo使用经验
  13. asp.net core 系列之用户认证(authentication)
  14. linux中安装mysql5.1.73_linux安装mysql(5.1.73)
  15. plc和pc串口通讯接线_电脑和PLC连接不上我用的是USB转串口的连接线
  16. python 算法课件_分析《Python+TensorFlow机器学习实战》PDF代码课件+《Python深度学习》PDF代码张量...
  17. synchronized锁升级之偏向锁
  18. 闪迪MicroSD卡无法格式化修复经验(不一定管用)
  19. CF506C Mr. Kitayuta vs. Bamboos
  20. 苹果中国应用商店改为人民币结算 可网银充值

热门文章

  1. 5.docker 命令
  2. 26.卷1(套接字联网API)---线程
  3. 17. Window confirm() 方法
  4. 文字在div中的垂直居中问题 div在页面中的水平垂直居中问题 vertical-align ??????
  5. [2019杭电多校第八场][hdu6667]Roundgod and Milk Tea
  6. VMware虚拟机下安装CentOS 6.10并配置访问外网
  7. 解决pre-commit hook failed (add --no-verify to bypass)的问题
  8. Open CV leaning
  9. ArcGIS API for JS geodesicUtils.geodesicAreas 计算面积出现负值情况记录
  10. 4.2 react patterns(转)