面向对象组件开发-拖拽

Posted carol72

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象组件开发-拖拽相关的知识,希望对你有一定的参考价值。

<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>

CSS

#div1{
	width: 100px;
	height: 100px;
	background: red;
	position: absolute;
}
#div2{
	width: 100px;
	height: 100px;
	background: yellow;
	position: absolute;
	left: 100px;
}
#div3{
	width: 100px;
	height: 100px;
	background: blue;
	position: absolute;
	left: 200px;
}

JS

/*
组件开发:多组对象,像兄弟之间的关系(代码复用的一种形式)


 * */
//拖拽
function Drag(){
	this.obj=null;
    this.disX=0;
    this.disY=0;
    
    this.settings={ //默认参数
    	toDown:function(){},
    	toUp:function(){}
    };
}
Drag.prototype.init=function(opt){
    var This=this;
   	this.obj=document.getElementById(opt.id);
   	extend(this.settings,opt);
    this.obj.onmousedown=function(ev){
        var ev=ev||window.event;
        This.fnDown(ev);
        
        This.settings.toDown();
        document.onmousemove=function(ev){
	        var ev=ev||window.event; 
	        This.fnMove(ev);
	    };
	    document.onmouseup=function(ev){
	        var ev=ev||window.event; 
	        This.fnUp(ev);
	        
	        This.settings.toUp();
	    };
        //清除默认事件
        return false;
    }
}
Drag.prototype.fnDown=function(ev){
    var This=this;
    this.disX=ev.clientX-this.obj.offsetLeft;
    this.disY=ev.clientY-this.obj.offsetTop;
     
    //设置全局捕获
    //所有的onmousemove或者onmouseup都被oImg截获,然后作用在oImg身上
    if(this.obj.setCapture){
        this.obj.setCapture();
    }
     
    document.onmousemove=function(ev){
        var ev=ev||window.event; 
        This.fnMove(ev);
    };
    document.onmouseup=function(ev){
        var ev=ev||window.event; 
        This.fnUp(ev);
    };
}
Drag.prototype.fnMove=function(ev){
    var L=ev.clientX-this.disX;
    var T=ev.clientY-this.disY;
     
    this.obj.style.left=L+‘px‘;
    this.obj.style.top=T+‘px‘;
}
Drag.prototype.fnUp=function(){
    document.onmousemove=null;
    //释放全局捕获
    if(this.obj.releaseCapture){
        this.obj.releaseCapture();
    }
}
var dl=new Drag();
dl.init({ //配置参数
	id:‘div1‘
});

var d2=new Drag();
d2.init({ //配置参数
	id:‘div2‘,
	toDown:function(){
		document.title=‘hello‘;
	}
});

var d3=new Drag();
d3.init({ //配置参数
	id:‘div3‘,
	toDown:function(){
		document.title=‘你好‘;
	},
	toUp:function(){
		document.title=‘BeyBey‘;
	}
});

function extend(obj1,obj2){
    for (var attr in obj2) {
        obj1[attr]=obj2[attr];
    }
}

  

以上是关于面向对象组件开发-拖拽的主要内容,如果未能解决你的问题,请参考以下文章

前端开发者的福音!通过拖拽就可生成Vue代码的平台来了!

js面向对象开发之--元素拖拽

面向对象开发DialogComponent组件

VSCode自定义代码片段——JS中的面向对象编程

用面向对象写一个拖拽,并实现继承

VSCode自定义代码片段9——JS中的面向对象编程