欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 【vue】用vue实现拖拽/删除效果

【vue】用vue实现拖拽/删除效果

2024/10/24 1:50:35 来源:https://blog.csdn.net/MinfCONS/article/details/140355805  浏览:    关键词:【vue】用vue实现拖拽/删除效果

这周接了个小外包,要求用vue实现如下图的拖拽效果

在这里插入图片描述

原理

@mousedown监听鼠标按下,按下后开启mousemove + mouseup监听器,并根据clientY + offsetTop计算出元素新的top高度进行赋值,实现元素跟随。具体源码如下

<div title="demo" class="icon" @mousedown="demo"><img src="../assets/logo.png" alt=""><div class="icon_title" :style="{display: state.isShow ? 'block' : 'none'}">拖拽下拉新增书签 <br /> 拖回顶部删除书签</div>
</div>
demo(e) {//去除默认样式 - 避免拖动元素出现禁止图标e.preventDefault && e.preventDefault();//获取目标元素let odiv = e.target;//算出鼠标相对元素的位置let disY = e.clientY - odiv.offsetTop;let item = {top: 0,id: 1,url: '/src/assets/logo.png'}//监听鼠标移动事件document.onmousemove = (e) => { //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置let top = e.clientY - disY;//重新赋值item.top = top;};//监听鼠标松开document.onmouseup = (e) => {document.onmousemove = null;document.onmouseup = null;//赋值this.itemLeft.push(item)};
},

参考链接:另一个Vue拖拽的学习参考链接:关于clientY等参数的具体计算

困难

  • 鼠标按下后移动,会进入元素拖动事件并出现鼠标禁止图标。这会打断mousemove的监听效果。搜了半天,都说在html写个 dragglable=“true” 属性就行,然并卵。最终是在js里一行代码实现了。
//去除默认样式 - 避免拖动元素出现禁止图标
e.preventDefault && e.preventDefault();
  • 按下时元素要跟随鼠标,这就需要计算鼠标在按下时相对元素的位置,移动时重赋值时也需要计算上这个相对位置。这并不是一件很好理解的事情,让我绕了好久,还是看上文的参考链接学会的。

本文只是实现拖拽功能,记录一下,希望日后再面对相似需求时可以做到炉火纯青。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com