亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

以JavaScript來實現WordPress中的二級導航菜單的方法

2024-05-06 16:26:21
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了以JavaScript來實現WordPress中的二級導航菜單的方法,文中首先對WordPress基本的PHP導航菜單的做法給出了說明來作為基礎,需要的朋友可以參考下
 

導航菜單
導航菜單早已 "深入民心", 在博客上的應用日益重要且多樣. 從本文開始, 我將開展幾個關于 WordPress 導航菜單的話題, 討論如何在 WordPress 上使用和加強導航菜單, 話題間有一定的承接關系, 難度也會逐步增加.

以JavaScript來實現WordPress中的二級導航菜單的方法

WordPress 上的導航菜單一般有兩種, 頁面導航菜單和分類導航菜單.
可曾記得? WordPress 是可以撰寫獨立頁面的, 頁面導航菜單就是以首頁和各個獨立頁面組成的菜單. 而分類導航菜單則是以首頁和各個分類組成的菜單.
這是效果演示
既然菜單由首頁和獨立頁面列表或首頁和分類列表所組成, 我們就需要處理兩個環節, 即首頁菜單項和其他菜單項.
另外, 我們還需要處理菜單項的三個狀態, 即一般狀態, 當前菜單項狀態 (如: 在首頁中, 首頁菜單項就是當前菜單項) 和選中菜單項狀態.
也就是說, 我們共需要處理 3 個事情:
1. 首頁外的其他菜單項
2. 首頁菜單項
3. 菜單項處于不同狀態時的視覺效果

預想結構:

<div id="menubar"> <ul class="menus"> <li class="..."><a href="http://.../">Home</a></li> <li class="..."><a href="http://.../">菜單項1</a></li> <li class="..."><a href="http://.../">菜單項2</a></li> <li class="..."><a href="http://.../">菜單項3</a></li> ... </ul></div>

頁面導航菜單

1. 獨立頁面列表作為菜單項
調用 wp_list_pages 獲取獨立頁面列表, 并使用以下參數:
depth: 列表深度(層的最大數量), 本文討論的是一級菜單, 故最大深度為 1
title_li: 標題字符串, 這里不需要, 設為 0
sort_column: 列表項的排序方式, 根據創建頁面時所設定的 order 進行升序排列
打印獨立頁面菜單項的語句是:

<?php wp_list_pages('depth=1&title_li=0&sort_column=menu_order'); ?>

2. 首頁菜單項
由于一般獨立頁面的 class 是 page_item, 當前獨立頁面的 class 是 current_page_item. 當頁面是首頁時, 首頁菜單項的 class 應該是 current_page_item, 其他情況則是 page_item. 為此, 我們需要一段分支代碼來為它確定 class:

<?php // 如果是首頁, class 是 current_page_itemif (is_home()) { $home_menu_class = 'current_page_item';// 如果不是首頁, class 是 page_item} else { $home_menu_class = 'page_item';} ?>

打印首頁菜單項的語句是:

<li class="<?php echo($home_menu_class); ?>"> <a style="margin: 0px; padding: 0px; width: 650px; overflow: hidden;">		
/* 菜單項 */#menubar ul.menus li { float:left; /* 靠左浮動 */ list-style:none; /* 清空列表風格 */ margin-right:1px; /* 右側的間隔 */}/* 菜單項鏈接 */#menubar ul.menus li a { padding:5px 10px; /* 內邊距 */ display:block; /* 顯示為塊 */ color:#FFF; /* 文字顏色 */ background:#67ACE5; /* 背景顏色 */ text-decoration:none; /* 沒有下橫線 */}/* 當前菜單項鏈接 */#menubar ul.menus li.current_page_item a { background:#5495CD; /* 背景顏色 */}/* 選中菜單項鏈接 */#menubar ul.menus li a:hover { background:#4281B7; /* 背景顏色 */}

分類導航菜單

1. 分類列表作為菜單項
調用方法 wp_list_categories 獲取分類列表, 并使用以下參數:
depth: 列表深度(層的最大數量), 本文討論的是一級菜單, 故最大深度為 1
title_li: 標題字符串, 這里不需要, 設為 0
orderby: 列表項的排序方式, 根據創建頁面時所設定的 order 進行升序排列
show_count: 是否顯示該分類的文章數量, 這里不需要顯示, 設為 0
打印分類菜單項的語句是:

<?php wp_list_categories('depth=1&title_li=0&orderby=name&show_count=0'); ?>

2. 首頁菜單項
與頁面導航菜單相似, 只是菜單項的 class 有所不同.
page_item 更改為 cat-item
current_page_item 更改為 current-cat

3. 菜單的樣式
因為菜單項的 class 略有不同, 所以也需稍作修改.
current_page_item 更改為 current-cat


二級導航菜單

以JavaScript來實現WordPress中的二級導航菜單的方法

我們已經知道菜單如何創建了, 這回我們要使用分類列表做成二級導航菜單. 我們要做的其實是在原有的基礎上改出二級菜單, 以及對二級菜單進行處理. (請確保的的分類中包含子分類, 否則調不出二級菜單.)
我們共需要處理 3 個事情:
1. 調出二級菜單 (子分類)
2. 二級菜單的樣式
3. 二級菜單的效果

預想結構

<div id="menubar"> <ul class="menus"> <li class="..."><a href="http://.../">Home</a></li> <li class="...">  <a href="http://.../">菜單1</a>  <ul class="children">  <li class="..."><a href="http://.../">菜單項1</a></li>  <li class="..."><a href="http://.../">菜單項2</a></li>  <li class="..."><a href="http://.../">菜單項3</a></li>  </ul> </li> <li class="...">  <a href="http://.../">菜單2</a>  <ul class="children">  <li class="..."><a href="http://.../">菜單項4</a></li>  </ul> </li> <li class="...">  <a href="http://.../">菜單3</a>  <ul class="children">  <li class="..."><a href="http://.../">菜單項5</a></li>  <li class="..."><a href="http://.../">菜單項6</a></li>  </ul> </li> ... </ul></div>

實施操作

1. 調出二級菜單 (子分類)
是否還記得制作導航菜單時是如何設定列表深度的? 當時將深度設為 1 是為了不顯示子分類, 現在要二級子分類當然要將深度設為 2 了.
depth: 列表深度(層的最大數量), 本文討論的是二級菜單, 故最大深度為 2.
打印分類菜單項的語句是:

<?php wp_list_pages('depth=2&title_li=0&sort_column=menu_order'); ?>

2. 二級菜單的樣式
也只是在本來的樣式上進行修改, 加上子分類的樣式.

/* 二級菜單 */#menubar ul.children { display:none; /* 初始化頁面時不顯示出來 */ padding:0; margin:0;}/* 二級菜單的菜單項 */#menubar ul.children li { float:none; /* 垂直排列 */ margin:0; padding:0;}/* 二級菜單的當前菜單項鏈接 */#menubar ul.children li a { width:100px; /* 對 IE6 來說十分很重要 */}

打印首頁菜單項的語句是:

<li class="<?php echo($home_menu_class); ?>"> <a style="margin: 0px; padding: 0px; width: 650px; overflow: hidden;">		
/* Author: mg12Feature: MenuList with second-level menusUpdate: 2008/08/30Tutorial URL: http://www.neoease.com/wordpress-menubar-2/ */ /** 類 */var Class = { create: function() { return function() {  this.initialize.apply(this, arguments); } }} /** 菜單列表 */var MenuList = Class.create();MenuList.prototype = {  /** * 構造方法 * id: 菜單列表 * opacity: 透明度 (0.0 - 1.0, 0.0 為全透明, 1.0 為不透明) */ initialize: function(id, opacity) { // 獲取菜單列表 this.obj = document.getElementById(id); if (!this.obj) { return; }  // 對菜單列表內的所有菜單進行處理 var menus = this.obj.childNodes; for (var i = 0; i < menus.length; i++) {  var menu = menus[i];  if (menu.tagName == 'LI') {  // 構建菜單  new Menu(menu, opacity);  } } }} /** 菜單 */var Menu = Class.create();Menu.prototype = {  /** * 構造方法 * target: 目標菜單 * opacity: 透明度 (0.0 - 1.0, 0.0 為全透明, 1.0 為不透明) */ initialize: function(target, opacity) { this.util = new MenuUtil();  // 獲取目標菜單 (沒多余元素) this.obj = this.util.cleanWhitespace(target); // 定義透明度, 默認為不透明 this.opacity = opacity || 1;  // 獲取菜單 this.menu = this.obj.childNodes  // 重要! 如果菜單不包含菜單項, 則不進行處理 if (this.menu.length < 2) { return; }  // 菜單標題和菜單體 this.title = this.menu[0]; this.body = this.menu[1];   // 定義初始樣式 this.util.setStyle(this.body, 'visibility', 'hidden'); this.util.setStyle(this.body, 'position', 'absolute'); this.util.setStyle(this.body, 'overflow', 'hidden'); this.util.setStyle(this.body, 'display', 'block');  // 添加監聽器 this.addListener(this.obj, 'mouseover', this.util.bind(this, this.activate), false); this.addListener(this.obj, 'mouseout', this.util.bind(this, this.deactivate), false); },  /** * 激活方法 * 當鼠標移動到菜單標題是激活 */ activate: function() { // 獲取當前菜單體的位置 var pos = this.util.cumulativeOffset(this.title); var left = pos[0]; var top = pos[1] + this.util.getHeight(this.title);  // 定義激活時樣式 this.util.setStyle(this.body, 'left', left + 'px'); this.util.setStyle(this.body, 'top', top + 'px'); this.util.setStyle(this.body, 'visibility', 'visible'); this.util.setStyle(this.body, 'opacity', this.opacity); this.util.setStyle(this.body, 'filter', 'alpha(opacity=' + this.opacity * 100 + ')'); },  /** * 解除方法 * 當鼠標移動出菜單標題是激活 */ deactivate: function(){ // 定義解除時樣式 this.util.setStyle(this.body, 'visibility', 'hidden'); },  /** * 監聽方法 * element: 監聽對象 * name: 監聽方法 * observer: 執行的方法 * useCapture: 瀏覽器調用事件的方式 (true 為 Capture 方式, false 為 Bubbling 方式) */ addListener: function(element, name, observer, useCapture) { if(element.addEventListener) {  element.addEventListener(name, observer, useCapture); } else if(element.attachEvent) {  element.attachEvent('on' + name, observer); } }} /** 一些實用的方法 */var MenuUtil = Class.create();MenuUtil.prototype = { initialize: function() { },  $: function(id) { return document.getElementById(id); },  $A: function(iterable) { if(!iterable) {  return []; } if(iterable.toArray) {  return iterable.toArray(); } else {  var results = [];  for(var i = 0; i < iterable.length; i++) {  results.push(iterable[i]);  }  return results; } },  bind: function() { var array = this.$A(arguments); var func = array[array.length - 1]; var _method = func, args = array, object = args.shift(); return function() {  return _method.apply(object, args.concat(array)); } },  getHeight: function(element) { return element.offsetHeight; },  setStyle: function(element, key, value) { element.style[key] = value; },  getStyle: function(element, key) { return element.style[key]; },  cleanWhitespace: function(list) { var node = list.firstChild; while (node) {  var nextNode = node.nextSibling;  if(node.nodeType == 3 && !//S/.test(node.nodeValue)) {  list.removeChild(node);  }  node = nextNode; } return list; },  cumulativeOffset: function(element) { var valueT = 0, valueL = 0; do {  valueT += element.offsetTop || 0;  valueL += element.offsetLeft || 0;  element = element.offsetParent; } while (element); return [valueL, valueT]; }} /** 添加到頁面加載事件 */window.onload = function(e) { new MenuList('menus', 0.9);}


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
青青草精品毛片| 日韩精品中文字幕在线| 国产成人精品国内自产拍免费看| 亚洲天堂av电影| 精品亚洲一区二区三区在线观看| 另类色图亚洲色图| 亚洲美女福利视频网站| 亚洲成人免费网站| 日韩av电影在线免费播放| 亚洲最大福利网站| 中文字幕在线国产精品| 国内精品伊人久久| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲精品黄网在线观看| 亚洲成人av片在线观看| 亚洲精品一区二区在线| 欧美网站在线观看| 91老司机精品视频| 精品丝袜一区二区三区| 97精品国产97久久久久久免费| 精品国产999| 78色国产精品| 久久精品影视伊人网| 亚洲国产精品一区二区三区| 中日韩美女免费视频网址在线观看| 国产日韩欧美中文在线播放| 一区二区三区视频免费| 91久久精品美女高潮| 欧美成人精品三级在线观看| 这里只有精品在线观看| 欧美有码在线观看视频| 亚洲高清免费观看高清完整版| 日本免费一区二区三区视频观看| 精品少妇一区二区30p| 在线播放日韩专区| 91中文精品字幕在线视频| 91精品国产91久久久久久不卡| 欧美日韩福利在线观看| 国产精品成人免费视频| 欧洲精品久久久| 日韩在线观看你懂的| 美女视频黄免费的亚洲男人天堂| 午夜精品久久久久久99热| 国产精品女人久久久久久| 国产91在线高潮白浆在线观看| 日韩在线观看av| 日韩在线观看av| 亚洲韩国青草视频| 日韩美女写真福利在线观看| 国产精品美女视频网站| 中文字幕在线精品| 日韩免费电影在线观看| 91免费国产网站| 欧美最顶级丰满的aⅴ艳星| 亚洲深夜福利视频| 欧美性高跟鞋xxxxhd| 欧美日韩黄色大片| 欧美午夜美女看片| 久久色在线播放| 国产精品1234| 国产mv免费观看入口亚洲| 亚洲深夜福利网站| 日韩欧美高清视频| 97香蕉久久超级碰碰高清版| 一区二区三区高清国产| 91情侣偷在线精品国产| 久久国产精品影片| 国产成人精品久久久| 日韩av免费在线| 亚洲综合大片69999| 欧美黄色免费网站| 亚洲成色www8888| 国产精品丝袜久久久久久不卡| 久久成人精品一区二区三区| 亚洲欧美国产精品| 日韩大陆欧美高清视频区| 欧美激情精品久久久久久黑人| 亚洲欧洲国产一区| 国产精品精品视频一区二区三区| 亚洲欧美在线x视频| 国产精品久久久久久久久借妻| 亚洲第一精品自拍| 大胆人体色综合| 一本一道久久a久久精品逆3p| 九九综合九九综合| 九九九热精品免费视频观看网站| 亚洲综合精品一区二区| 日本久久中文字幕| 日韩电影在线观看中文字幕| 国产精品成人国产乱一区| 黑人与娇小精品av专区| 久久精品视频导航| 精品国产一区二区三区久久狼5月| 久久久精品电影| 97涩涩爰在线观看亚洲| 成人亚洲欧美一区二区三区| 亚洲国模精品一区| 欧美精品videosex牲欧美| 亚洲女人被黑人巨大进入| 欧美日韩国产精品一区二区三区四区| 日韩精品小视频| 亚洲日本欧美日韩高观看| 高清欧美电影在线| 最近免费中文字幕视频2019| 亚洲r级在线观看| 亚洲jizzjizz日本少妇| 精品视频久久久久久久| 精品动漫一区二区| 亚洲精品国产精品自产a区红杏吧| 中文字幕免费精品一区| 亚洲国模精品私拍| 免费91在线视频| 91网站在线看| 国产在线拍偷自揄拍精品| 九九热这里只有精品免费看| 亚洲成色777777在线观看影院| 亚洲人a成www在线影院| 欧美另类69精品久久久久9999| 欧美日韩精品在线| 国产一区私人高清影院| 26uuu另类亚洲欧美日本一| 精品久久久91| 日韩精品视频在线观看免费| 国产91精品不卡视频| 亚洲91精品在线| 欧美性69xxxx肥| 亚洲欧美第一页| 日韩精品在线观看视频| 久久99精品久久久久久青青91| 国产91ⅴ在线精品免费观看| 欧美精品18videos性欧美| 国产精品美女在线| 亚洲综合自拍一区| 精品久久久久久久久久| 亚洲第一精品电影| 欧美精品在线极品| 国产精品爽黄69| 日韩在线激情视频| 欧美精品中文字幕一区| 在线成人一区二区| 亚洲成人久久网| 色久欧美在线视频观看| 成人中文字幕+乱码+中文字幕| 日韩欧美在线字幕| 亚洲日本成人女熟在线观看| 欧美国产第一页| 久久男人资源视频| 欧美精品做受xxx性少妇| 日韩视频第一页| 成人欧美一区二区三区黑人| 热久久美女精品天天吊色| 久久视频在线观看免费| 日韩精品免费综合视频在线播放| 青青久久av北条麻妃海外网| 亚洲一二三在线| 日韩中文字幕免费视频| 日韩欧美中文字幕在线观看| 亚洲一区制服诱惑| 亚洲视频在线视频| 亚洲风情亚aⅴ在线发布| 原创国产精品91| 国产欧美日韩高清| 欧美另类在线观看| 91精品国产91久久久久|