码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象组件开发-拖拽

时间:2018-02-05 17:04:16      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:设置   client   apt   tin   post   cli   div   element   面向   

<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];
    }
}

  

面向对象组件开发-拖拽

标签:设置   client   apt   tin   post   cli   div   element   面向   

原文地址:https://www.cnblogs.com/yangxue72/p/8418018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!