Vue.Draggable vue项目做拖拽

wylc123 1年前 ⋅ 1012 阅读

Vue.Draggable开源插件地址

实例

需要引入的js

<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.min.js"></script>
<!-- CDNJS :: Sortable (https://cdnjs.com/) -->
<script src="//cdn.jsdelivr.net/npm/sortablejs@1.7.0/Sortable.min.js"></script>
<!-- CDNJS :: Vue.Draggable (https://cdnjs.com/) -->
<script src="//cdnjs.cloudflare.com/ajax/libs/Vue.Draggable/2.15.0/vuedraggable.min.js"></script>

实现代码(例子)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!-- import CSS -->
  		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  		<!-- import Vue before Element -->
		 <script src="https://unpkg.com/vue/dist/vue.js"></script>
		 <!-- import JavaScript -->
		 <script src="https://unpkg.com/element-ui/lib/index.js"></script>
		 <!--<script src="js/Sortable.min.js"></script>
		 <script src="js/vuedraggable.min.js"></script>-->
		<script src="//cdn.jsdelivr.net/npm/sortablejs@1.7.0/Sortable.min.js"></script>
		<script src="//cdnjs.cloudflare.com/ajax/libs/Vue.Draggable/2.15.0/vuedraggable.min.js"></script>
	</head>
	<body>
		<div id="app">
		<template>
			<div class="hello">
				<h1 style="text-align: center;">拖动到指定div</h1>
				<template>
					<div class='drag-content'>
						<div class='project-content'>
							<div class='select-item' draggable='true' @dragstart='drag($event)' v-for='pjdt in projectdatas'>{{pjdt.name}}</div>
						</div>
						<div class='people-content'>
							<div class='drag-div' v-for='(ppindex,ppdt) in peopledata' @drop='drop($event)' @dragover='allowDrop($event)'>
								<div class='select-project-item'>
									<label class='drag-people-label'>{{ppindex.name}}:</label>
								</div>
							</div>
						</div>
					</div>
				</template>
			</div>
		</template>
		 </div>
		<script>
			let dom = '';
			var app = new Vue({
				el: '#app',
		      	data: function() {
					return {
						msg: 'Welcome to Your Vue.js App',
						tags: [{
							id: 1,
							name: '第一个'
						}, {
							id: 2,
							name: '第二个'
						}],
						projectdatas: [{
							id: 1,
							name: '葡萄',
						}, {
							id: 2,
							name: '芒果',
						}, {
							id: 3,
							name: '木瓜',
						}, {
							id: 4,
							name: '榴莲',
						}],
						peopledata: [{
							id: 1,
							name: 'first',
						}, {
							id: 2,
							name: 'second',
						}, {
							id: 3,
							name: 'third ',
						}, {
							id: 3,
							name: 'four',
						}]
					}
				},
				methods: {
					getdata(evt) {
						console.log(evt.draggedContext.element.id)
					},
					datadragEnd(evt) {
						console.log('拖动前的索引 :' + evt.oldIndex)
						console.log('拖动后的索引 :' + evt.newIndex)
						console.log(this.tags)
					},
					drag(event) {
						dom = event.currentTarget;
					},
					drop(event) {
						event.preventDefault();
						console.log('我是target')
						console.log(event.srcElement.className)
						if(event.srcElement.className != 'select-item') {
							event.target.appendChild(dom);
							console.log(dom);
						} else {
							alert('该位置已被占用');
						}
					},
					allowDrop(event) {
						event.preventDefault(); //preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交)
					},
					checkMove(evt) {
						console.log(111111111111111111111)
						console.log(evt.draggedContext.element.name)
						alert(1)
						return(evt.draggedContext.element.name !== 'apple');
					}
				}
			});
		</script>
		 
		<!-- Add "scoped" attribute to limit CSS to this component only -->
		<style scoped>
			.select-item {
				background-color: #5bc0de;
				display: inline-block;
				text-align: center;
				border-radius: 3px;
				margin-right: 10px;
				cursor: pointer;
				padding: 6px 20px;
				color: #fff;
			}
			
			.cursored {
				cursor: default;
			}
			
			.project-content,
			.people-content {
				margin: 30px 50px;
			}
			
			.people-content {
				margin-top: 30px;
			}
			
			.drag-div {
				border: 1px solid #5bc0de;
				padding: 10px;
				margin-bottom: 10px;
				width: 800px;
				cursor: pointer;
			}
			
			.select-project-item {
				display: inline-block;
				text-align: center;
				border-radius: 3px;
			}
			
			.drag-people-label {
				margin-bottom: 0;
				padding-right: 10px;
			}
		</style>
	</body>
</html>
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: