前言
很多时候我们写的方法是通用的,这个时候根据使用场景可以选择放在js或者ts文件并让其他文件引入使用,但如果是对现有组件添加新功能的话,还是建议用自定义指令更方便。
设置v-draggin来操作dom元素的拖拽
1. 在main.js 全局添加自定义指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | const app = createApp(App) app.directive( 'dragging' ,{ mounted(el, binding, vnode) { // console.log(el, binding, vnode); el.addEventListener( 'mousedown' , (e:any) => { // console.log(e); let ol = e.clientX - el.offsetLeft; let ot = e.clientY - el.offsetTop; // 给document绑定一个onmousemove事件 document.onmousemove = function (e2:any) { e2 = e2 || window.event; let left = e2.clientX - ol; let top = e2.clientY - ot; //修改el的位置 el.style.left = left + "px" ; el.style.top = top + "px" ; }; document.onmouseup = function () { document.onmousemove = null ; document.onmouseup = null ; }; }) } }); |
2. 在需要使用拖拽功能的dom元素上添加v-dragging
1 2 3 | < div id="imgId" width="125" height="125" v-dragging ></ div > < img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" v-dragging /> |
如果需要在UI组件例如ant vue这样的使用,则需要修改代码
main.ts :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | const app = createApp(App) app.directive( 'dragging' ,{ mounted(el, binding, vnode) { // console.log(el, binding, vnode); el = el.parentNode.parentElement; //定位到父级元素 el.addEventListener( 'mousedown' , (e:any) => { // console.log(e); let ol = e.clientX - el.offsetLeft; let ot = e.clientY - el.offsetTop; // 给document绑定一个onmousemove事件 document.onmousemove = function (e2:any) { e2 = e2 || window.event; let left = e2.clientX - ol; let top = e2.clientY - ot; //修改el的位置 el.style.left = left + "px" ; el.style.top = top + "px" ; }; document.onmouseup = function () { document.onmousemove = null ; document.onmouseup = null ; }; }) } }); |
页面内:
1 2 3 4 5 6 7 | <a-button type= "primary" @click= "showModal" >Open Modal {{ visible }} </a-button> <a-modal v-model:visible= "visible" title= "Basic Modal" @ok= "handleOk" > <p v-dragging>Some contents...</p> <p>Some contents...</p> <p>Some contents...</p> </a-modal> |
效果图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具