vue 基于html5,vue 中基于html5 drag drap的拖放效果案例分析

事情是这样的,右边有各种控件,可以拖动到右边自由区,在自由区内可以随意拖动。

2817e2d7d928b14d87be2e98e2407897.png

案例一:

开始的我,so easy! 通过绑定元素的mousedown 事件,监听鼠标的mousemove,和mouseup 事件,于是我轻松实现了同一区域内元素可以拖着跑,上代码!

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

// 移动当前元素

odiv.style.left = left + 'px'

odiv.style.top = top + 'px'

}

document.onmouseup = e => {

document.onmousemove = null

document.onmouseup = null

}

}

注意一点,被拖拽对象区域要设置position:relative, 否则的元素会自己抖动。

以上代码并不能满足需要,要左右布局,左边的拖到右边,在右边区域随便拖动。

案例二:

好吧,首先我来布个局,左右布局,给元素绑定事件,上代码!

事件绑定方法:

dragstart (ev) {

console.log('dragstart拖拽开始事件,绑定于被拖拽元素上', event)

ev.dataTransfer.setData('Text', ev.target.id)

this.offsetX = ev.offsetX

this.offsetY = ev.offsetY

console.log(this.offsetX + '-' + this.offsetY)

},

draging (e) {

// console.log('拖动中')

var x = e.clientX

var y = e.clientY

// console.log('shubiao client')

if (x > 300) {

console.log(this.tags)

// drag事件最后一刻,无法读取鼠标的坐标,pageX和pageY都变为0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值