vue 拖拽【对多个div进行操作】
一、原理分析onmousedown事件var disX=ev.clientX-oDiv.offsetLeftvar disY=ev.clientY-oDiv.offsetToponmousemove事件var l=ev.clientX-disX;var t=ev.clientY-disY;二、代码实例【可以直接运行】<div ref="demo"...
·
一、原理分析
onmousedown事件
var disX=ev.clientX-oDiv.offsetLeft
var disY=ev.clientY-oDiv.offsetTop
onmousemove事件
var l=ev.clientX-disX;
var t=ev.clientY-disY;
二、代码实例【可以直接运行】
<div ref="demo">
<article v-for="item in divData" :key="item.id" :ref="'container-' + item.id" @click="clickHandle(item.id)" @mousedown="mouseDownHandle(item.id, $event)" @mouseup="mouseUpHandle(item.id, $event)">
<div>{{item.titlie}}---{{item.id}}</div>
<div>{{item.titlie}}---{{item.id}}</div>
<div>{{item.titlie}}---{{item.id}}</div>
</article>
</div>
data() {
return {
divData:[
{titlie: '测试一', id:'001'},
{titlie: '测试二', id:'002'},
{titlie: '测试三', id:'003'},
{titlie: '测试四', id:'004'},
{titlie: '测试五', id:'005'}
],
moveData: {},
activeMove: null
};
},
methods: {
// 拖拽-鼠标放下
mouseDownHandle (id, event) {
this.activeMove = id
//this.clickHandle(id)
if (this.moveData[id]) {
this.moveData[id].x = event.pageX - this.$refs[`container-${id}`][0].offsetLeft,
this.moveData[id].y = event.pageY - this.$refs[`container-${id}`][0].offsetTop
} else {
this.moveData[id] = {
x: event.pageX - this.$refs[`container-${id}`][0].offsetLeft,
y: event.pageY - this.$refs[`container-${id}`][0].offsetTop
}
}
event.currentTarget.style.cursor = 'move'
window.onmousemove = this.mouseMoveHandle
},
// 拖拽-鼠标移动
mouseMoveHandle (event) {
let moveLeft = event.pageX - this.moveData[this.activeMove].x + 'px'
let moveTop = event.pageY - this.moveData[this.activeMove].y + 'px'
console.log(event)
this.$refs[`container-${this.activeMove}`][0].style.left = moveLeft
this.$refs[`container-${this.activeMove}`][0].style.top = moveTop
},
// 拖拽-鼠标离开
mouseUpHandle (id, event) {
window.onmousemove = null
event.currentTarget.style.cursor = 'move'
},
}
article:nth-of-type(1){
cursor: move;
background-color: silver;
position: absolute;
top: 20px;
left: 50px;
width: 199px;
height: 100px;
box-shadow: 0 2px 24px 2px hsla(205, 7%, 52%, .3);
}
article:nth-of-type(2){
cursor: move;
background-color: silver;
position: absolute;
top: 420px;
left: 50px;
width: 199px;
height: 100px;
box-shadow: 0 2px 24px 2px hsla(205, 7%, 52%, .3);
}
article:nth-of-type(3){
cursor: move;
background-color: silver;
position: absolute;
top: 420px;
right: 30px;
width: 199px;
height: 100px;
box-shadow: 0 2px 24px 2px hsla(205, 7%, 52%, .3);
}
article:nth-of-type(4){
cursor: move;
background-color: silver;
position: absolute;
top: 620px;
left: 30px;
width: 199px;
height: 100px;
box-shadow: 0 2px 24px 2px hsla(205, 7%, 52%, .3);
}
article:nth-of-type(5){
cursor: move;
background-color: silver;
position: absolute;
top: 60px;
right: 30px;
width: 199px;
height: 100px;
box-shadow: 0 2px 24px 2px hsla(205, 7%, 52%, .3);
}
更多推荐
已为社区贡献17条内容
所有评论(0)