js类后台管理菜单类-MenuSwitch

  写MenuSwitch类的出发点是因为随着后台管理项越来越多,从而导致菜单显示部出现了滚动条导致页面很不美观,自己蒙生写这个JS类了。

  这个功能类采用了目前比较流行的Web2.0做法,使用DIV+CSS+JS方式,将样式和功能分开。我下面先把演示效果放出来吧

  

复制代码 代码如下:

  function MenuSwitch(className){

  this._elements = [];

  this._default = -1;

  this._className = className;

  this._previous = false;

  }

  MenuSwitch.prototype.setDefault = function(id){

  this._default = Number(id);

  }

  MenuSwitch.prototype.setPrevious = function(flag){

  this._previous = Boolean(flag);

  }

  MenuSwitch.prototype.collectElementbyClass = function(){

  this._elements = [];

  var allelements = document.getElementsByTagName("div");

  for(var i=0;i<allelements.length;i++){

  var mItem = allelements[i];

  if (typeof mItem.className == "string" && mItem.className == this._className){

  var h3s = mItem.getElementsByTagName("h3");

  var uls = mItem.getElementsByTagName("ul");

  if(h3s.length == 1 && uls.length == 1){

  h3s[0].style.cursor = "hand";

  if(this._default == this._elements.length){

  uls[0].style.display = "block";

  }else{

  uls[0].style.display = "none";

  }

  this._elements[this._elements.length] = mItem;

  }

  }

  }

  }

  MenuSwitch.prototype.open = function(mElement){

  var uls = mElement.getElementsByTagName("ul");

  uls[0].style.display = "block";

  }

  MenuSwitch.prototype.close = function(mElement){

  var uls = mElement.getElementsByTagName("ul");

  uls[0].style.display = "none";

  }

  MenuSwitch.prototype.isOpen = function(mElement){

  var uls = mElement.getElementsByTagName("ul");

  return uls[0].style.display == "block";

  }

  MenuSwitch.prototype.toggledisplay = function(header){

  var mItem;

  if(window.addEventListener){

  mItem = header.parentNode;

  }else{

  mItem = header.parentElement;

  }

  if(this.isOpen(mItem)){

  this.close(mItem);

  }else{

  this.open(mItem);

  }

  if(!this._previous){

  for(var i=0;i<this._elements.length;i++){

  if(this._elements[i] != mItem){

  var uls = this._elements[i].getElementsByTagName("ul");

  uls[0].style.display = "none";

  }

  }

  }

  }

  MenuSwitch.prototype.init = function(){

  var instance = this;

  this.collectElementbyClass();

  if(this._elements.length==0){

  return;

  }

  for(var i=0;i<this._elements.length;i++){

  var h3s = this._elements[i].getElementsByTagName("h3");

  if(window.addEventListener){

  h3s[0].addEventListener("click",function(){instance.toggledisplay(this);},false);

  }else{

  h3s[0].onclick = function(){instance.toggledisplay(this);}

  }

  }

  }

  打包文件下载