const drag = {
|
mounted(el, binding) {
|
const dragBox = document.querySelector('#' + binding.arg)
|
//鼠标点击距离box盒子left的距离
|
let spotToBoxLeft = 0
|
let spotToBoxTop = 0
|
|
const mouseupFun = e => {
|
window.removeEventListener('mousemove', mousemoveFun)
|
window.removeEventListener('mouseup', mouseupFun)
|
}
|
|
const mousemoveFun = evt => {
|
//获取body宽高,获取拖动盒子的宽高
|
const { offsetWidth: bodyWidth, offsetHeight: bodyHeight } = document.body
|
const { offsetWidth: boxWidth, offsetHeight: boxHeight } = dragBox
|
//max取最大值,min取最小值
|
const left = Math.max(evt.clientX - spotToBoxLeft, 0)
|
const top = Math.max(evt.clientY - spotToBoxTop, 0)
|
dragBox.style.left = Math.min(left, bodyWidth - boxWidth) + 'px'
|
dragBox.style.top = Math.min(top, bodyHeight - boxHeight) + 'px'
|
}
|
|
el.__mousedownFun = evt => {
|
//鼠标坐标减去 box盒子相对于父盒子body 的距离
|
spotToBoxLeft = evt.clientX - dragBox.offsetLeft
|
spotToBoxTop = evt.clientY - dragBox.offsetTop
|
window.addEventListener('mousemove', mousemoveFun)
|
window.addEventListener('mouseup', mouseupFun)
|
}
|
el.addEventListener('mousedown', el.__mousedownFun)
|
},
|
|
// 绑定元素的父组件卸载前调用
|
beforeUnmount(el, binding) {
|
el.removeEventListener('mousedown', el.__mousedownFun)
|
},
|
}
|
|
export default drag
|