드래그 앤 드롭 셔틀 상자 기능을 구현하는 방법은 무엇입니까? 다음 글에서는 Vue에서 드래그 앤 드롭 셔틀 상자 기능을 구현하는 네 가지 방법을 소개하겠습니다.
[관련 권장사항: vuejs 동영상 튜토리얼]
1. 기본 js를 사용하여 드래그 앤 드롭 구현
<meta> <title>Lazyload</title> <style> .drag { background-color: skyblue; position: absolute; line-height: 100px; text-align: center; width: 100px; height: 100px; } </style> <!-- left和top要写在行内样式里面 --> <div>按住拖动</div> <script></script> <script> // 获取DOM元素 let dragDiv = document.getElementsByClassName('drag')[0] // 鼠标按下事件 处理程序 let putDown = function (event) { dragDiv.style.cursor = 'pointer' let offsetX = parseInt(dragDiv.style.left) // 获取当前的x轴距离 let offsetY = parseInt(dragDiv.style.top) // 获取当前的y轴距离 let innerX = event.clientX - offsetX // 获取鼠标在方块内的x轴距 let innerY = event.clientY - offsetY // 获取鼠标在方块内的y轴距 // 按住鼠标时为div添加一个border dragDiv.style.borderStyle = 'solid' dragDiv.style.borderColor = 'red' dragDiv.style.borderWidth = '3px' // 鼠标移动的时候不停的修改div的left和top值 document.onmousemove = function (event) { dragDiv.style.left = event.clientX - innerX + 'px' dragDiv.style.top = event.clientY - innerY + 'px' // 边界判断 if (parseInt(dragDiv.style.left) <= 0) { dragDiv.style.left = '0px' } if (parseInt(dragDiv.style.top) <= 0) { dragDiv.style.top = '0px' } if ( parseInt(dragDiv.style.left) >= window.innerWidth - parseInt(dragDiv.style.width) ) { dragDiv.style.left = window.innerWidth - parseInt(dragDiv.style.width) + 'px' } if ( parseInt(dragDiv.style.top) >= window.innerHeight - parseInt(dragDiv.style.height) ) { dragDiv.style.top = window.innerHeight - parseInt(dragDiv.style.height) + 'px' } } // 鼠标抬起时,清除绑定在文档上的mousemove和mouseup事件 // 否则鼠标抬起后还可以继续拖拽方块 document.onmouseup = function () { document.onmousemove = null document.onmouseup = null // 清除border dragDiv.style.borderStyle = '' dragDiv.style.borderColor = '' dragDiv.style.borderWidth = '' } } // 绑定鼠标按下事件 dragDiv.addEventListener('mousedown', putDown, false) </script>
2. VUe 사용 드래그 앤 드롭 셔틀 프레임을 구현하는 Node.js
<template> <div> <h3 id="拖拽穿梭框">拖拽穿梭框</h3> <div> <div> <span> <span>{{ item.label }}</span> <span>X</span> > </span> </div> <div> <span> <span>{{ item.label }}</span> <span>X</span> > </span> </div> </div> </div> </template> <script> export default { name: "home", data() { return { leftData: [ { label: "首页", id: 1 }, { label: "咨询", id: 2 }, { label: "生活", id: 3 }, { label: "财富", id: 4 }, { label: "我的", id: 5 }, ], rightData: [{ label: "世界", id: 6 }], isMoveTrue: false, isMove: false, moveId: "", }; }, mounted() {}, components: {}, methods: { mousedown(index, val) { this.isMoveTrue = true; if (val == 1) { this.moveId = "mouse" + index; } else { this.moveId = "deleteMouse" + index; } }, mousemove(event) { if (this.isMoveTrue) { this.isMove = true; document.getElementById(this.moveId).style.position = "absolute"; document.getElementById(this.moveId).style.top = event.clientY + "px"; document.getElementById(this.moveId).style.left = event.clientX + "px"; document.getElementById(this.moveId).style.transform = "translate(-50%,-50%)"; } }, mouseup(item, val, index) { if (!this.isMove) { this.isMoveTrue = false; this.moveId = ""; } if (this.isMoveTrue && val == 2) { this.$nextTick(() => { this.rightData.splice(index, 1); this.leftData.push(item); }); } else if (this.isMoveTrue && val) { this.leftData.splice(index, 1); this.rightData.push(item); } document.getElementById(this.moveId).style.display = "none"; this.isMoveTrue = false; this.isMove = false; this.moveId = ""; }, handerClickX(item, index, val) { if (val == 1) { this.leftData.splice(index, 1); this.rightData.push(item); } else { this.rightData.splice(index, 1); this.leftData.push(item); } }, }, }; </script> <style> #home { display: flex; justify-content: space-around; } .tree-select-content { width: 40%; height: 300px; background: #f9faff; border: 1px solid #dee0ec; border-radius: 4px; display: flex; flex-wrap: wrap; align-content: baseline; } .select-content { width: max-content; height: 20px; padding: 1.6%; border: 1px solid #d6dbed; margin: 2% 1% 0; background: #ffffff; box-shadow: 0 0 8px 0 rgba(72, 119, 236, 0.1); border-radius: 4px; } .select-content:hover span { color: #4877ec; } .select-content:hover { cursor: pointer; background: #f8faff; border: 1px solid #3e75f4; } .select-text { font-size: 15px; color: #2e2f36; text-align: center; font-weight: 400; } .select-text-X { font-size: 15px; color: #4877ec; letter-spacing: 0; font-weight: 400; margin-left: 12px; cursor: pointer; } </style>
Rendering:
3. Vue 드래그 구성 요소 vuedraggable
vuedraggable
是标准的组件式封装,并且将可拖动元素放进了 transition-group
위의 전환 애니메이션이 더 좋습니다.
사용 방법:
yarn add vuedraggable import vuedraggable from 'vuedraggable';
사용 시 v-model을 사용하여 로컬 데이터를 양방향으로 바인딩할 수 있습니다. 상위 구성 요소에서 모니터링하는 이벤트를 업데이트하거나 트리거해야 하는 경우 update()에서 내보낼 수 있습니다. .
사례:
<template> <div> <div>{{ drag ? "拖拽中" : "拖拽停止" }}</div> <!--使用draggable组件--> <draggable> <transition-group> <div> {{ element.name }} </div> </transition-group> </draggable> <div> <div> {{ color.text }} </div> </div> </div> </template> <style> /*被拖拽对象的样式*/ .item { padding: 6px; background-color: #fdfdfd; border: solid 1px #eee; margin-bottom: 10px; cursor: move; } /*选中样式*/ .chosen { border: solid 1px #3089dc !important; } </style> <script> //导入draggable组件 import draggable from "vuedraggable"; export default { //注册draggable组件 components: { draggable, }, data() { return { drag: false, //定义要被拖拽对象的数组 myArray: [ { people: "cn", id: 10, name: "www.itxst.com" }, { people: "cn", id: 20, name: "www.baidu.com" }, { people: "cn", id: 30, name: "www.taobao.com" }, { people: "us", id: 40, name: "www.yahoo.com" }, ], colors: [ { text: "Aquamarine", }, { text: "Hotpink", }, { text: "Gold", }, { text: "Crimson", }, { text: "Blueviolet", }, { text: "Lightblue", }, { text: "Cornflowerblue", }, { text: "Skyblue", }, { text: "Burlywood", }, ], }; }, methods: { //开始拖拽事件 onStart() { this.drag = true; }, //拖拽结束事件 onEnd() { this.drag = false; }, }, }; </script>
4. Awe-dnd 명령어 캡슐화
vue-draging npm 패키지 이름은 vue-draging이 아닌 awe-dnd입니다. -글로벌 명령어를 드래그한 다음 글로벌 명령어를 통해 데이터 바인딩으로 이동합니다.
vuedraggable과 비교하여 awe-dnd에는 양방향 바인딩이 없으므로(여기서 양방향 바인딩이 없다는 것은 그다지 엄격하지 않으며 정확하게 말하면 양방향 바인딩을 노출할 방법이 없습니다) 이벤트를 제공합니다. 끝을 드래그할 때 사용됩니다. 목록을 업데이트하는 데 사용되거나(목록을 수동으로 업데이트할 필요가 없으며 실제로 양방향 바인딩이 내부적으로 구현됨) 상위 구성 요소에서 수신하는 이벤트를 트리거하는 데 사용됩니다.
설치 종속성:
npm install awe-dnd --save yarn add awe-and
main.js
import VueDND from 'awe-dnd' Vue.use(VueDND)
사례:
<template> <div> <div> <div> {{ color.text }} </div> </div> </div> </template> <style> /*被拖拽对象的样式*/ .item { padding: 6px; background-color: #fdfdfd; border: solid 1px #eee; margin-bottom: 10px; cursor: move; } /*选中样式*/ .chosen { border: solid 1px #3089dc !important; } </style> <script> export default { data() { return { drag: false, colors: [ { text: "Aquamarine", }, { text: "Hotpink", }, { text: "Gold", }, { text: "Crimson", }, { text: "Blueviolet", }, { text: "Lightblue", }, { text: "Cornflowerblue", }, { text: "Skyblue", }, { text: "Burlywood", }, ], }; }, methods: {}, }; </script>
(학습 영상 공유: 웹 프론트엔드 개발, 기본 프로그래밍 영상)
위 내용은 Vue를 사용하여 드래그 앤 드롭 셔틀 상자 기능을 구현하는 방법은 무엇입니까? 소개하는 네 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는
