JS實(shí)現(xiàn)適合于后臺(tái)使用的動(dòng)畫折疊菜單效果
本文實(shí)例講述了JS實(shí)現(xiàn)適合于后臺(tái)使用的動(dòng)畫折疊菜單效果。分享給大家供大家參考。具體如下:
這是一款適合于后臺(tái)使用的動(dòng)畫折疊菜單,代碼超簡(jiǎn),無jQuery,展開與折疊效果平滑。本演示中有兩組菜單,向大家展示如何在一個(gè)網(wǎng)頁中布局兩個(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>中國門戶</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>中國大學(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)文章
js實(shí)現(xiàn)頁面導(dǎo)航層級(jí)指示效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)頁面導(dǎo)航層級(jí)指示效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
JavaScript實(shí)現(xiàn)單擊網(wǎng)頁任意位置打開新窗口與關(guān)閉窗口的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)單擊網(wǎng)頁任意位置打開新窗口與關(guān)閉窗口的方法,涉及javascript窗口的相關(guān)操作函數(shù)與使用技巧,需要的朋友可以參考下2017-09-09
使用Plupload實(shí)現(xiàn)直接上傳附件至七牛云存儲(chǔ)
這篇文章主要介紹了使用Plupload實(shí)現(xiàn)直接上傳附件至七牛云存儲(chǔ),需要的朋友可以參考下2014-12-12
淺析Javascript ES6新增值比較函數(shù)Object.is
在Javascript中判斷相等是很常見的,常用的判斷有“==”,“===”,“!=”,“!==”,今天這篇文章我們來學(xué)習(xí)ES6中的一個(gè)方法Object.is(),有需要的可以參考學(xué)習(xí)。2016-08-08
使用js在layui中實(shí)現(xiàn)上傳圖片壓縮
這篇文章主要介紹了使用js在layui中實(shí)現(xiàn)上傳圖片壓縮,layui 是一款采用自身模塊規(guī)范編寫的前端 UI 框架,js上傳圖片壓縮百度有很多方法,,需要的朋友可以參考下2019-06-06
JavaScript實(shí)現(xiàn)樹結(jié)構(gòu)轉(zhuǎn)換的五種方法總結(jié)
在?JavaScript?編程中,將數(shù)組轉(zhuǎn)換為樹結(jié)構(gòu)是一個(gè)常見的需求。本篇博客將介紹五種常用的方法來實(shí)現(xiàn)數(shù)組轉(zhuǎn)樹結(jié)構(gòu),希望對(duì)大家有所幫助2023-03-03
微信小程序列表渲染功能之列表下拉刷新及上拉加載的實(shí)現(xiàn)方法分析
這篇文章主要介紹了微信小程序列表渲染功能之列表下拉刷新及上拉加載的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了微信小程序列表下拉刷新及上拉加載的相關(guān)實(shí)現(xiàn)方法與技巧操作,需要的朋友可以參考下2017-11-11
JS 實(shí)現(xiàn)請(qǐng)求調(diào)度器
這篇文章主要介紹了JS 實(shí)現(xiàn)請(qǐng)求調(diào)度器的方法,幫助大家更好的理解和學(xué)習(xí)使用js,感興趣的朋友可以了解下2021-03-03

