vue全局自定义拖拽指令

本文详细介绍了如何在Vue项目中创建一个全局的自定义拖拽指令,通过JavaScript实现元素的拖放功能,增强用户体验。内容包括指令的注册、绑定、事件监听以及拖放逻辑的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


// 全局自定义拖拽组件
export default (Vue) => {
    Vue.directive('drag', {
        //1.指令绑定到元素上回立刻执行bind函数,只执行一次
        //2.每个函数中第一个参数永远是el,表示绑定指令的元素,el参数是原生js对象
        bind: function (el, elementObj) {
            let dragBox = el; //获取当前元素
            dragBox.style.position = 'absolute'; // 拖拽元素使用定位,脱离文档流
            dragBox.onmousedown = e => {
                //鼠标相对元素的位置
                let disX = e.clientX - dragBox.offsetLeft;
                let disY = e.clientY - dragBox.offsetTop;
                document.onmousemove = e => {
                    //鼠标的位置减去鼠标相对元素的位置,得到元素的位置
                    let left = e.clientX - disX;
                    let top = e.clientY - disY;
                    //移动当前元素
                    dragBox.style.left = left + 'px';
                    dragBox.style.top = top + 'px';
                };
                document.onmouseup = e => {
                    //鼠标弹起来的时候不再移动
                    document.onmousemove = null;
                    //预防鼠标弹起来后还会循环(即预防鼠标放上去的时候还会移动)
                    document.onmouseup = null;
                    // 对外暴露元素相对于父级位置
                };
                e.preventDefault();
            };
        }
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值