vue 原型设计 拖拽_基于Vue实现拖拽效果

本文介绍了在Vue中实现拖拽功能的方法,详细解析了clientY、pageY、screenY、layerY和offsetY的区别,并提供了两种实现拖拽的代码示例,包括直接在组件中实现和通过自定义指令实现。
摘要由CSDN通过智能技术生成

效果图

分清clientY pageY screenY layerY offsetY的区别

在我们想要做出拖拽这个效果的时候,我们需要分清这几个属性的区别,这几个属性都是计算鼠标点击的偏移值,我们需要对其进行了解才可以继续实现我们的拖拽效果

clientY 指的是距离可视页面左上角的距离

pageY 指的是距离可视页面左上角的距离(不受页面滚动影响)

screenY 指的是距离屏幕左上角的距离

layerY 指的是找到它或它父级元素中最近具有定位的左上角距离

offsetY 指的是距离它自己左上角的距离

一张图带大家简单了解了解

在我们简单了解完这些个属性以后,有几个属性需要分清。

相同点

不同点

clientY

距离页面左上角距离

受页面滚动的影响

pageY

距离页面左上角的距离

不受页面滚动影响

相同点

不同点

layerY

距离元素的左上角距离

受元素的定位的影响,会从本元素往上找到第一个定位的元素的左上角

offsetY

距离元素左上角的距离

计算相对于本元素的左上角,不在乎定位问题,计算的是内交点。是IE浏览器的特有属性

实现拖拽功能

我们既然熟悉了这几个偏移属性的意思,那么我们就进入我们的重点。话不多说直接上代码

// darg.html

#app{

position: relative; /*定位*/

top: 10px;

left: 10px;

width: 200px;

height: 200px;

background: #666; /*设置一下背景*/

}

{{positionX}}

{{positionY}}

//main.js

let app = new Vue({

el:'#app',

data:{

positionX:0,

positionY:0,

},

methods:{

move(e){

let odiv = e.target; //获取目标元素

//算出鼠标相对元素的位置

let disX = e.clientX - odiv.offsetLeft;

let disY = e.clientY - odiv.offsetTop;

document.onmousemove = (e)=>{ //鼠标按下并移动的事件

//用鼠标的位置减去鼠标相对元素的位置,得到元素的位置

let left = e.clientX - disX;

let top = e.clientY - disY;

//绑定元素位置到positionX和positionY上面

this.positionX = top;

this.positionY = left;

//移动当前元素

odiv.style.left = left + 'px';

odiv.style.top = top + 'px';

};

document.onmouseup = (e) => {

document.onmousemove = null;

document.onmouseup = null;

};

}

},

computed:{},

});

当然,我们可以将它绑定为一个自定义指令,这样的话就可以用调用指令的形式来实现拖拽效果,下面是定义自定义指令的代码

// darg.html

#app{

position: relative; /*定位*/

top: 10px;

left: 10px;

width: 200px;

height: 200px;

background: #666; /*设置一下背景*/

}

//main.js

let app = new Vue({

el:'#app',

data:{},

methods:{},

directives: {

drag: {

// 指令的定义

bind: function (el) {

let odiv = el; //获取当前元素

oDiv.onmousedown = (e) => {

//算出鼠标相对元素的位置

let disX = e.clientX - odiv.offsetLeft;

let disY = e.clientY - odiv.offsetTop;

document.onmousemove = (e)=>{

//用鼠标的位置减去鼠标相对元素的位置,得到元素的位置

let left = e.clientX - disX;

let top = e.clientY - disY;

//绑定元素位置到positionX和positionY上面

this.positionX = top;

this.positionY = left;

//移动当前元素

odiv.style.left = left + 'px';

odiv.style.top = top + 'px';

};

document.onmouseup = (e) => {

document.onmousemove = null;

document.onmouseup = null;

};

};

}

}

}

});

最后

到这里我们就已经把拖拽效果用Vue实现了,我们用了两种不同的方式实现了拖拽,但实际上换汤不换药,我们需要弄清楚pageY、screenY、clientY、layerY、offsetY等区别。当然我们同时也学习了Vue的一些方法,例如自定义指令等。

成功不在一朝一夕间,我们都需要努力

原创文章,转载需联系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值