vue项目:点击拖拽盒子;移动盒子;
代码可直接复制:(注意需要在移动的盒子上添加 v-指令 注意采用固定定位)
<template>
<div class="far_box">
<div>{{ msg }}</div>
<!-- v-drag指令 -->
<div v-drag class="move_box">目标盒子</div>
</div>
</template>
<script>
export default {
// 指令
directives: {
drag (el) {
// console.log('el', el)
// 鼠标移动到目标盒子上--监听鼠标按下事件
el.onmousedown = function (e) {
// console.log('e1', e)
// 计算出此时点击目标盒子 相对于自己的左上角距离(目的是为了下方位移时候 赋值减去相应的自己左上角位置 保证盒子定位点还是自己点击的点 而不是左上角点)
// vue项目对于原生的dom操作 其实就是在方法内 也就是js内 使用原生的方法对元素进行dom操作 和普通的js操作一样
var disx = e.offsetX
var disy = e.offsetY
document.onmousemove = function (e2) {
var move_box = document.getElementsByClassName('move_box')[0]
move_box.style.position = 'fixed'
move_box.style.left = e2.clientX - disx + 'px'
move_box.style.top = e2.clientY - disy + 'px'
// console.log('最后的定位:', e2.clientX - disx, e2.clientY - disy, e2)
}
document.onmouseup = function () {
document.onmousemove = document.onmouseup = null
}
}
}
},
data () {
return {
msg: '其他盒子元素'
}
}
}
</script>
<style lang="less" scope>
.far_box {
.move_box {
position: fixed;
top: 0;
left: 0;
background-color: #1fff;
width: 100px;
height: 50px;
line-height: 50px;
}
.move_box:active {
background-color: #1f1f;
}
}
</style>