vue2 - 详细实现鼠标按住后拖动图片到指定位置并自动贴合吸附盒子容器,左边和右边分别设置好容器将图像拖拽到任意位置,左右来回拖动放置图片,vue实现让图片可以拖拽交换位置,图片在两个盒子里互换位置

效果图

在vue2、nuxt2项目开发中,详解实现两个盒子内图片元素位置任意互换,鼠标按住图片可拖动到自定义容器范围内,将图片拖曳到指定元素位置并自动贴边吸附,vue实现拖拽图片切换图片位置,左右两侧可交替拖拽一张图像,左侧右侧两个范围HTML框可以来回拖拽放置图片,把鼠标按住不放拖曳图像或图标到指定元素周边附近后,松手即可自动吸附贴合。

提供详细示例代码,新手小白复制稍微改改就能用了。

在这里插入图片描述

完整源码

全部代码如下。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用 Vue3 内置的 `draggable` 指令来实现拖动元素,并且结合 `droppable` 指令来实现拖动元素指定容器内。 以下是一个简单的示例: ```html <template> <div class="container"> <div class="drag-area" v-draggable> Drag me! </div> <div class="drop-area" v-droppable> Drop here! </div> </div> </template> <script> export default { directives: { draggable: { mounted(el) { let isDragging = false; let originalX, originalY; el.addEventListener("mousedown", function(event) { isDragging = true; originalX = event.clientX; originalY = event.clientY; el.style.cursor = "grabbing"; }); el.addEventListener("mousemove", function(event) { if (isDragging) { const deltaX = event.clientX - originalX; const deltaY = event.clientY - originalY; el.style.transform = `translate(${deltaX}px, ${deltaY}px)`; } }); el.addEventListener("mouseup", function() { isDragging = false; el.style.cursor = "grab"; el.style.transform = ""; }); } }, droppable: { mounted(el) { el.addEventListener("dragover", function(event) { event.preventDefault(); el.style.backgroundColor = "yellow"; }); el.addEventListener("dragleave", function() { el.style.backgroundColor = ""; }); el.addEventListener("drop", function(event) { event.preventDefault(); const draggedElement = document.querySelector(".drag-area"); el.appendChild(draggedElement); el.style.backgroundColor = ""; }); } } } } </script> <style> .container { display: flex; justify-content: center; align-items: center; height: 100vh; } .drag-area { display: flex; justify-content: center; align-items: center; width: 100px; height: 100px; background-color: #efefef; border: 1px solid #ccc; cursor: grab; } .drop-area { display: flex; justify-content: center; align-items: center; width: 200px; height: 200px; background-color: #eee; border: 1px dashed #ccc; } </style> ``` 在上面的代码中,我们定义了两个指令 `v-draggable` 和 `v-droppable`,分别用于实现元素拖动容器放置。在 `v-draggable` 指令中,我们监听鼠标事件来实现元素拖动,同时设置了 `cursor` 样式来改变鼠标指针的形状。在 `v-droppable` 指令中,我们监听了三个事件来实现容器放置:`dragover`、`dragleave` 和 `drop`。其中 `dragover` 和 `dragleave` 用于设置容器的背景颜色,以提示用户当前的操作状态;`drop` 事件中我们将拖动元素添加到容器中,并清除容器的背景颜色。 注意:以上示例只是一个简单的实现,还有很多细节需要考虑,比如拖动元素时的边界限制、容器元素的排序等问题。如果需要更复杂的功能,建议使用第三方库来实现,比如 `vuedraggable`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街尾杂货店&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值