HTML5 元素拖动 - 实现元素左右拖动
2017-02-22 13:41
176 查看
1、拖放(Drag和drop)是HTML5标准的组成部分。
拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在HTML5中,拖放是标准的一部分,任何元素都能够拖放。
浏览器支持:InternetExplorer9、Firefox、Opera12、Chrome以及Safari5支持拖放(注:在Safari5.1.2中不支持拖放)。
2、相关属性及方法
设置元素为可拖放,把draggable属性设置为true
设置元素被拖动时触发的事件ondragstart
放到何处-ondragover,以div为例:
进行放置-ondrop,以div为例:
3、实现一个简单的从左向右拖动元素,从右向左拖动元素,比较简陋。
html:
拖动元素的方法,未在元素上进行绑定,均在js里进行绑定
javascript:
动态给label元素加上被拖动事件
设置左边-〉右边拖动
设置右边-〉左边拖动
代码解释:
ondragover默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
调用preventDefault()来避免浏览器对数据的默认处理(drop事件的默认行为是以链接形式打开)
通过dataTransfer.getData("Text")方法获得被拖的数据。该方法将返回在setData()方法中设置为相同类型的任何数据。
源代码:
原文链接:http://www.cnblogs.com/bean-sprout/p/5892727.html?utm_source=tuicool&utm_medium=referral
拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在HTML5中,拖放是标准的一部分,任何元素都能够拖放。
浏览器支持:InternetExplorer9、Firefox、Opera12、Chrome以及Safari5支持拖放(注:在Safari5.1.2中不支持拖放)。
2、相关属性及方法
设置元素为可拖放,把draggable属性设置为true
1 | <label class = "move" draggable= "true" id= "index1" >index1</label> |
1 | <label class = "move" draggable= "true" ondragstart= "drag(event)" id= "index1" >index1</label> |
1 | <div id= "right" ondragover= "dragover(event)" >...</div> |
1 | <div id= "right" ondragover= "dragover(event)" ondrop= "drop(event)" >...</div> |
html:
拖动元素的方法,未在元素上进行绑定,均在js里进行绑定
01 | <!--左边元素框--> |
02 | <div id= "left" > |
03 | <label class = "move" draggable= "true" id= "index1" >index1</label> |
04 | <label class = "move" draggable= "true" id= "index2" >index2</label> |
05 | <label class = "move" draggable= "true" id= "index3" >index3</label> |
06 | <label class = "move" draggable= "true" id= "index4" >index4</label> |
07 | <label class = "move" draggable= "true" id= "index5" >index5</label> |
08 | <label class = "move" draggable= "true" id= "index6" >index6</label> |
09 | <label class = "move" draggable= "true" id= "index7" >index7</label> |
10 | </div> |
11 | <!--右边元素框--> |
12 | <div id= "right" > |
13 | </div> |
动态给label元素加上被拖动事件
1 | var len =document.getElementsByClassName( 'move' ).length; |
2 | for ( var i =0;i<len;i++){ |
3 | document.getElementsByClassName( 'move' ).item(i).ondragstart = function (ev) { |
4 | //dataTransfer.setData() 方法设置被拖数据的数据类型和值 |
5 | ev.dataTransfer.setData( "Text" , ev.target.id); |
6 | }; |
7 | } |
01 | document.getElementById( 'right' ).ondragover = function (ev) { |
02 | //只接受从左边拖动到右边的元素,不接受自己元素框中元素拖动 |
03 | if (ev.target.id == 'right' ) { |
04 | ev.preventDefault(); //阻止向上冒泡 |
05 | } |
06 | } |
07 |
08 | document.getElementById( 'right' ).ondrop = function (ev) { |
09 | ev.preventDefault(); |
10 | var id =ev.dataTransfer.getData( 'Text' ); |
11 | if (document.getElementById(id).parentElement.id == 'left' ) { |
12 | ev.target.appendChild(document.getElementById(id)); |
13 | } |
14 | } |
01 | document.getElementById( 'left' ).ondragover = function (ev) { |
02 | //只接受从右边拖动到左边的元素,不接受自己元素框中元素拖动 |
03 | if (ev.target.id == 'left' ) { |
04 | ev.preventDefault(); //阻止向上冒泡 |
05 | } |
06 | } |
07 | document.getElementById( 'left' ).ondrop = function (ev) { |
08 | ev.preventDefault(); |
09 | var id =ev.dataTransfer.getData( 'Text' ); |
10 | if (document.getElementById(id).parentElement.id == 'right' ) { |
11 | ev.target.appendChild(document.getElementById(id)); |
12 | } |
13 | } |
ondragover默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
调用preventDefault()来避免浏览器对数据的默认处理(drop事件的默认行为是以链接形式打开)
通过dataTransfer.getData("Text")方法获得被拖的数据。该方法将返回在setData()方法中设置为相同类型的任何数据。
源代码:
01 | 1<!DOCTYPE html> |
02 | 2 <html> |
03 | 3 "en" > |
04 | 4 "UTF-8" > |
05 | 5 <title>拖动</title> |
06 | 6 <style> |
07 | 7 #left,#right,#center{ |
08 | 8 float:left; |
09 | 9 |
10 | 10 width:100px; |
11 | 11 padding:10px; |
12 | 12 |
13 | 13 |
14 | 14 height:200px; |
15 | 15 |
16 | 16 } |
17 | 17 |
18 | 18 width:100%; |
19 | 19 |
20 | 20 padding:3px; |
21 | 21 |
22 | 22 } |
23 | 23 |
24 | 24 </style> |
25 | 25 </head> |
26 | 26 <body> |
27 | 27 |
28 | 28 <!--左边元素框--> |
29 | 29 "left" > |
30 | 30 class = "move" draggable= "true" id= "index1" >index1</label> |
31 | 31 class = "move" draggable= "true" id= "index2" >index2</label> |
32 | 32 class = "move" draggable= "true" id= "index3" >index3</label> |
33 | 33 class = "move" draggable= "true" id= "index4" >index4</label> |
34 | 34 class = "move" draggable= "true" id= "index5" >index5</label> |
35 | 35 class = "move" draggable= "true" id= "index6" >index6</label> |
36 | 36 class = "move" draggable= "true" id= "index7" >index7</label> |
37 | 37 </div> |
38 | 38 <!--右边元素框--> |
39 | 39 "right" > |
40 | 40 </div> |
41 | 41 <script> |
42 | 42 $(document).ready( function () { |
43 | 43 var len =document.getElementsByClassName( 'move' ).length; |
44 | 44 for ( var i =0;i<len;i++){ |
45 | 45 document.getElementsByClassName( 'move' ).item(i).ondragstart = function (ev) { |
46 | 46 //dataTransfer.setData() 方法设置被拖数据的数据类型和值 |
47 | 47 ev.dataTransfer.setData( "Text" , ev.target.id); |
48 | 48 }; |
49 | 49 } |
50 | 50 }); |
51 | 51 |
52 | 52 //左-〉右 |
53 | 53 document.getElementById( 'right' ).ondragover = function (ev) { |
54 | 54 //只接受从左边拖动到右边的元素,不接受自己元素框中元素拖动 |
55 | 55 if (ev.target.id == 'right' ) { |
56 | 56 //阻止向上冒泡 |
57 | 57 } |
58 | 58 } |
59 | 59 document.getElementById( 'right' ).ondrop = function (ev) { |
60 | 60 ev.preventDefault(); |
61 | 61 var id =ev.dataTransfer.getData( 'Text' ); |
62 | 62 if (document.getElementById(id).parentElement.id == 'left' ) { |
63 | 63 ev.target.appendChild(document.getElementById(id)); |
64 | 64 } |
65 | 65 } |
66 | 66 |
67 | 67 |
68 | 68 //右-〉左 |
69 | 69 document.getElementById( 'left' ).ondragover = function (ev) { |
70 | 70 //只接受从右边拖动到左边的元素,不接受自己元素框中元素拖动 |
71 | 71 if (ev.target.id == 'left' ) { |
72 | 72 //阻止向上冒泡 |
73 | 73 } |
74 | 74 } |
75 | 75 document.getElementById( 'left' ).ondrop = function (ev) { |
76 | 76 ev.preventDefault(); |
77 | 77 var id =ev.dataTransfer.getData( 'Text' ); |
78 | 78 if (document.getElementById(id).parentElement.id == 'right' ) { |
79 | 79 ev.target.appendChild(document.getElementById(id)); |
80 | 80 } |
81 | 81 } |
82 | 82 |
83 | 83 |
84 | 84 |
85 | 85 |
86 | 86 </script> |
87 | 87 </body> |
88 | 88 </html> |
89 |
90 | View Code |
相关文章推荐
- HTML5 元素拖动 - 实现元素左右拖动, 或更改自身排序
- js拖拽之二:实现拖动元素上下左右改变元素大小
- DataGrid实现(上下左右移动,添加删除行列,导出,表头拖动)
- javascript 中ondragstart ondrag实现拖动界面元素效果
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- HTML5 学习之页面元素的拖动
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- DataGrid实现(上下左右移动,添加删除行列,导出,表头拖动)
- android实现uc和墨迹天气那样的左右拖动效果
- android实现uc和墨迹天气那样的左右拖动效果
- javascript 中ondragstart ondrag实现拖动界面元素效果 .
- android中使用ViewPager实现图片左右拖动
- SL学习笔记之简单实现拖动2个元素自动合并
- android 实现左右拖动的网页焦点图
- android 实现左右拖动的网页焦点图
- 实现android布局的左右拖动及动画效果的代码范例
- 最近由于要用到分隔条,找到了一篇讲原理的, 实现了一个。可以双击缩到左边,可以左右拖动
- 实现页面元素拖动效果的JS函数
- HTML5 CANVAS 元素 实现 GIS的一篇文章
- java 程序里如何实现从一个列表中拖动一个元素到另一个列表中?