首页 > 编程 > JavaScript > 正文

JavaScript实现的浮动层框架用法实例分析

2019-11-20 11:28:47
字体:
来源:转载
供稿:网友

本文实例讲述了JavaScript实现的浮动层框架用法。分享给大家供大家参考。具体如下:

这是一个JavaScript编写的浮动层框架,作为框架来说,骨干已经完成了。可以实现“类”、“构造函数”、“继承”(木有实现多继承)、“静态方法”、“重载”(木有实现多态),对我来说主要的意义就是,我喜欢这种代码风格,可以非常简单的重用和二次开发。

运行效果截图如下:

在线演示地址如下:

http://demo.VeVB.COm/js/2015/js-float-win-fra-demo/

具体代码如下:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>Hutia Javascript Framework</title><script>function ClassAdapter(a) { var d, c = a || new Function, b = void 0, f = Math.random(); d = function(b) {  this.constructor = c;  this["class"] = d;  for(var a in e) {   this[a] = e[a]  }  var f;  b != "</!-- /* n@o!t#h$i(n&g1 4l5i7k9e24- th69at9 - hutia */ --/>" && (f = c.apply(this, arguments));  f = f || this;  if(f != this) {   for(a in this) {    f[a] = this[a]   }   f.constructor = c  }  return f }; var e = {su:function() {  var b = this["class"].get_parent();  if(!b) {   return null  }  this.su = function(a) {   return b.prototype[a].apply(this, Array.prototype.slice.apply(arguments).slice(1))  };  return b.get_constructor().apply(this, arguments) }, get_class:function() {  return this["class"] }, same_instanceof:function(b, a) {  if(!b || !b.get_class) {   return!1  }  return this["class"][a ? "equals" : "is_descent"](b.get_class()) }, is_instanceof:function(b, a) {  return this["class"][a ? "equals" : "is_descent"](b) }, trace:function(b) {  if(typeof window == "undefined") {   return this.out(b && b.description || b)  }  if(!window.__log__) {   window.__log__ = []  }  window.__log__.push(b && b.description || b) }, out:function(b) {  typeof alert != "undefined" ? alert(b) : typeof WScript != "undefined" && WScript.Echo(b) }}, a = {is_class:!0, extend:function(b) {  b = new ClassAdapter(b || c);  b.set_parent(d);  b.prototype = new d("</!-- /* n@o!t#h$i(n&g1 4l5i7k9e24- th69at9 - hutia */ --/>");  return b }, equals:function(b) {  if(!b || !b.is_class) {   return!1  }  return f == b.get_clsid() }, is_descent:function(a) {  if(!a || !a.is_class) {   return!1  }  if(f == a.get_clsid()) {   return!0  }  for(var c = b;c;) {   if(c.equals(a)) {    return!0   }   c = c.get_parent()  }  return!1 }, is_instance:function(b, a) {  return b && b.is_instanceof ? b.is_instanceof(this, a) : !1 }, method:function(b, a) {  if(arguments.length == 1) {   for(var c in b) {    d.prototype[c] = b[c]   }  }else {   d.prototype[b] = a  }  return d }, _default:function(b, a) {  if(arguments.length == 1) {   for(var c in b) {    d.prototype[c] = b[c]   }  }else {   d.prototype[b] = a  }  return d }, _statics:function(b, a) {  if(arguments.length == 1) {   for(var c in b) {    d[c] = b[c]   }  }else {   d[b] = a  }  return d }, get_constructor:function() {  return c }, set_constructor:function(b) {  c = b }, get_parent:function() {  return b }, set_parent:function(a) {  b = a }, get_clsid:function() {  return f }, toString:function() {  return String(c) }, valueOf:function() {  return String(c) }}; d.prototype = e; for(var h in a) {  d[h] = a[h] } return d}function Class(a) { function d() {  if(++a.err_count > a.max_err) {   var b;   a.onerror && (b = a.onerror());   return b  }  a.recall_timer = setTimeout(function() {   Class(a)  }, a.retry_interval || 100) } if(!a) {  return new ClassAdapter } var c; c = void 0; if(!Class.hash_list) {  Class.hash_list = {} } a.namespace = a.namespace || window; a.err_count |= 0; a.max_err = a.max_err || 5; a.name = a.name || "$" + (new Date).getTime().toString(36) + (Math.random() * 16777215 | 0).toString(36); a.recall_timer = null; Class.hash_list[a.name] = a; if(a.requires) {  if(typeof a.requires == "string") {   a.requires = [a.requires]  }  for(var b in a.requires) {   if("undefined" == typeof a.namespace[a.requires[b]]) {    return d()   }  } } if(a.parent) {  if("undefined" == typeof a.namespace[a.parent]) {   return d()  }  a.parent = a.namespace[a.parent] } if(typeof a == "function") {  c = a }else {  if(a.init) {   c = a.init  } } c = a.parent ? a.parent.extend(c) : new ClassAdapter(c); a.method && c.method(a.method); a._default && c._default(a._default); a._statics && c._statics(a._statics); a.namespace[a.name] = c; a.ready && a.ready()}Class.is_ready = function(a) { if(Class.hash_list && Class.hash_list[a] && !Class.hash_list[a].recall_timer) {  return!0 } return!1};Class.ready = function(a, d, c) { function b() {  var c = !0;  if(d) {   for(var f in d) {    if(!Class.hash_list[d[f]] || Class.hash_list[d[f]].recall_timer) {     c = !1;     break    }   }  }else {   for(f in Class.hash_list) {    if(Class.hash_list[f].recall_timer) {     c = !1;     break    }   }  }  if(!c) {   return setTimeout(b, 10)  }  a() } var f; typeof d == "string" && (d = [d]); c ? (f = window.onload, window.onload = function() {  setTimeout(b, 1);  typeof f == "function" && f() }) : setTimeout(b, 1)};(function() { Class({name:"SingleHash", init:function() {  this.data = {} }, method:{add:function(a) {  this.data[a] = a;  return this }, remove:function(a) {  delete this.data[a];  return this }, each:function(a) {  for(var d in this.data) {   a(this.data[d])  } }, invoke:function(a) {  var d = Array.prototype.slice.call(arguments, 1), c = void 0, b;  for(b in this.data) {   typeof this.data[b] == "function" && (c = this.data[b].apply(a || this, d))  }  return c }, clear:function() {  this.data = {} }, contains:function(a) {  return!!this.data[a] }}})})();(function() { Class({parent:"SingleHash", name:"Event", init:function(a) {  var d = function(c) {   return d.invoke(a || this, c)  };  d.data = {};  return d }})})();(function() { Class({parent:"HTML", name:"Stylesheet", init:function(a) {  if(a != "-=^&%$#$") {   var d = HTML.create("style", new Stylesheet("-=^&%$#$"), "Stylesheet#", !0);   d.set(a);   return d  } }, method:{index_of:function(a) {  for(var d = 0;d < this.rules.length;d++) {   if(this.rules[d].selectorText == a) {    return d   }  }  return-1 }, remove:function(a) {  typeof a != "number" && (a = this.index_of(a));  a = parseInt(a);  !isNaN(a) && a > -1 && a < this.rules.length && (this._sheet.removeRule ? this._sheet.removeRule(a) : this._sheet.deleteRule(a));  return this }, add:function(a, d) {  var c = this.rules.length;  this._sheet.insertRule ? this._sheet.insertRule(a + "{" + d + "}", c) : this._sheet.addRule(a, d, c);  return this }, set:function(a, d) {  if(arguments.length == 1) {   for(var c in a) {    this.set(c, a[c])   }   return this  }  var b = this.index_of(a);  if(b == -1) {   return this.add(a, d)  }  if(typeof d == "string") {   this.rules[b].style.cssText = d  }else {   for(c in d) {    this.rules[b].style[c] = d[c]   }  }  return this }, get:function(a, d) {  if(arguments.length == 0) {   for(var c = [], b = 0;b < this.rules.length;b++) {    c.push(this.rules[b].selectorText + "{ " + this.rules[b].style.cssText + " }")   }   return c  }  b = this.index_of(a);  if(this.rules[b]) {   return d ? this.rules[b].style[d] : this.rules[b].style.cssText  } }}, ready:function() {  var a = HTML._create("style", new Stylesheet("-=^&%$#$"), "Stylesheet#");  document.getElementsByTagName("head")[0].appendChild(a);  a._sheet = a.styleSheet || a.sheet;  a.rules = a._sheet.cssRules || a._sheet.rules }})})();(function() { function a(b, a, e, h) {  var e = e || "#", b = String(b).toLowerCase(), g;  c[e + b] ? g = h ? c[e + b] : c[e + b].cloneNode(!0) : c[e + b] = g = document.createElement(b);  if(!g.proto || !g.proto.same_instanceof(a)) {   g.proto = a, d(g)  }  return g } function d(b) {  for(var a in b.proto) {   b[a] = b.proto[a]  } } var c = {}; Class({name:"HTML", init:function(b) {  if(b) {   return a(b, new HTML)  } }, requires:["Event"], _statics:{_create:function(b, a, e, h) {  var e = e || "#", b = String(b).toLowerCase(), g = document.createElement(b);  if(h) {   for(var i in h.attr) {    g[i] = h.attr[i]   }  }  if(h) {   for(i in h.style) {    g.style[i] = h.style[i]   }  }  g.proto = a;  d(g);  c[e + b] = g;  h && typeof h.ready == "function" && h.ready.apply(g);  return g }, create:a, enhance:function(b, a) {  a = a || new HTML;  if(!b.proto || !b.proto.same_instanceof(a)) {   b.proto = a, d(b)  }  return b }, link:d, cancel_event:function(b) {  b = b || window.event;  b.returnValue = !1;  b.cancelBubble = !0;  b.preventDefault && b.preventDefault();  b.stopPropagation && b.stopPropagation();  return!1 }}, method:{$style:function(b) {  var a = window.getComputedStyle && window.getComputedStyle(this, null) || this.currentStyle;  return b && a[b] || a }, add_class:function(b) {  this.has_class(b) || (this.className += " " + b);  return this }, has_class:function(b) {  return RegExp("//b" + b.replace(/(/W)/g, "//$1") + "//b").test(this.className) }, remove_class:function(b) {  this.className = this.className.replace(RegExp("//b" + b.replace(/(/W)/g, "//$1") + "//b", "g"), "").replace(//s+/g, " ");  return this }, toggle_class:function(b, a) {  this.has_class(b) ? (this.remove_class(b), a && this.add_class(a)) : (this.add_class(b), a && this.remove_class(a)) }, hover_class:function(b, a) {  this.bind("onmouseover", function() {   this.add_class(b);   a && this.remove_class(a)  });  this.bind("onmouseout", function() {   a && this.add_class(a);   this.remove_class(b)  }) }, hide:function() {  this.style.display = "none";  return this }, show:function(b) {  this.style.display = b || "";  return this }, bind:function(b, a) {  if(!Event.is_instance(this[b])) {   var c = this[b];   this[b] = new Event;   this[b].add(c)  }  this[b].contains(a) || this[b].add(a);  return this }, unbind:function(b, a) {  if(!Event.is_instance(this[b])) {   var c = this[b];   this[b] = new Event;   this[b].add(c)  }  this[b].remove(a);  return this }, fire:function(b) {  if(typeof this[b] == "function") {   return this[b].apply(this, Array.prototype.slice.call(arguments, 1))  } }, css:function(b, a) {  if(typeof b == "string") {   this.style.cssText = a ? this.style.cssText + b : b  }else {   for(var c in b) {    this.style[c] = b[c]   }  }  return this }, session:function(b, a) {  function c(b) {   var b = RegExp(";//s*" + escape(b) + "=([^;]+)", "i"), a = ";" + String(document.cookie || "");   return b.test(a) ? unescape(a.match(b)[1]) : ""  }  function d(b, a) {   var c = new Date;   c.setYear(c.getYear() + 10);   document.cookie = escape(b) + "=" + escape(a) + ";expires=" + c.toUTCString() + ";"  }  if(arguments.length == 1) {   return c(b)  }else {   d(b, a)  } }, $width:function(b) {  if(typeof b == "number" && b >= 0) {   this.style.width = b - this.offsetWidth + this.$width() + "px"  }else {   b = this.offsetWidth;   if(b === 0) {    return 0   }   return b - (parseFloat(this.$style("borderLeftWidth")) || 0) - (parseFloat(this.$style("borderRightWidth")) || 0) - (parseFloat(this.$style("paddingLeft")) || 0) - (parseFloat(this.$style("paddingRight")) || 0)  } }, $height:function(b) {  if(typeof b == "number" && b >= 0) {   this.style.height = b - this.offsetHeight + this.$height() + "px"  }else {   b = this.offsetHeight;   if(b === 0) {    return 0   }   return b - (parseFloat(this.$style("borderTopWidth")) || 0) - (parseFloat(this.$style("borderBottomWidth")) || 0) - (parseFloat(this.$style("paddingTop")) || 0) - (parseFloat(this.$style("paddingBottom")) || 0)  } }}})})();(function() { Class({name:"DragHandle", parent:"HTML", method:{unselectable:"on", can_drag:!0, bind_drag_target:function(a) {  this.drag_target = a;  return this }, onmousedown:function(a) {  function d(a) {   a = a || window.event;   b.move_to([a.clientX - f, a.clientY - e])  }  function c() {   document.unbind("onmousemove", d).unbind("onmouseup", c)  }  a = a || window.event;  if(this.can_drag && this.drag_target) {   var b = this.drag_target, f = a.clientX - b.offsetLeft, e = a.clientY - b.offsetTop;   document.bind("onmousemove", d).bind("onmouseup", c)  } }}, ready:function() {  HTML.enhance(document) }})})();(function() { var a = "-=^&%$#$" + Math.random() + (new Date).getTime(), d = 100; Class({name:"WinButton", parent:"HTML", init:function(c, b, d) {  if(c != a) {   var e = HTML.create("a", new WinButton(a), "WinButton#");   e.innerHTML = c;   e.bind("onclick", function() {    d.apply(b)   });   return e  } }, method:{unselectable:"on", href:"javascript:void(0);", target:"_self"}, ready:function() {  HTML._create("a", new WinButton(a), "WinButton#", {attr:{className:"win_button"}}) }}); Class({name:"WinCaptionTitle", parent:"HTML", init:function(c) {  if(c != a) {   return HTML.create("div", new WinCaptionTitle(a), "WinCaptionTitle#")  } }, method:{unselectable:"on"}, ready:function() {  HTML._create("div", new WinCaptionTitle(a), "WinCaptionTitle#", {attr:{className:"win_caption_title"}}) }}); Class({name:"WinCaption", parent:"DragHandle", requires:["WinCaptionTitle", "WinButton"], init:function(c) {  if(c != a) {   var b = HTML.create("div", new WinCaption(a), "WinCaption#");   b.appendChild(new WinButton("[X]", c, function() {    this.close()   }));   b.appendChild(b.$title = new WinCaptionTitle);   return b  } }, method:{unselectable:"on"}, ready:function() {  HTML._create("div", new WinCaption(a), "WinCaption#", {attr:{className:"win_caption"}}) }}); Class({name:"WinButtonBar", parent:"HTML", requires:["Stylesheet", "WinButton"], init:function(c, b) {  if(c != a) {   var d = HTML.create("div", new WinButtonBar(a), "WinButtonBar#");   if(b) {    for(var e in b) {     d.appendChild(new WinButton(e, c, b[e]))    }   }else {    d.hide()   }   return d  } }, method:{unselectable:"on"}, ready:function() {  HTML._create("div", new WinButtonBar(a), "WinButtonBar#", {attr:{className:"win_button_bar"}}) }}); Class({name:"WinBody", parent:"HTML", requires:["Stylesheet"], init:function(c) {  if(c != a) {   return HTML.create("div", new WinBody(a), "WinBody#")  } }, method:{unselectable:"on"}, ready:function() {  HTML._create("div", new WinBody(a), "WinBody#", {attr:{className:"win_body"}}) }}); Class({name:"WinBorder", parent:"HTML", requires:["Stylesheet"], init:function(c) {  if(c != a) {   return HTML.create("div", new WinBorder(a), "WinBorder#")  } }, method:{unselectable:"on"}, ready:function() {  HTML._create("div", new WinBorder(a), "WinBorder#", {attr:{className:"win_border"}}) }}); Class({name:"Win", parent:"HTML", requires:["Stylesheet", "WinCaption", "WinBody", "WinBorder"], init:function(c) {  if(c != a) {   var b = HTML.create("div", new Win(a), "Win#");   b.appendChild(b.border = new WinBorder(b));   b.appendChild(b.caption = new WinCaption(b));   b.appendChild(b.body = new WinBody(b));   b.appendChild(b.button_bar = new WinButtonBar(b, c.buttons));   b.caption.bind_drag_target(b);   if(c) {    b.data = c, b.set_title(c.title)   }   return b  } }, method:{unselectable:"on", type:"win", onmousedown:function() {  this.style.zIndex = d++ }, open:function() {  var a = this.data || {};  document.body.appendChild(this);  this.show();  a.size && this.set_size(a.size);  a.pos ? this.move_to(a.pos) : this.auto_center();  this.style.zIndex = d++;  this.fire("onopen") }, close:function() {  this.hide();  this.fire("onclose") }, set_size:function(a) {  this.$width(a[0]);  this.$height(a[1]);  this.border.$width(a[0]);  this.border.$height(a[1]);  this.body.$width(this.$width());  this.body.$height(this.$height() - this.caption.offsetHeight - this.button_bar.offsetHeight) }, set_title:function(a) {  this.caption.$title.innerHTML = a || "Untitled Window" }, move_to:function(a) {  this.style.left = a[0] + "px";  this.style.top = a[1] + "px" }, auto_center:function() {  var a = window.innerHeight || document.documentElement.clientHeight;  this.move_to([((window.innerWidth || document.documentElement.clientWidth) - this.$width()) / 2, (a - this.$height()) / 2]) }}, ready:function() {  new Stylesheet({".win":"position:absolute; float:left; display:block; padding:0px 5px 5px 5px; -moz-user-select:none; user-select:none; -webkit-user-select:none;", ".win_border":"position:absolute; left:0px; top:0px; float:left; display:block; border:1px solid black; background-color:#888888; opacity:0.7; filter:alpha(opacity=70); -moz-border-radius:5px; -khtml-border-radius:5px; -webkit-border-radius:5px; border-radius: 5px;", ".win_button":"color:navy; font-size:12px; text-decoration:none;",   ".win_button:hover":"color:white; text-decoration:none;", ".win_button_bar":"position:relative; width:100%; line-height:30px; font-size:14px; text-align:center;", ".win_button_bar .win_button":"margin:5px 10px 0px 0px; padding:0px 10px; line-height:24px; background-color:silver; display:inline; zoom:1; display:inline-block;", ".win_caption":"position:relative; width:100%; line-height:30px; font-size:14px; cursor:pointer;", ".win_caption_title":"font-weight:bold; color:white;", ".win_caption .win_button":"float:right;",   ".win_body":"position:relative; overflow:auto; width:100%; height:auto; background-color:white;"});  HTML._create("div", new Win(a), "Win#", {attr:{className:"win"}}) }})})();Class.ready(function() { var a = new Win({size:[400, 300], pos:[220, 220], buttons:{OK:function() {  this.close() }, Cancel:function() {  this.close() }}}); (new Win({size:[400, 300], pos:[20, 20], title:"Untitled Window 2"})).open(); (new Win({size:[400, 300], pos:[440, 20], title:"Untitled Window 3"})).open(); (new Win({size:[400, 300], pos:[20, 340], title:"Untitled Window 4"})).open(); a.open()}, null, !0);</script></head><body></body></html>

希望本文所述对大家的JavaScript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表