mui 側滑菜單


 

這里是示例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>

.                                                                              

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM