下面举例一下拖拽事件怎么用
发布时间:2025-06-24 17:58:54 作者:北方职教升学中心 阅读量:656
三、完整代码
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>todayTask</title><scriptsrc="../js/vue.js"></script><style>.task{width:300px;height:50px;list-style-type:decimal;list-style-position:inside;cursor:grab;position:absolute;transition:top;transition-duration:0.6s;}.taskList{position:relative;display:flex;flex-direction:column;}.addTask{display:block;}</style></head><body><divclass="container"><buttonclass="addTask"@click="addTask">添加任务</button><divclass="taskList"><divclass="task"draggable="true"@dragstart.self="ondragstart($event)"@dragover.self="ondragover($event)"v-for="task in tasks":key="task.id"><span>{{task.id}} <inputtype="text"v-model="task.task"></span></div></div></div></body><script>document.body.addEventListener("dragover",function(ev){ev.preventDefault();})newVue({el:".container",data:{tasks:[{id:1,task:"",isDone:false}],dragDiv:"",isMoving:false},methods:{addTask(){this.tasks.push({id:this.tasks.length+1,task:"",isDone:false})vartaskList =document.getElementsByClassName("taskList")[0];taskList.style.height =this.tasks.length*50+"px"},sortDiv(divs){for(vari=0;i<divs.length;i++){divs[i].style.top =i*50+"px";}},isPreviousElements(sourse,target){//返回上一节点if(!sourse.previousElementSibling){returnfalse;}if(target.isEqualNode(sourse.previousElementSibling)){returntrue;}returnthis.isPreviousElements(sourse.previousElementSibling,target)},ondragstart(ev){this.dragDiv =ev.target;console.log("dragstart");},ondragover(ev){overDrag =ev.target;console.log(overDrag.isEqualNode(this.dragDiv));console.log(this.isMoving);if(this.isMoving ||overDrag.isEqualNode(this.dragDiv)){return;}//判断是否是前一个标签元素if(this.isPreviousElements(overDrag,this.dragDiv)){overDrag.parentNode.insertBefore(this.dragDiv,overDrag.nextElementSibling);}else{overDrag.parentNode.insertBefore(this.dragDiv,overDrag);}this.isMoving =true;constself =this;varst =setTimeout(function(){self.isMoving =false;clearTimeout(st);},600);this.sortDiv(document.querySelectorAll(".task"));}},created(){//设置ul的盒子高度vartaskList =document.getElementsByClassName("taskList")[0];taskList.style.height =this.tasks.length*50+"px";//设置每一个item的上边缘topthis.sortDiv(document.querySelectorAll(".task"));},updated(){this.sortDiv(document.querySelectorAll(".task"));}})</script></html>
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>todayTask</title><scriptsrc="../js/vue.js"></script><style>.task{width:300px;height:50px;list-style-type:decimal;list-style-position:inside;cursor:grab;position:absolute;transition:top;transition-duration:0.6s;}.taskList{position:relative;display:flex;flex-direction:column;}.addTask{display:block;}</style></head><body><divclass="container"><buttonclass="addTask"@click="addTask">添加任务</button><divclass="taskList"><divclass="task"draggable="true"@dragstart.self="ondragstart($event)"@dragover.self="ondragover($event)"v-for="task in tasks":key="task.id"><span>{{task.id}} <inputtype="text"v-model="task.task"></span></div></div></div></body><script>document.body.addEventListener("dragover",function(ev){ev.preventDefault();})newVue({el:".container",data:{tasks:[{id:1,task:"",isDone:false}],dragDiv:"",isMoving:false},methods:{addTask(){this.tasks.push({id:this.tasks.length+1,task:"",isDone:false})vartaskList =document.getElementsByClassName("taskList")[0];taskList.style.height =this.tasks.length*50+"px"},sortDiv(divs){for(vari=0;i<divs.length;i++){divs[i].style.top =i*50+"px";}},isPreviousElements(sourse,target){//返回上一节点if(!sourse.previousElementSibling){returnfalse;}if(target.isEqualNode(sourse.previousElementSibling)){returntrue;}returnthis.isPreviousElements(sourse.previousElementSibling,target)},ondragstart(ev){this.dragDiv =ev.target;console.log("dragstart");},ondragover(ev){overDrag =ev.target;console.log(overDrag.isEqualNode(this.dragDiv));console.log(this.isMoving);if(this.isMoving ||overDrag.isEqualNode(this.dragDiv)){return;}//判断是否是前一个标签元素if(this.isPreviousElements(overDrag,this.dragDiv)){overDrag.parentNode.insertBefore(this.dragDiv,overDrag.nextElementSibling);}else{overDrag.parentNode.insertBefore(this.dragDiv,overDrag);}this.isMoving =true;constself =this;varst =setTimeout(function(){self.isMoving =false;clearTimeout(st);},600);this.sortDiv(document.querySelectorAll(".task"));}},created(){//设置ul的盒子高度vartaskList =document.getElementsByClassName("taskList")[0];taskList.style.height =this.tasks.length*50+"px";//设置每一个item的上边缘topthis.sortDiv(document.querySelectorAll(".task"));},updated(){this.sortDiv(document.querySelectorAll(".task"));}})</script></html>