本文实例讲述了JavaScript实现的浮动层框架用法。分享给大家供大家参考。具体如下:
这是一个JavaScript编写的浮动层框架,作为框架来说,骨干已经完成了。可以实现“类”、“构造函数”、“继承”(木有实现多继承)、“静态方法”、“重载”(木有实现多态),对我来说主要的意义就是,我喜欢这种代码风格,可以非常简单的重用和二次开发。
运行效果截图如下:
在线演示地址如下:
http://demo.phpstudy.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程序设计有所帮助。
本文地址:https://www.stayed.cn/item/11148
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我