1.在vue中的使用方法:
![指令](https://img-blog.csdnimg.cn/07573d91bdb8471ca1795807532c48e9.png)
drawPortBox:{ parent:'drawPortBox',isCandrag:['title']}
参数内容 title是生效的区域的class名 drawPortBox是我当前生效的被拖动的框的id名
2. 工具类directive.js内容:
export default {
install(Vue) {
Vue.directive('candrag', {
inserted(el, {value}) {
const preventDefault = (ev)=>{
if (ev.preventDefault) {
ev.preventDefault()
} else {
ev.returnValue = false
}
}
const move = (e,el,disx,disy)=>{
let left = e.clientX - disx;
let top = e.clientY - disy;
if ( left <= 0) {
left = 5
} else if (left > document.documentElement.clientWidth - el.clientWidth) {
left = document.documentElement.clientWidth - el.clientWidth - 5
}
if ( top <= 0) {
top = 5
} else if (top > document.documentElement.clientHeight - el.clientHeight) {
top = document.documentElement.clientHeight - el.clientHeight - 5
}
el.style.left = left + 'px'
el.style.top= top + 'px'
}
const onmouseup =()=>{
el.style.cursor = 'default'
document.onmousemove = null
document.onmouseup = null
}
if (!value) {
el.onmousedown = (ev) => {
el.style.cursor = 'move'
var disx = ev.pageX- el.offsetLeft;
var disy = ev.pageY- el.offsetTop;
preventDefault(ev)
document.onmousemove = (e)=> {
move(e,el,disx,disy)
}
}
el.onmouseup = ()=> onmouseup()
} else {
el.onmousedown = (ev) => {
let className = ev.target.className
let controllable = value.isCandrag
let state = controllable.includes(className)
if(!state) return
el.style.cursor = 'move'
var disx = ev.pageX- el.offsetLeft;
var disy = ev.pageY- el.offsetTop;
preventDefault(ev)
document.onmousemove = (e)=> {
move(e,el,disx,disy)
}
}
}
el.onmouseup = ()=> onmouseup()
}
})
}
}
在main中注册工具类后 就可以直接使用
import candrag from './utils/directive'
Vue.use(candrag)