搜尋
首頁web前端js教程通用無限極下拉選單的實作程式碼

通用無限極下拉選單的實作程式碼

May 05, 2018 pm 04:21 PM
下拉式選單程式碼實現

這篇文章主要介紹了關於通用無限極下拉選單的實現程式碼,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

下拉選單在我開發中經常遇到,但是沒個專案都需要從新編寫,改起來雖然簡單但是很麻煩,我這個人還是比較懶的,今天有時間把我以前的專案開發中的選單整理一遍,編寫一個通用版本,以後就不需要那麼麻煩了。

特點

今天整理的選單是由jquery css開發有以下特點:

一、通用性強

以前在使用的一個下拉式選單有個問題,需要對主導航和子選單進行單獨的設置,例如,二級選單是class="first_menu",三級選單是class="second_menu"....依次類推,這樣的寫法有個問題就是不利於程式設計師執行循環輸出,而本選單只需引入一個CSS樣式即可,無需對多層選單定義。

二、美觀自動呼叫下拉指示

以前我們手工會為下拉式選單新增一個下拉展示的class,而現在,只需要在css中定義好下拉效果的樣式,程式碼會自動尋找下拉式選單並且新增指示箭頭;

三、呼叫簡單

程式設計師輸出清單簡單不需要很多的判斷,只要遞歸調用菜單資料即可。

實作

一、HTML程式碼

#   首先我們在頁面輸出選單數據,這些數據用ul和li組成構成菜單列表。具體結構代碼如下所示:

<ul class="Menue">

 <li class="Menue_li"><a href="#">首页</a></li>

 <li class="Menue_li"><a href="#">菜单一</a>

  <ul class="sub_menu">

   <li><a href="#">过山车</a></li>

   <li><a href="#">火山爆发</a></li>

   <li><a href="#">小小鸟</a></li>

  </ul>

 </li>

 <li class="Menue_li"><a href="#">菜单二</a>

  <ul class="sub_menu">

   <li><a href="#">关于我们</a>

    <ul class="sub_menu">

     <li><a href="#">山高地缘</a>

      <ul class="sub_menu">

       <li><a href="#">飞鸽传书</a></li>

       <li><a href="#">生生世世</a></li>

       <li><a href="#">飞黄腾达</a></li>

      </ul>

     </li>

     <li><a href="#">数据库</a>

      <ul class="sub_menu">

       <li><a href="#">数据库表</a></li>

       <li><a href="#">数据加密</a></li>

       <li><a href="#">数据建模</a></li>

      </ul>

     </li>

     <li><a href="#">C摄像头</a></li>

    </ul>

   </li>

   <li><a href="#">测试产品</a></li>

  </ul>

 </li>

</ul>

一些基本的html程式碼,很簡單不需要解釋程式碼意義,強調程式碼結構:無論是二級、三級或幾級選單主要是巢狀ul即可;樣式表名稱也非常單一,子選單就是「sub_menu」樣式,這樣非常有利於程式碼循環呼叫。

二、CSS樣式

Css樣式程式碼也非常簡單,具體程式碼如下:

a { text-decoration:none; }

ul, li { list-style:none; margin:0; padding:0; }

/*定义菜单*/

.Menue li { background:#111; color:#fff; height:30px; line-height:30px; position:relative; float:left; margin-right:5px; width:100px; text-align:center; font-family:Arial, Helvetica, sans-serif; }

.Menue li a { color:#fff; font-size:14px; display:block; }

/*下拉菜单样式*/

ul.sub_menu { position:absolute;width:100px; display:none; z-index:999; }

.Menue li ul.sub_menu li { background:none; color:#555; font-size:12px; border-bottom:1px #333 solid; position:relative; width:100px; height:30px; }

.Menue li ul.sub_menu li.last { border-bottom:none; } /*js会对最后一个li添加该class,去掉border-bottom效果*/

.Menue li ul.sub_menu li a { background:#222; color:#888; display:block;height:30px; }

.Menue li ul.sub_menu li a:hover, .Menue li ul.sub_menu li a.now { background:#f90;color:#fff;}

.Menue li.now,.Menue li.current { background:#f60;color:#fff;}

/*如果有下拉菜单添加的class*/

.hasmenu { background:url(arrow.png) no-repeat right; padding-right:15px;}/*主导航箭头向下*/

.Menue li a.hasmenu { background:url(arrow.png) no-repeat right; padding-right:15px;background-position:right -30px;}/*下拉菜单箭头向右*/

.Menue li ul.sub_menu li a.hasmenu { background:#222 url(arrow.png) no-repeat right top;}

.Menue li ul.sub_menu li a.hasmenu:hover { background:#f90 url(arrow.png) no-repeat right top; color:#fff;}

這裡我只強調兩點注意事項:

1、position中absolute 與relative區別

absolute:絕對定位,CSS 寫法“ position: absolute; ” ,它的定位分兩種情況,如下:

A、沒有設定Top、Right、Bottom、Left 的情況,預設依據父級的「內容區域原點」為原點。

B. 有設定Top、Right、Bottom、Left 的情況,這裡又分了兩種情況如下:

 (1). 父級沒position 屬性,瀏覽器左上角(即Body)為「座標原點」定位,位置由Top、Right、Bottom、Left 屬性決定。

  (2). 父級有 position 屬性,父級的「座標原始點」為原始點。

relative:相對定位,CSS 寫法“ position: relative; ”,參考父級的“內容區域原始點”為原始點,無父級則以Body 的“內容區域原始點”為原始點,位置由Top、Right、Bottom、Left 屬性決定,且有「撐開或佔據高度」的作用。

    以上兩種差異很重要,是十分常用的一個技巧,一定要區別開,本人在開發中就浪費了很多時間找問題其實就是因為這兩個屬性引起的。

2、background-position使用

有時候我們為了提升網站速度和網站管理方便,經常把一些美化常用的小圖片放在一張大圖片上,css需要相應的小圖片時就可以透過這個方法來實現,只要弄清楚什麼意思調用起來十分方便。這個方法說明白點就是圖片截取功能,用法具體說明如下:

語法:

background-position : length || length

#background -position : position || position

取值:

#length : 百分數| 由浮點數字和單位識別碼組成的長度值。

position :top | center | bottom | left | center | right

#說明:
設定或擷取物件的背景圖片位置。必須先指定 background-image 屬性。此屬性定位不受物件的補丁屬性( padding )設定影響。預設值為: 0% 0% 。此時背景圖片將被定位在物件不包括補丁( padding )的內容區域的左上角。如果只指定了一個值,則該值將用於橫座標。縱座標將預設為 50% 。如果指定了兩個值,第二個值將用於縱座標。如果設定值為 right center ,因為 right 作為橫座標值將會覆寫 center 值,所以背景圖片會被居右定位。以下是一些等式

top left, left top 等價於0% 0%.

top, top center, center top 等價於50% 0%.

right top, top right 等價於100% 0%.

left, left center, center left 等價於0% 50%.

center, center center 等價於50% 50%.

right, right center, center right 等價於100% 50%.

bottom left, left bottom 等價於0% 100%.

bottom , bottom center, center bottom 等價於50% 100%.

bottom right, right bottom 等价于 100% 100%

三、JS代码

本菜单是以jquery为基础的所以首先必须引入jquery代码库,然后编写如下JS代码实现下拉菜单。

<script src="js/jquery.min.js"></script>

<script>

$(document).ready(function(){

 //为导航设置默认高亮 与本菜单无关

 $("ul.Menue li.Menue_li:eq(0)").addClass("current")

 /*jquery menu 开始*/

 //为子菜单的最后一个li添加样式,适合为li添加下划线时去除最后一个的下划线

 $(".sub_menu").find("li:last-child").addClass("last")

 //遍历全部li,判断是否包含子菜单,如果包含则为其添加箭头指示状态

 $(".Menue li").each(function(){

 if($(this).find("ul").length!=0){$(this).find("a:first").addClass("hasmenu")}

 })

 

 //

 $(".Menue li").hover(function(){

 $(this).addClass("now");

 var menu = $(this);

  menu.find("ul.sub_menu:first").show();

 },function(){

 $(this).removeClass("now");

 $(this).find("ul.sub_menu:first").hide();

 });

 

 var submenu = $(".sub_menu").find(".sub_menu")

 submenu.css({left:"100px",top:"0px"})

 $(".sub_menu li").hover(function(){

 $(this).find("a:first").addClass("now")

 $(this).find("ul:first").show();

 },function(){

 $(this).find("a:first").removeClass("now")

 $(this).find("ul:first").hide()

 });

/*jquery menu 结束*/

})

</script>

通过以上步骤就实现了一个通用的多级菜单,上面代码是本人日常开发中的积累,由于本人水平有限可能存在着许多错误希望同僚们批评指正或提出更优化的代码供本人参考,谢谢。

以上是通用無限極下拉選單的實作程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?Apr 04, 2025 pm 09:21 PM

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

微信小程序webview中Vue.js動態style位移失效是什麼原因?微信小程序webview中Vue.js動態style位移失效是什麼原因?Apr 04, 2025 pm 09:18 PM

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用