[教程]微信小程序下拉篩選菜單WXDropDownMenu組件解析

先來看下效果圖:

[圖片上傳中膏萧。漓骚。蝌衔。(1)]

思路與步驟:
布局方面,整體使用dl來寫蝌蹂,二級包在dd中噩斟,用ul li來寫;交互方面孤个,點擊某一級菜單剃允,關閉兄弟子菜單,點擊某子菜單關閉所有菜單齐鲤。
1.使用dt做出第一級菜單
2.使用dd嵌套第二級菜單斥废,初始隱藏、position為absolute佳遂,使用z-index浮出頁面層
/總菜單容器/.menu { display: block; height: 38px;}/一級菜單/.menu dt { font-size: 15px; float: left; /hack/ width: 33%; height: 38px; border-right: 1px solid #d2d2d2; border-bottom: 1px solid #d2d2d2; text-align: center; background-color: #f4f4f4; color: #5a5a5a; line-height: 38px;}/二級菜單外部容器樣式/.menu dd{ position: absolute; width: 100%; /hack/ top:39px; left:0; z-index:999;}/二級菜單普通樣式/.menu li{ font-size: 14px; line-height: 34px; color: #575757; height: 34px; display: block; padding-left: 8px; background-color: #fff; border-bottom: 1px solid #dbdbdb;}

查看效果营袜,接下來實現(xiàn)點擊事件。

3.dt綁定點擊事件tapMainMenu丑罪,flag控制顯隱toggle荚板,提供2個class,hidden與show,來控制顯隱吩屹。注:dt也是可以bindTap的跪另,不單是view。
/* 顯示與隱藏 */.show { display: block;}.hidden { display: none;}

4.關閉所有一級菜單煤搜,每個一級菜單都有一個index標識免绿,由tapMainMenu事件傳遞過去,與數(shù)組subMenuDisplay一一對應擦盾,當前元素subMenuDisplay[index]視原來狀態(tài)決定是顯示或隱藏嘲驾。
核心代碼:
<dl class="menu"> <dt data-index="0" bindtap="tapMainMenu">價格</dt> <dd class="{{subMenuDisplay[0]}}"> <ul><li>sub1</li><li>sub2</li></ul> </dd></dl>

// 使用function初始化array,相比var initSubMenuDisplay = [] 既避免的引用復制的迹卢,同時方式更靈活辽故,將來可以是多種方式實現(xiàn),個數(shù)也不定的function initSubMenuDisplay() { return ['hidden', 'hidden', 'hidden'];}Page({ data:{ subMenuDisplay:initSubMenuDisplay() }, tapMainMenu: function(e) {// 獲取當前顯示的一級菜單標識 var index = parseInt(e.currentTarget.dataset.index); // 生成數(shù)組腐碱,全為hidden的誊垢,只對當前的進行顯示 var newSubMenuDisplay = initSubMenuDisplay();// 如果目前是顯示則隱藏,反之亦反之症见。同時要隱藏其他的菜單 if(this.data.subMenuDisplay[index] == 'hidden') { newSubMenuDisplay[index] = 'show'; } else { newSubMenuDisplay[index] = 'hidden'; } // 設置為新的數(shù)組 this.setData({ subMenuDisplay: newSubMenuDisplay }); }});

5.選中二級菜單當前項喂走,但給個系統(tǒng)icon及改變背景色,文本加粗谋作,同樣改變一級菜單標題芋肠,demo中給出一個彈窗
聲明tapSubMenu方法,監(jiān)聽二級點擊事件
tapSubMenu: function(e) { // 獲取當前顯示的一級菜單標識 var index = parseInt(e.currentTarget.dataset.index); console.log(index); // 隱藏所有一級菜單 this.setData({ subMenuDisplay: initSubMenuDisplay() }); }

加highlight效果
/二級菜單高亮樣式/.menu li.highlight{ background-color: #f4f4f4;}

與一級菜單不同遵蚜,使用二維數(shù)組的方式實現(xiàn)點擊高亮业栅,這樣才能定位到是某一級的某二級菜單秒咐,再決定顯示隱藏。 布局文件改成:
<dd class="{{subMenuDisplay[0]}}"> <ul> <li class="{{subMenuHighLight[0][0]}}" data-index="0-0" bindtap="tapSubMenu">100以內</li> <li class="{{subMenuHighLight[0][1]}}" data-index="0-1" bindtap="tapSubMenu">100-500</li> <li class="{{subMenuHighLight[0][2]}}" data-index="0-2" bindtap="tapSubMenu">500-1000</li> <li class="{{subMenuHighLight[0][3]}}" data-index="0-3" bindtap="tapSubMenu">1000-3000</li> <li class="{{subMenuHighLight[0][4]}}" data-index="0-4" bindtap="tapSubMenu">3000以上</li> </ul> </dd>

相應的js代碼要寫成:
//聲明初始化高亮狀態(tài)數(shù)組function initSubMenuHighLight() { return [ ['','','','',''], ['',''], ['','',''] ];}

點擊事件
tapSubMenu: function(e) { // 隱藏所有一級菜單 this.setData({ subMenuDisplay: initSubMenuDisplay() }); // 處理二級菜單碘裕,首先獲取當前顯示的二級菜單標識 var indexArray = e.currentTarget.dataset.index.split('-'); console.log("indexArray : " + indexArray); var newSubMenuHighLight = initSubMenuHighLight(); // 與一級菜單不同携取,這里不需要判斷當前狀態(tài),只需要點擊就給class賦予highlight即可 newSubMenuHighLight[indexArray[0]][indexArray[1]] = 'highlight'; console.log(newSubMenuHighLight); // 設置為新的數(shù)組 this.setData({ subMenuHighLight: newSubMenuHighLight }); }

這樣就實現(xiàn)了高亮與取消高亮帮孔。但還沒完雷滋,與一級菜單不同,這里與兄弟子菜單是非互斥的文兢,也就是說點擊了本菜單晤斩,是不能一刀切掉兄弟菜單的高亮狀態(tài)的。于是我們改進js代碼姆坚。
聲明方式澳泵,改用變量形式,方便存儲兼呵。
//定義初始化數(shù)據(jù)兔辅,用于運行時保存var initSubMenuHighLight = [ ['','','','',''], ['',''], ['','',''] ];

點擊事件
tapSubMenu: function(e) { // 隱藏所有一級菜單 this.setData({ subMenuDisplay: initSubMenuDisplay() }); // 處理二級菜單,首先獲取當前顯示的二級菜單標識 var indexArray = e.currentTarget.dataset.index.split('-'); // 初始化狀態(tài) // var newSubMenuHighLight = initSubMenuHighLight; for (var i = 0; i < initSubMenuHighLight.length; i++) { // 如果點中的是一級菜單击喂,則先清空狀態(tài)维苔,即非高亮模式,然后再高亮點中的二級菜單懂昂;如果不是當前菜單介时,而不理會。經過這樣處理就能保留其他菜單的高亮狀態(tài) if (indexArray[0] == i) { for (var j = 0; j < initSubMenuHighLight[i].length; j++) { // 實現(xiàn)清空 initSubMenuHighLight[i][j] = ''; } // 將當前菜單的二級菜單設置回去 } } // 與一級菜單不同凌彬,這里不需要判斷當前狀態(tài)沸柔,只需要點擊就給class賦予highlight即可 initSubMenuHighLight[indexArray[0]][indexArray[1]] = 'highlight'; // 設置為新的數(shù)組 this.setData({ subMenuHighLight: initSubMenuHighLight }); }

Hello小程序將與您共同成長。微信號:130870319 QQ群:40726600

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末铲敛,一起剝皮案震驚了整個濱河市褐澎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌原探,老刑警劉巖乱凿,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顽素,死亡現(xiàn)場離奇詭異咽弦,居然都是意外死亡,警方通過查閱死者的電腦和手機胁出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門型型,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人全蝶,你說我怎么就攤上這事闹蒜∷峦鳎” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵绷落,是天一觀的道長姥闪。 經常有香客問我,道長砌烁,這世上最難降的妖魔是什么筐喳? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮函喉,結果婚禮上避归,老公的妹妹穿的比我還像新娘。我一直安慰自己管呵,他們只是感情好梳毙,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捐下,像睡著了一般账锹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔑担,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天牌废,我揣著相機與錄音,去河邊找鬼啤握。 笑死鸟缕,一個胖子當著我的面吹牛,可吹牛的內容都是我干的排抬。 我是一名探鬼主播懂从,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蹲蒲!你這毒婦竟也來了番甩?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤届搁,失蹤者是張志新(化名)和其女友劉穎缘薛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卡睦,經...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡宴胧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡踩官,死狀恐怖轨香,靈堂內的尸體忽然破棺而出显歧,到底是詐尸還是另有隱情仪或,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布士骤,位于F島的核電站范删,受9級特大地震影響,放射性物質發(fā)生泄漏拷肌。R本人自食惡果不足惜瓶逃,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望廓块。 院中可真熱鬧厢绝,春花似錦、人聲如沸带猴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拴清。三九已至靶病,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間口予,已是汗流浹背娄周。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沪停,地道東北人煤辨。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像木张,于是被迫代替她去往敵國和親众辨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內容