自定义事件拖拽组件

coding

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>自定义事件拖拽组件</title>

<style>

#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;

}

#div4{

width:100px;

height:100px;

background:green;

position:absolute;

left:300px;

}

</style>

</head>

<body>

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

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

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

<div id="div4"></div>

</body>

<script>

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

window.onload =function(){

var d1 =new Drag();

d1.init({ //配置参数

id: 'div1'

});

var d2 =new Drag();

d2.init({ //配置参数

id: 'div2'

});

bindEvent(d2, 'toDown', function(){

document.title ='hello';

});

bindEvent(d2, 'toDown', function(){

document.body.style.background ='black';

});

var d3 =new Drag();

d3.init({ //配置参数

id: 'div3'

});

bindEvent(d3, 'toDown', function(){

document.title ='toDown';

});

bindEvent(d3, 'toMove', function(){

document.title ='toMove';

});

bindEvent(d3, 'toUp', function(){

document.title ='toUp';

});

var d4 =new Drag();

d4.init({ //配置参数

id: 'div4'

});

bindEvent(d4, 'toUp', function(){

document.title ='byebye';

});

};

function Drag(){

this.obj =null;

this.disX =0;

this.disY =0;

this.settings = { //默认参数

};

};

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);

fireEvent(This , 'toDown');

document.onmousemove =function(ev) {

var ev = ev || window.event;

This.fnMove(ev);

fireEvent(This, "toMove");

};

document.onmouseup =function(ev) {

var ev = ev || window.event;

This.fnUp();

fireEvent(This, 'toUp');

};

returnfalse;

};

};

Drag.prototype.fnDown =function(ev){

this.disX = ev.clientX -this.obj.offsetLeft;

this.disY = ev.clientY -this.obj.offsetTop;

};

Drag.prototype.fnMove =function(ev){

this.obj.style.left = ev.clientX -this.disX +'px';

this.obj.style.top = ev.clientY -this.disY +'px';

};

Drag.prototype.fnUp =function(){

document.onmousemove =null;

document.onmouseup =null;

};

function bindEvent(obj, events, fn){

obj.listeners = obj.listeners || {};

obj.listeners[events] = obj.listeners[events] || [];

obj.listeners[events].push(fn);

if(obj.nodeType){

if(obj.addEventListener){

obj.addEventListener(events, fn, false);

}

else{

obj.attachEvent('on'+ events, fn);

}

}

};

function fireEvent(obj,events){ //主动触发自定义事件

if(obj.listeners && obj.listeners[events]){

for(var i in obj.listeners[events]){

obj.listeners[events][i]();

}

}

};

function extend(child, partent) {

var child = child || {};

for(var i in partent) {

if(typeof partent[i] ==="object") {

child[i] = (partent[i].constructor == Array) ? [] : {};

extend(child[i], partent[i]);

}else {

child[i] = partent[i];

}

}

};

/*---------------------------

功能:停止事件冒泡

---------------------------*/

function stopBubble(e) {

//如果提供了事件对象,则这是一个非IE浏览器

if ( e && e.stopPropagation )

//因此它支持W3C的stopPropagation()方法

e.stopPropagation();

else

//否则,我们需要使用IE的方式来取消事件冒泡

window.event.cancelBubble =true;

};

//阻止浏览器的默认行为

function stopDefault(e) {

//阻止默认浏览器动作(W3C)

if ( e && e.preventDefault )

e.preventDefault();

//IE中阻止函数器默认动作的方式

else

window.event.returnValue =false;

returnfalse;

};

</script>

</html>

以上是 自定义事件拖拽组件 的全部内容, 来源链接: utcz.com/z/508671.html

回到顶部