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.offsetXvar disy = e.offsetYdocument.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>