45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:如何通过JavaScript实现浮动层框架?

如何通过JavaScript实现浮动层框架?

2016-06-04 18:32:59 来源:www.45fan.com 【

如何通过JavaScript实现浮动层框架?

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

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

运行效果截图如下:

如何通过JavaScript实现浮动层框架?

在线演示地址如下:

http://demo.jb51.net/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程序设计有所帮助。


本文地址:http://www.45fan.com/bcdm/52270.html
Tags: 实现 JavaScript 浮动
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部