HTML5 元素拖动
来源:互联网 发布:java 输入数字判断质数 编辑:程序博客网 时间:2024/06/05 21:37
1、拖放(Drag 和 drop)是 HTML5 标准的组成部分。
拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。
浏览器支持:Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放(注:在 Safari 5.1.2 中不支持拖放)。
2、相关属性及方法
设置元素为可拖放,把 draggable 属性设置为 true
1
<label
class
=
"move"
draggable=
"true"
id=
"index1"
>index1</label>
设置元素被拖动时触发的事件 ondragstart
1
<label
class
=
"move"
draggable=
"true"
ondragstart=
"drag(event)"
id=
"index1"
>index1</label>
放到何处 - ondragover ,以div 为例:
1
<div id=
"right"
ondragover=
"dragover(event)"
>...</div>
进行放置 - ondrop,以div 为例:
1
<div id=
"right"
ondragover=
"dragover(event)"
ondrop=
"drop(event)"
>...</div>
3、实现一个简单的 从左向右拖动元素,从右向左拖动元素,比较简陋。
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>
javascript:
动态给 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 <head lang=
"en"
>
04
4 <meta charset=
"UTF-8"
>
05
5 <title>拖动</title>
06
6 <style>
07
7 #left,#right,#center{
08
8 float:left;
09
9 border:1px solid #ccc;
10
10 width:100px;
11
11 padding:10px;
12
12 text-align: center;
13
13 margin-left: 100px;
14
14 height:200px;
15
15 overflow-y: auto;
16
16 }
17
17 #left label,#right label{
18
18 width:100%;
19
19 display: block;
20
20 padding:3px;
21
21 font-size: 20px;
22
22 }
23
23
24
24 </style>
25
25 </head>
26
26 <body>
27
27 <h2><mark>拖放(Drag 和 drop)</mark></h2>
28
28 <!--左边元素框-->
29
29 <div id=
"left"
>
30
30 <label
class
=
"move"
draggable=
"true"
id=
"index1"
>index1</label>
31
31 <label
class
=
"move"
draggable=
"true"
id=
"index2"
>index2</label>
32
32 <label
class
=
"move"
draggable=
"true"
id=
"index3"
>index3</label>
33
33 <label
class
=
"move"
draggable=
"true"
id=
"index4"
>index4</label>
34
34 <label
class
=
"move"
draggable=
"true"
id=
"index5"
>index5</label>
35
35 <label
class
=
"move"
draggable=
"true"
id=
"index6"
>index6</label>
36
36 <label
class
=
"move"
draggable=
"true"
id=
"index7"
>index7</label>
37
37 </div>
38
38 <!--右边元素框-->
39
39 <div id=
"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 ev.preventDefault();
//阻止向上冒泡
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 ev.preventDefault();
//阻止向上冒泡
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
原文链接:http://www.cnblogs.com/bean-sprout/p/5892727.html?utm_source=tuicool&utm_medium=referral
0 0
- html5元素拖动
- html5元素拖动
- HTML5 元素拖动
- HTML5实现网页元素的拖动操作
- HTML5元素之间的拖动-----dataTransfer学习
- html5 移动触摸屏元素拖动/触控
- HTML5拖动元素放到指定位置
- html5移动端:元素拖动/触控touch(js)(jquery)
- html5移动端:元素拖动/触控touch(js)(jquery)
- HTML5 拖动
- HTML5拖动
- 拖动元素
- html5中介绍的是拖动一个元素到指定的元素框内
- 利用HTML5的drop、drag及拖动属性做元素位置交换《我是学霸》
- HTML5下DOM元素在窗口中拖动(更改位置)
- HTML5之拖动图片
- HTML5拖动div
- Html5实现拖动效果
- UItextfield用法总结
- 不安装oracle客户端,用plsql连接oracle
- 资源整理
- 1
- MyEclipse 注释模板设置
- HTML5 元素拖动
- -01-RGB彩色图像转换为灰度图像【ARM NEON加速】
- JavaScript 原型链、prototype、__proto__详解
- 【前端】typeof方法判断类型
- Codeforces Round #399:E. Game of Stones
- 欢迎使用CSDN-markdown编辑器
- 【bzoj1823】[JSOI2010]满汉全席 2-SAT
- 数据库设计三大范式
- C# 通过委托+异步的方式约束函数的执行超时时间