本文实例为大家分享了jquery实现拖拽添加元素的具体代码,供大家参考,具体内容如下
需求
1.页面上有两个不同的容器,拖拽a容器的元素添加到b容器中;
2.a保持原位不dogn动,b增加新的元素,要实现的效果如下:
3.点击b容器中的元素移除元素
首先准备两个容器
页面效果如下
1
2
3
4
5
6
7
8
9
10
11
12
|
< div class = "bigBox" > < div id = "aBox" > < p class = "drag" draggable = "true" data-id = "我是a元素的第一个" >我是a元素</ p > < p class = "drag" draggable = "true" data-id = "我是a元素的第二个" >我是a元素</ p > < p class = "drag" draggable = "true" data-id = "我是a元素的第三个" >我是a元素</ p > < p class = "drag" draggable = "true" data-id = "我是a元素的第四个" >我是a元素</ p > </ div > < div id = "bBox" > </ div > </ div > |
在css中定义好样式,区分两个容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
.bigBox { display : flex; width : 100% ; height : 400px ; } #aBox { width : 40% ; height : 100% ; background-color : pink; } #aBox > p { line-height : 30px ; padding : 4px ; background-color : yellow; } #bBox { width : 40% ; height : 100% ; background-color : #00BCF4 ; } .span { border : 1px slid #ccc ; border-radius: 12px ; display : inline- block ; padding : 3px ; background-color : red ; } |
封装一个添加元素的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
function add(addId, htmlId) { var listItem = { // 接收绑定的属性值,并赋值给数组的某一项 name: addId } var obj = {}; var html = '' coloList.push(listItem) coloList = coloList.reduce( function (item, next) { // 对数组进行去重处理 obj[next.name] ? '' : obj[next.name] = true && item.push(next); return item; }, []); for ( var i = 0; i < coloList.length; i++) { // 对去重后的数组渲染到页面 html += '<span draggable="true" class="span" data-id=' + coloList[i].name + ' >' + coloList[i].name + '</span>' } htmlId.html(html) // b容器要展示的数据 } |
以下是拖拽的方法函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
var coloList = [] $(document).on( 'dragstart' , '.drag' , function (e) { // 拖拽事件绑定到元素上 var dudataId = $( this ).attr( "data-id" ) // 获取到元素绑定的属性值 $(document).on( 'dragenter' , '#bBox' , function () { }) $(document).on( 'dragover' , '#bBox' , function () { // 这行代码一定要有,阻止事件的默认行为,才能触发鼠标放下的事件 event.preventDefault() }) $( '#bBox' ).on( 'drop' , function (e) { // // 鼠标放下事件被触发把元素添加到bbox中 add(dudataId, $( '#bBox' )) }) $(document).on( 'drop' , '#bBox' , function () { // 定时器解绑事件,不然会一直绑定事件,重复添加数据 var timer = setInterval( function () { $( '#bBox' ).off( 'dragover' ) $( '#bBox' ).off( 'dragenter' ) $( '#bBox' ).off( 'drop' ) clearInterval(timer); }, 30) }) }) |
移除bbox的事件的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
function remove(removeId, htmlId) { console.log(removeId, htmlId) var index = -1 var html = '' // var list = coloList for ( var k = 0; k < coloList.length; k++) { if (removeId === coloList[k].name) { index = k break } else { index = -1 } } if (index != -1) { coloList.splice(index, 1) // coloList = list for ( var i = 0; i < coloList.length; i++) { // 对去重后的数组渲染到页面 html += '<span class="span" data-id=' + coloList[i].name + '>' + coloList[i].name + '</span>' } htmlId.html(html) } else { alert( '暂无可移除的维度' ) } } |
绑定点击事件
1
2
3
|
$( '#bBox' ).on( 'click' , '.span' , function (e) { remove($( this ).attr( "data-id" ), $( '#bBox' )) // 参数:动态添加的属性值当前点击的元素,度量列表,维度html }) |
这样就完成了呀。
以下是完整的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" > < title ></ title > < style type = "text/css" > .bigBox { display: flex; width: 100%; height: 400px; } #aBox { width: 40%; height: 100%; background-color: pink; } #aBox > p { line-height: 30px; padding: 4px; background-color: yellow; } #bBox { width: 40%; height: 100%; background-color: #00BCF4; } .span { border: 1px slid #ccc; border-radius: 12px; display: inline-block; padding: 3px; background-color: red; } </ style > </ head > < body > < div class = "bigBox" > < div id = "aBox" > < p class = "drag" draggable = "true" data-id = "我是a元素的第一个" >我是a元素</ p > < p class = "drag" draggable = "true" data-id = "我是a元素的第二个" >我是a元素</ p > < p class = "drag" draggable = "true" data-id = "我是a元素的第三个" >我是a元素</ p > < p class = "drag" draggable = "true" data-id = "我是a元素的第四个" >我是a元素</ p > </ div > < div id = "bBox" > </ div > </ div > < script src = "jquery.js" type = "text/javascript" charset = "utf-8" ></ script > < script type = "text/javascript" > var coloList = [] $(document).on('dragstart', '.drag', function(e) { var dudataId = $(this).attr("data-id") $(document).on('dragenter', '#bBox', function() { }) $(document).on('dragover', '#bBox', function() { event.preventDefault() }) $('#bBox').on('drop', function(e) { add(dudataId, $('#bBox')) }) $(document).on('drop', '#bBox', function() { var timer = setInterval(function() { $('#bBox').off('dragover') $('#bBox').off('dragenter') $('#bBox').off('drop') clearInterval(timer); }, 30) }) }) $('#bBox').on('click', '.span', function(e) { remove($(this).attr("data-id"), $('#bBox')) // 参数:动态添加的属性值当前点击的元素,度量列表,维度html }) function add(addId, htmlId) { var listItem = { // 接收绑定的属性值,并赋值给数组的某一项 name: addId } // list.push(weiduListItem) var obj = {}; var html = '' // className = 'remove' coloList.push(listItem) coloList = coloList.reduce(function(item, next) { // 对数组进行去重处理 obj[next.name] ? '' : obj[next.name] = true && item.push(next); return item; }, []); for (var i = 0; i < coloList.length ; i++) { // 对去重后的数组渲染到页面 html += '<span draggable = "true" class = "span" data-id = ' + coloList[i].name + ' >' + coloList[i].name + '</ span >' } // weiduList = lis htmlId.html(html) // 维度的数组 } // // 移除页面中维度和度量的元素 function remove(removeId, htmlId) { console.log(removeId, htmlId) var index = -1 var html = '' // var list = coloList for (var k = 0; k < coloList.length ; k++) { if (removeId === coloList[k].name) { index = k break } else { index = -1 } } if (index != -1) { coloList.splice(index, 1) // coloList = list for (var i = 0 ; i < coloList.length; i++) { // 对去重后的数组渲染到页面 html += '<span class = "span" data-id = ' + coloList[i].name + ' >' + coloList[i].name + '</ span >' } htmlId.html(html) } else { alert('暂无可移除的维度') } } </ script > </ body > </ html > |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/shadow_yi_0416/article/details/89250831