1. 程式人生 > >系統左側選單上下滾動功能

系統左側選單上下滾動功能

鑑於系統左側導航選單的欄目過多,出現有些模組看不到的情況,考慮做一個選單上下滾動。目前系統左側導航選單是easyui的手風琴效果,UI更新後是圖片和文字配合形式。以下是對於過程的整理:

一、方案的查詢與確定

1、方案1(引入js外掛)

嘗試結果:匯入外掛,導航模組那裡不能展示,一些js方法報錯,影響原有功能,考慮到引入外掛影響東西太多,放棄這種實現方法。

2、方案2(js方法實現)

嘗試結果:引入相關的js程式碼,使用參考的樣式圖片,單獨可以實現功能。

                將js引入專案,導航資料有誤。

解決思路:js中“$”需要替換掉,和jQuery中衝突,重新定義方法名稱,動態獲取導航的資料,標籤的id、class等修飾,註冊事件。接下來就按照這種思路嘗試:


二、示例引用

1、css

css使用自己系統的修飾,保持系統風格,目前不做變化,有需要的話,可以單獨處理。

2、js

js部分已經整理好,直接上程式碼了。

<!--左側選單上下滾動start-->
<script type="text/javascript">
//獲取id
function a(id){
	return typeof id === "string" ? document.getElementById(id) : id; 
}
//獲取tagName
function aa(elem, oParent){
	return (oParent || document).getElementsByTagName(elem); 
}
//獲取class
function aaa(className, oParent){
	var aClass = [];
	var reClass = new RegExp("(//s|^)" + className + "($|//s)");
	var aElem = aa("*", oParent);
	for (var i = 0; i < aElem.length; i++) reClass.test(aElem[i].className) && aClass.push(aElem[i]);
	return aClass
}
//初始化物件
function Roll(){
	this.initialize.apply(this, arguments) 
}
Roll.prototype ={
 	initialize: function (obj){
  		var _this = this;
  		this.obj = a(obj);
  		this.oUp = aaa("left_up", this.obj)[0];
  		this.oDown = aaa("left_down", this.obj)[0];
 		 this.oList = aaa("list", this.obj)[0];
  		this.aItem = this.oList.children;
  		this.timer = null;
  		this.iNow = 0;
  		this.iHeight = this.aItem[0].offsetHeight;
  		this.oUp.onclick = function (){
   			_this.up() 
  		};
	  	this.oDown.onclick = function (){
	   		_this.down()
	  	} 
	},
	up: function (){
		this.oList.insertBefore(this.aItem[this.aItem.length - 1], this.oList.firstChild);
	  	this.oList.style.top = -this.iHeight + "px";
	  	this.doMove(0)
	},
	down: function (){
	 	this.doMove(-this.iHeight, function (){	
	 		alert("down2");
	 		this.oList.appendChild(this.aItem[0]);
	 		this.oList.style.top = 0; 
	 	})
	},
	doMove: function (iTarget, callBack){
	  	var iTarget;
                var _this = this;
	  	clearInterval(this.timer)
	  	this.timer = setInterval(function (){
	   		var iSpeed = (iTarget - _this.oList.offsetTop) / 5;
	   		iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
	   		_this.oList.offsetTop == iTarget ? (clearInterval(_this.timer), callBack && callBack.apply(_this)) : _this.oList.style.top = iSpeed + _this.oList.offsetTop + "px"
	  	}, 30)
	}
};
window.onload = function (){
	new Roll("box");
};
</script>
<!--左側選單上下滾動end-->

三、針對性的更改

1、初始化左側js方法

(1)之前的js方法
//初始化左側
	function InitLeftMenuNew(){
		var menulist ='';
	    $.each(_menus[0].children, function(i, n) {//$.each 遍歷_menu中的元素
			menulist +='<div class="item">';
			menulist +='<div class="list"><dl class="'+n.iconCLS+'"></dl></div>';
			menulist +='<div class="title"><a href="#">'+n.navNodeName+'</a></div>'
			menulist +='<div class="line"></div>';
			menulist +='<div class="subitem"><div class="inner"><div class="tit tit1"><ul>';
			
	        $.each(n.children, function(j, o) {
				menulist += '<li><a class="ui-link" ref="'+o.nodeId+'" href="' + o.nodeURL + '" rel="' + o.nodeURL + '"><span class="icon '+o.iconCLS+'" > </span>' + o.navNodeName + '</a></li>';
	        });
	        menulist +='</ul></div></div></div></div>';
	    });
	    
	    $("#nav").append(menulist);
	    
	    $('.ui-link').click(function(){//當單擊選單某個選項時,在右邊出現對用的內容
			var tabTitle = $(this).text();//獲取超鏈裡span中的內容作為新開啟tab的標題
			var url = $(this).attr("rel");
			var menuid = $(this).attr("ref");//獲取超連結屬性中ref中的內容
			var icon = getIcon(menuid);
			addTab(tabTitle,url,icon);//增加tab
			return false;
		}).hover(function(){
			//$(this).parent().addClass("hover");
		},function(){
			//$(this).parent().removeClass("hover");
		});
	}


(2)修改之後的js方法

//初始化左側
	function InitLeftMenuNew(){
		var menulist ='<li>';
	    $.each(_menus[0].children, function(i, n) {//$.each 遍歷_menu中的元素
			menulist +='<div class="item">';
			menulist +='<div class="list"><dl class="'+n.iconCLS+'"></dl></div>';
			menulist +='<div class="title"><a href="#">'+n.navNodeName+'</a></div>'
			menulist +='<div class="line"></div>';
			menulist +='<div class="subitem"><div class="inner"><div class="tit tit1"><ul>';
			
	        $.each(n.children, function(j, o) {
				menulist += '<li><a class="ui-link" ref="'+o.nodeId+'" href="' + o.nodeURL + '" rel="' + o.nodeURL + '"><span class="icon '+o.iconCLS+'" > </span>' + o.navNodeName + '</a></li>';
	        });
	        menulist +='</ul></div></div></div></div></li>';
	    });
	    
	    $("#nav").append(menulist);
	    
	    $('.ui-link').click(function(){//當單擊選單某個選項時,在右邊出現對用的內容
			var tabTitle = $(this).text();//獲取超鏈裡span中的內容作為新開啟tab的標題
			var url = $(this).attr("rel");
			var menuid = $(this).attr("ref");//獲取超連結屬性中ref中的內容
			var icon = getIcon(menuid);
			addTab(tabTitle,url,icon);//增加tab
			return false;
		}).hover(function(){
			//$(this).parent().addClass("hover");
		},function(){
			//$(this).parent().removeClass("hover");
		});
	}

2、接收資料的標籤

(1)之前的標籤
<div class="product_sort" id="nav">
			<div class="left_up">
			</div>
			<div class="left_down"></div>
		</div>


(2)修改之後的標籤

<div id="box" class="product_sort">
			<div class="left_up"></div>
			<div class="left_down"></div>
		    <div>
				<ul id="nav" class="list"></ul>
		    </div>
		</div>

       完成以上過程後,重新啟動專案,發現功能已經實現。當然程式碼是死的,人是活的,js部分直接使用,需要修改的部分只是其他對接的東西,以此為總結。