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


Posted in Javascript onOctober 10, 2015

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

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

运行效果截图如下:

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

在线演示地址如下:

具体代码如下:

<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程序设计有所帮助。

Javascript 相关文章推荐
最简单的jQuery程序 入门者学习
Jul 09 Javascript
Javascript 定时器调用传递参数的方法
Nov 12 Javascript
JS中Iframe之间传值及子页面与父页面应用
Mar 11 Javascript
php+js实现倒计时功能
Jun 02 Javascript
javascript中数组array及string的方法总结
Nov 28 Javascript
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
Javascript中的作用域和上下文深入理解
Jul 03 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
May 25 Javascript
基于angular实现三级联动的生日插件
May 12 Javascript
jQuery实现网页拼图游戏
Apr 22 jQuery
JS实现炫酷雪花飘落效果
Aug 19 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
Oct 30 Javascript
表单验证插件Validation应用的实例讲解
Oct 10 #Javascript
JS实现的车标图片提示效果代码
Oct 10 #Javascript
jqTransform美化表单
Oct 10 #Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
Oct 10 #Javascript
页面内容排序插件jSort使用方法
Oct 10 #Javascript
JavaScript子窗口调用父窗口变量和函数的方法
Oct 09 #Javascript
js中unicode转码方法详解
Oct 09 #Javascript
You might like
html中select语句读取mysql表中内容
2006/10/09 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
Python多线程实例教程
2014/09/06 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
Python网络编程 Python套接字编程
2017/09/13 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python for和else语句趣谈
2019/07/02 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
Django choices下拉列表绑定实例
2020/03/13 Python
没编程基础可以学python吗
2020/06/17 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
《月光启蒙》教学反思
2014/03/01 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
Python面向对象之内置函数相关知识总结
2021/06/24 Python
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL