結構模板
這里是示例Html, 必須使用Mui框架才能使用。
主容器 <div class="mui-off-canvas-wrap mui-draggable"></div>
菜單窗體 <aside class="mui-off-canvas-right"></aside>
主窗體 <div class="mui-content mui-scroll-wrapper"></div>
左菜單 mui-off-canvas-left
右菜單 mui-off-canvas-right
示例1:單頁面側滑(未加載子頁面,實現點擊頁面圖標,顯示不同側滑菜單內容)
<!-- 側滑菜單mOffcanvas --> <!-- 主界面不動、菜單移動 --> <!-- 側滑導航根容器 --> <div class="mui-off-canvas-wrap mui-draggable mui-slide-in"> <!-- 菜單容器 --> <!-- Home --> <aside class="mui-off-canvas-left" id="offCanvasSide1" style="background: #fff;"> <div class="mui-scroll-wrapper"> <div class="mui-scroll"> <!-- 菜單具體展示內容 --> Home </div> </div> </aside> <!-- Email --> <aside class="mui-off-canvas-left" id="offCanvasSide2" style="background: #fff;"> <div class="mui-scroll-wrapper"> <div class="mui-scroll"> <!-- 菜單具體展示內容 --> Email </div> </div> </aside> <!-- Chat --> <aside class="mui-off-canvas-left" id="offCanvasSide3" style="background: #fff;"> <div class="mui-scroll-wrapper"> <div class="mui-scroll"> <!-- 菜單具體展示內容 --> Chat </div> </div> </aside> <!-- Location --> <aside class="mui-off-canvas-left" id="offCanvasSide4" style="background: #fff;"> <div class="mui-scroll-wrapper"> <div class="mui-scroll"> <!-- 菜單具體展示內容 --> Location </div> </div> </aside> <!-- Search --> <aside class="mui-off-canvas-left" id="offCanvasSide5" style="background: #fff;"> <div class="mui-scroll-wrapper"> <div class="mui-scroll"> <!-- 菜單具體展示內容 --> Search </div> </div> </aside> <!-- Phone --> <aside class="mui-off-canvas-left" id="offCanvasSide6" style="background: #fff;"> <div class="mui-scroll-wrapper"> <div class="mui-scroll"> <!-- 菜單具體展示內容 --> Phone </div> </div> </aside> <!-- 主頁面容器 --> <div class="mui-inner-wrap"> <!-- 主頁面標題 --> <header class="mui-bar mui-bar-nav"> <a class="mui-icon mui-action-menu mui-icon-bars mui-pull-left" href="#offCanvasSide1"></a> <h1 class="mui-title">單頁側滑菜單</h1> </header> <nav class="mui-bar mui-bar-tab"> <a class="mui-tab-item mui-active"> <span class="mui-icon mui-icon-home"></span> <span class="mui-tab-label">首頁</span> </a> <a class="mui-tab-item"> <span class="mui-icon mui-icon-phone"></span> <span class="mui-tab-label">電話</span> </a> <a class="mui-tab-item"> <span class="mui-icon mui-icon-email"></span> <span class="mui-tab-label">郵件</span> </a> <a class="mui-tab-item"> <span class="mui-icon mui-icon-gear"></span> <span class="mui-tab-label">設置</span> </a> </nav> <div class="mui-content mui-scroll-wrapper"> <div class="mui-scroll"> <!-- 主界面具體展示內容 --> <!-- 九宮格mGrid --> <ul class="mui-table-view mui-grid-view mui-grid-9"> <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"> <a href="#offCanvasSide1"> <span class="mui-icon mui-icon-home"></span> <div class="mui-media-body">Home</div> </a> </li> <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"> <a href="#offCanvasSide2"> <span class="mui-icon mui-icon-email"><span class="mui-badge mui-badge-red">5</span></span> <div class="mui-media-body">Email</div> </a> </li> <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"> <a href="#offCanvasSide3"> <span class="mui-icon mui-icon-chatbubble"></span> <div class="mui-media-body">Chat</div> </a> </li> <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"> <a href="#offCanvasSide4"> <span class="mui-icon mui-icon-location"></span> <div class="mui-media-body">Location</div> </a> </li> <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"> <a href="#offCanvasSide5"> <span class="mui-icon mui-icon-search"></span> <div class="mui-media-body">Search</div> </a> </li> <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"> <a href="#offCanvasSide6"> <span class="mui-icon mui-icon-phone"></span> <div class="mui-media-body">Phone</div> </a> </li> </ul> </div> </div> <div class="mui-off-canvas-backdrop"></div> </div> </div>
動畫效果
主界面移動,菜單不動 默認
菜單移動,主界面不動 mui-slide-in
QQ式移動 mui-scalable
示例2:自定義側滑(加載子頁面,實現側滑菜單)
index.html
顯示主界面內容,側滑菜單通過 preload頁面預加載 方式導入
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>側滑菜單</title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <link href="css/mui.min.css" rel="stylesheet" /> <link href="css/index.css" rel="stylesheet" /> </head> <body> <!-- mHeader頭部 --> <header class="mui-bar mui-bar-nav"> <span class="mui-icon mui-icon-search"></span> <a class="mui-action-menu mui-icon mui-icon-plusempty mui-pull-right"></a> <h1 class="mui-title">定位</h1> </header> <!-- mTab底部選項卡 --> <nav class="mui-bar mui-bar-tab"> <a class="mui-tab-item mui-active"> <span class="mui-icon mui-icon-home"></span> <span class="mui-tab-label">首頁</span> </a> <a class="mui-tab-item"> <span class="mui-icon mui-icon-phone"></span> <span class="mui-tab-label">電話</span> </a> <a class="mui-tab-item"> <span class="mui-icon mui-icon-email"></span> <span class="mui-tab-label">郵件</span> </a> <a class="mui-tab-item"> <span class="mui-icon mui-icon-gear"></span> <span class="mui-tab-label">設置</span> </a> </nav> <script src="js/mui.min.js"></script> <script type="text/javascript"> // 創建遮罩層 var main = mui.createMask(_closeMenu); var menu = mui.createMask(_closeMenu); var mask = mui.createMask(_closeMenu); var showMenu = false; // 頁面初始化,引入子頁面,可以傳入多個子頁面,一個子頁面就是一個對象 mui.init({ // 取消右滑關閉功能 swipeBack: false, // beforeback參數對應的函數若返回false,則不再執行mui.back()方法 beforeBack: back, // 子頁面配置 subpages:[] }); // 通過back方法,判斷mui.back()是否執行 function back() { if (showMenu) { // 菜單處於顯示狀態,返回鍵應該先關閉菜單,阻止主窗口執行mui.back邏輯 closeMenu(); return false; } else { // 菜單處於隱藏狀態,執行返回時,要先close菜單頁面,然后繼續執行mui.back邏輯關閉主窗口 menu.close('none'); return true; } } mui.plusReady(function(){ // 強制豎屏 plus.screen.lockOrientation("portrait-primary"); // 當前webViewObject對象 main = plus.webview.currentWebview(); // 自動創建menu窗口 // setTimeout的目的是等待窗口動畫結束后,再執行create webview操作,避免資源競爭,導致窗口動畫不流暢 setTimeout(function(){ // menu頁面預加載 menu = mui.preload({ url: 'index-menu.html', id: 'index-menu.html', styles: { left: '30%', width: '70%', zindex: 999 } }); },300); }); /** * 顯示側滑菜單 */ function openMenu (num) { if(!showMenu){ // 解決android4.4以下版本webview移動時,導致fixed定位元素錯亂的bug if (mui.os.android && parseFloat(mui.os.version) < 4.4) { document.querySelector("header.mui-bar").style.position = "static"; // 同時需要修改以下.mui-content的padding-top,否則會多出空白 document.querySelector(".mui-bar-nav~.mui-content").style.paddingTop = "0px"; } // 側滑菜單處於隱藏狀態,則立即顯示出來 menu.show('none', 0, function(){ menu.setStyle({ left: '30%', transition: { duration: 150 } }); }); // 顯示主窗體遮罩 mask.show(); showMenu = true; } } /** * 關閉側滑菜單 */ function closeMenu () { // 窗體移動 _closeMenu(); // 關閉遮罩 mask.close(); } /** * 關閉側滑菜單(業務部分) */ function _closeMenu () { if (showMenu) { // 解決android 4.4以下版本webview移動時,導致fixed定位元素錯亂的bug if (mui.os.android && parseFloat(mui.os.version) < 4.4) { document.querySelector("header.mui-bar").style.position = "fixed"; // 同時需要修改以下.mui-content的padding-top,否則會多出空白 document.querySelector(".mui-bar-nav~.mui-content").style.paddingTop = "44px"; } // 設置側滑菜單樣式 menu.setStyle({ left: '100%', transition: { duration: 150 } }); // 等窗體動畫結束后,隱藏菜單webview,節省資源 setTimeout(function(){ menu.hide(); }, 300); showMenu = false; } } // 點擊側滑側滑圖標,打開側滑菜單 document.querySelector('.mui-action-menu').addEventListener('tap',openMenu); // 在android4.4中的swipe事件,需要preventDefault一下,否則觸發不正常,故,在dragleft,dragright中preventDefault window.addEventListener('dragright', function(e){ e.detail.gesture.preventDefault(); }); window.addEventListener('dragleft', function(e){ e.detail.gesture.preventDefault(); }); // 主界面向左滑動,若菜單未顯示,則顯示菜單,否則不做任何操作 window.addEventListener("swipeleft", openMenu); // 主界面向右滑動,若菜單已顯示,則關閉菜單,否則不做任何操作 window.addEventListener("swiperight", closeMenu); // menu頁面向右滑動,關閉菜單 window.addEventListener("menu:swiperight", closeMenu); // 重寫mui.menu方法,android版本menu按鍵按下可自動打開、關閉側滑菜單 mui.menu = function(){ if (showMenu) { closeMenu(); } else { openMenu(); } } </script> </body> </html>
index-menu.html
側滑菜單頁面
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>側滑菜單</title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <link href="css/mui.min.css" rel="stylesheet" /> <link href="css/indexMenu.css" rel="stylesheet" /> </head> <body> <!--mBody主體--> <div class="mui-content"> <!--側滑菜單內容--> <ul class="mui-table-view"> <li class="mui-table-view-cell"> <a class="mui-navigate-right"> Item 1 </a> </li> <li class="mui-table-view-cell"> <a class="mui-navigate-right"> Item 2 </a> </li> <li class="mui-table-view-cell"> <a class="mui-navigate-right"> Item 3 </a> </li> </ul> </div> <script src="js/mui.min.js"></script> <script type="text/javascript"> // 關閉back、menu按鍵監聽,這樣側滑主界面會自動獲得back和menu的按鍵事件,僅在主界面處理按鍵邏輯即可 mui.init({ keyEventBind: { backbutton: false, menubutton: false } }); // 定義main用於指向當前webveiewObject var main = null; mui.plusReady(function(){ // 獲取當前Webview窗口的創建者 main = plus.webview.currentWebview().opener(); }); // 關閉菜單 function closeMenu () { // mui.fire觸發自定義事件 mui.fire(main,"menu:swiperight"); } // 左滑顯示出來的菜單,只需監聽右滑,然后將菜單關閉即可。在該菜單上左滑,不做任何操作 window.addEventListener("swiperight",closeMenu); </script> </body> </html>
.