JS實(shí)現(xiàn)適合于后臺(tái)使用的動(dòng)畫折疊菜單效果
本文實(shí)例講述了JS實(shí)現(xiàn)適合于后臺(tái)使用的動(dòng)畫折疊菜單效果。分享給大家供大家參考。具體如下:
這是一款適合于后臺(tái)使用的動(dòng)畫折疊菜單,代碼超簡(jiǎn),無(wú)jQuery,展開與折疊效果平滑。本演示中有兩組菜單,向大家展示如何在一個(gè)網(wǎng)頁(yè)中布局兩個(gè)菜單,整體效果以及兼容性還算可以,希望在實(shí)際應(yīng)用中不會(huì)出現(xiàn)什么問題。
運(yùn)行效果截圖如下:
在線演示地址如下:
http://demo.jb51.net/js/2015/js-ht-control-animate-zd-menu-codes/
具體代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>適合于后臺(tái)使用的動(dòng)畫折疊菜單</title> <script type="text/javascript"> function FOLDMenu(id,onlyone){ if(!document.getElementById || !document.getElementsByTagName){return false;} this.menu=document.getElementById(id); this.submenu=this.menu.getElementsByTagName("ul"); this.speed=3; this.time=10; this.onlyone=onlyone==true?onlyone:false; this.links = this.menu.getElementsByTagName("a"); } FOLDMenu.prototype.init=function(){ var mainInstance = this; for(var i=0;i<this.submenu.length;i++){ this.submenu[i].getElementsByTagName("span")[0].onclick=function(){ mainInstance.toogleMenu(this.parentNode); }; } for(var i=0;i<this.links.length;i++){ this.links[i].onclick=function(){ this.className = "current"; mainInstance.removeCurrent(this); } } } FOLDMenu.prototype.removeCurrent = function(link){ for (var i = 0; i < this.links.length; i++){ if (this.links[i] != link){ this.links[i].className = " "; } } } FOLDMenu.prototype.toogleMenu=function(submenu){ if(submenu.className=="open"){ this.closeMenu(submenu); }else{ this.openMenu(submenu); } } FOLDMenu.prototype.openMenu=function(submenu){ var fullHeight=submenu.getElementsByTagName("span")[0].offsetHeight; var links = submenu.getElementsByTagName("a"); for (var i = 0; i < links.length; i++){ fullHeight += links[i].offsetHeight; } var moveBy = Math.round(this.speed * links.length); var mainInstance = this; var intId = setInterval(function() { var curHeight = submenu.offsetHeight; var newHeight = curHeight + moveBy; if (newHeight <fullHeight){ submenu.style.height = newHeight + "px"; }else { clearInterval(intId); submenu.style.height = ""; submenu.className = "open"; } }, this.time); this.collapseOthers(submenu); } FOLDMenu.prototype.closeMenu=function(submenu){ var minHeight=submenu.getElementsByTagName("span")[0].offsetHeight; var moveBy = Math.round(this.speed * submenu.getElementsByTagName("a").length); var mainInstance = this; var intId = setInterval(function() { var curHeight = submenu.offsetHeight; var newHeight = curHeight - moveBy; if (newHeight > minHeight){ submenu.style.height = newHeight + "px"; }else { clearInterval(intId); submenu.style.height = ""; submenu.className = ""; } }, this.time); } FOLDMenu.prototype.collapseOthers = function(submenu){ if(this.onlyone){ for (var i = 0; i < this.submenu.length; i++){ if (this.submenu[i] != submenu){ this.closeMenu(this.submenu[i]); } } } } </script> <style type="text/css"> *{margin:0;padding:0;} .foldmenu{border:1px solid #000;width:150px;margin:50px;} .foldmenu ul{list-style-type:none;height:25px;line-height:25px;overflow:hidden;cursor:pointer;} .foldmenu ul.open{height:auto;} .foldmenu ul span{display:block;padding-left:5px} .foldmenu ul li{border-bottom:1px solid #DDDDDD;} .foldmenu li a{background-color:#EEEEEE;color:#006666;display:block;padding:5px 10px;text-decoration:none;text-align:center;} .foldmenu li a:hover{background-color:#006666;color:#ffffff;} .foldmenu li a.current{background-color:#006666;color:#ffffff;} </style> </head> <body> <div id="foldmenu" class="foldmenu" style="float:left;"> <ul class="open"> <span>編程天地</span> <li><a href="#">電子書籍</a></li> <li><a href="#">源碼樂園</a></li> </ul> <ul> <span>中國(guó)門戶</span> <li><a href="#">百度搜索</a></li> <li><a href="#">新浪新聞</a></li> <li><a href="#">騰訊QQ</a></li> </ul> <ul> <span>音樂網(wǎng)站</span> <li><a href="#">百度音樂</a></li> <li><a href="#">QQ163</a></li> </ul> </div> <div id="foldmenu2" class="foldmenu" style="float:right;"> <ul class="open"> <span>世界大學(xué)</span> <li><a href="#">劍橋</a></li> <li><a href="#">牛津</a></li> <li><a href="#">哈佛</a></li> <li><a href="#">麻省理工</a></li> </ul> <ul> <span>中國(guó)大學(xué)</span> <li><a href="#">北大</a></li> <li><a href="#">清華</a></li> <li><a href="#">港大</a></li> </ul> <ul> <span>世界好車</span> <li><a href="#">寶馬</a></li> <li><a href="#">奔馳</a></li> <li><a href="#">奧迪</a></li> </ul> <ul> <span>開源論壇</span> <li><a href="#">PhpWind</a></li> <li><a href="#">Discuz!</a></li> </ul> </div> <script type="text/javascript"> window.onload = function() { myMenu = new FOLDMenu("foldmenu",true); myMenu.init(); myMenu2 = new FOLDMenu("foldmenu2"); myMenu2.init(); }; </script> </body> </html>
希望本文所述對(duì)大家的JavaScript程序設(shè)計(jì)有所幫助。
- JS+CSS實(shí)現(xiàn)的簡(jiǎn)單折疊展開多級(jí)菜單效果
- js實(shí)現(xiàn)可折疊展開的手風(fēng)琴菜單效果
- Js操作樹節(jié)點(diǎn)自動(dòng)折疊展開的幾種方法
- js實(shí)現(xiàn)簡(jiǎn)單折疊、展開菜單的方法
- js實(shí)現(xiàn)超簡(jiǎn)單的展開、折疊目錄代碼
- JS實(shí)現(xiàn)鼠標(biāo)滑過折疊與展開菜單效果代碼
- js實(shí)現(xiàn)選項(xiàng)卡內(nèi)容切換以及折疊和展開效果【推薦】
- JS實(shí)現(xiàn)可展開折疊層的鼠標(biāo)拖曳效果
- JavaScript實(shí)現(xiàn)兼容IE6的收起折疊與展開效果實(shí)例
- JS實(shí)現(xiàn)的簡(jiǎn)單折疊展開動(dòng)畫效果示例
相關(guān)文章
讓瀏覽器非阻塞加載javascript的幾種方法小結(jié)
通常大多數(shù)瀏覽器是并行下載資源的,但由于外部腳本的特殊性例如通過腳本改變文檔的DOM結(jié)構(gòu)、腳本之間的存在依賴關(guān)系、使用document.write 向頁(yè)面輸出HTML等。2011-04-04JS實(shí)現(xiàn)跟隨鼠標(biāo)閃爍轉(zhuǎn)動(dòng)色塊的方法
這篇文章主要介紹了JS實(shí)現(xiàn)跟隨鼠標(biāo)閃爍轉(zhuǎn)動(dòng)色塊的方法,涉及javascript操作html元素及css樣式的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02JavaScript正則表達(dá)式校驗(yàn)與遞歸函數(shù)實(shí)際應(yīng)用實(shí)例解析
這篇文章主要介紹了JavaScript正則表達(dá)式校驗(yàn)與遞歸函數(shù)實(shí)際應(yīng)用,需要的朋友可以參考下2017-08-08js實(shí)現(xiàn)手機(jī)發(fā)送驗(yàn)證碼功能
本文主要介紹了js實(shí)現(xiàn)手機(jī)發(fā)送驗(yàn)證碼功能的示例。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03JavaScript如何動(dòng)態(tài)創(chuàng)建table表格
這篇文章主要介紹了JavaScript如何動(dòng)態(tài)創(chuàng)建table表格,一些時(shí)候需要?jiǎng)討B(tài)的創(chuàng)建和刪除表格,接下來(lái)的文章中將為大家介紹下javascript是如何做到的,感興趣的朋友不要錯(cuò)過2015-11-11基于JavaScript實(shí)現(xiàn)新年賀卡特效
本文介紹了一款超級(jí)炫酷的2022新年快樂html網(wǎng)頁(yè)特效,霓虹的城市夜景和絢爛的煙花很是特別,該html頁(yè)面還有交互效果,點(diǎn)擊鼠標(biāo)就會(huì)呈現(xiàn)煙花綻放的特效。需要的可以參考一下2022-01-01