@ng1005/chrome-extension-common
Version:
chrome扩展通用库--消息与storage
70 lines (66 loc) • 1.65 kB
text/typescript
export class DomDragService{
move:boolean;
isEnabled:boolean;
el:HTMLElement|null;
constructor (el?:HTMLElement|null) {
this.move=false;
this.isEnabled=false;
this.el=null;
}
/**
* 禁止移动
*/
disabled(){
this.isEnabled=false;
}
/**
* 可移动
*/
enabled(){
this.isEnabled=true;
}
drag(el:HTMLElement|null){
let _x:number,_y:number;
let _this=this;
this.isEnabled=true;
el=el||this.el
if(!el)return;
let rect=el.getBoundingClientRect()
const handlerMousedown=(evt:MouseEvent)=>{
if(_this.isEnabled===false){
return;
}
rect=el.getBoundingClientRect()
_x=evt.pageX-parseInt(el.offsetLeft.toString())
_y=evt.pageY-parseInt(el.offsetTop.toString())
_this.move=true;
}
const handlerMousemove=(evt:MouseEvent)=>{
if(_this.isEnabled===false){
return;
}
// console.log('rect---',rect)
if(_this.move){
el.style.left=evt.pageX-_x+'px';
el.style.top=evt.pageY-_y+'px';
}
}
const handlerMouseup=(evt:MouseEvent)=>{
if(_this.isEnabled===false){
return;
}
_this.move=false;
}
if(_this.el){
_this.el.addEventListener('mousedown',handlerMousedown);
_this.el.addEventListener('mousemove',handlerMousemove);
_this.el.addEventListener('mouseup',handlerMouseup);
_this.el=el
}
el.addEventListener('mousedown',handlerMousedown);
el.addEventListener('mousemove',handlerMousemove);
el.addEventListener('mouseup',handlerMouseup);
}
}
const $drag=new DomDragService()
export default $drag