面向对象组件开发-自定义事件实例 发表于 2017-12-19 | 分类于 javascript | | 阅读次数 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149<!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><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'}) var d3 = new Drag(); d3.init({ //配置参数 id : 'div3'});bindEvent(d3,'toDown',function(){document.title = '妙味';})bindEvent(d3,'toUp',function(){document.title='课堂';}) var d4 = new Drag(); d4.init({ //配置参数 id : 'div4'});bindEvent(d4,'toUp',function(){document.title = 'beybye';})};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); }; document.onmouseup = function(){ This.fnUp(); fireEvent(This,'toUp'); }; return false; };};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 extend(obj1,obj2){ for(var attr in obj2){ obj1[attr] = obj2[attr]; }}// 自定义事件---绑定事件function bindEvent(obj,event,fn){obj.lisenters=obj.lisenters||{};obj.lisenters[event]=obj.lisenters[event]||[];obj.lisenters[event].push(fn);if(obj.nodeType){ if(obj.addEventListener){ obj.addEventListener(event,fn,false) }else{ obj.attachEvent('on'+event,fn) } }}function fireEvent(obj,event){ if(obj.lisenters && obj.lisenters[event]){ for(var i=0;i<obj.lisenters[event].length;i++){ obj.lisenters[event][i](); } }}</script></head><body> <div id="div1"></div> <div id="div2"></div> <div id="div3"></div> <div id="div4"></div></body></html>