1. 程式人生 > >Hbuilder開發APP(一)——底部導航條簡單實現

Hbuilder開發APP(一)——底部導航條簡單實現

        Hbuilder是由DCloud(數字天堂)推出的一款支援HTML5的Web開發IDE,它最大的特點及優勢就是——快,通過完整的語法提示和程式碼輸入法、程式碼塊及很多配套,Hbuilder能大幅度提升HTML、js、css的開發效率。並且HBuilder本身主體就是基於Eclipse,所以能夠相容Eclipse的外掛。作為一款快速開發的IDE,其不僅能開發前端,還能開發APP,利用H5+技術,結合mui框架模板,就可以開發出非常漂亮的Android程式及IOS程式,想想是不是就很興奮呢,沒錯,從此你不再只是前端得意

        更多Hbuilder的更多介紹大家自行百度,使用教程

點選這裡

        這篇文章主要介紹一下簡單的 底部導航條 的實現,效果截圖:

(錄屏工具不能用了,小夥伴們自己可以在手機上跑一下,看一下效果)

        看程式碼:

首先是index.html,所有的程式碼基本上都在這裡了:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title></title>
    <script src="js/mui.min.js"></script>
    <script src="js/login.js"></script>
    <link href="css/mui.min.css" rel="stylesheet"/>
    
</head>
<body>
	<nav class="mui-bar mui-bar-tab" id="nav">
		<a id="tab_home" class="mui-tab-item mui-active" >
			<span class="mui-icon mui-icon-home" ></span>
			<span class="mui-tab-label">首頁</span>
		</a>
		<a id="tab_message" class="mui-tab-item">
			<span class="mui-icon mui-icon-email"></span>
			<span class="mui-tab-label">訊息</span>
		</a>
		<a id="tab_contact" class="mui-tab-item">
			<span class="mui-icon mui-icon-contact"></span>
			<span class="mui-tab-label">通訊錄</span>
		</a>
		<a id="tab_setting" class="mui-tab-item" >
			<span class="mui-icon mui-icon-gear"></span>
			<span class="mui-tab-label">設定</span>
		</a>
	</nav>
	
	<script type="text/javascript" charset="utf-8">
      	mui.init({
      		subpages:[//首先載入首頁  
                        {  
                            url:'html/home.html',  
                            id:'tab_home',  
                            styles:{  
                                top:'0px',  
                                bottom:'60px'  
                            }  
                        }  
                    ],  
            preloadPages:[//預載入其他頁面  
                {  
                    url:'html/message.html',  
                    id:'tab_message',  
                    styles:{
	                top:'0px',
	                bottom:'60px'  
                    }  
                },  
                {  
	                url:'html/contact.html',  
	                id:'tab_contact',  
	                styles:{  
	                    top:'0px',  
	                    bottom:'60px'  
	                }  
                },
                {
                	url:'html/setting.html',
                	id:'tab_setting',
                	styles:{
                	top:'0px',
                		bottom:'60px'
                	}
                }
            ] 
      	});
      	mui.plusReady(function(){
      		var tab_home,tab_message,tab_contact  
                mui("#nav").on("tap","#tab_home",function(){//點選觸發   
                    tab_home=plus.webview.getWebviewById("tab_home");  
                    tab_home.show()  
                    tab_message.hide()
                    tab_contact.hide()
                    tab_setting.hide()
                })  
                mui("#nav").on("tap","#tab_message",function(){//點選觸發  
                    tab_message=plus.webview.getWebviewById("tab_message");  
                    tab_message.show()  
                      
                })  
                mui("#nav").on("tap","#tab_contact",function(){//點選觸發  
                    tab_contact=plus.webview.getWebviewById("tab_contact");  
                    tab_contact.show()  
                      
                })  
                mui("#nav").on("tap","#tab_setting",function(){//點選觸發  
                	tab_setting=plus.webview.getWebviewById("tab_setting");
                	tab_setting.show()
                })
      	})
      	
    </script>
	
</body>
</html>
我們來看一下上邊的程式碼,底部導航條標籤<nav>以及class屬性這些沒啥好說的,記住就行了,我們主要看mui中的函式。

首先是mui.init(),mui框架將很多的功能配置都集中在mui.init()中,如果我們要使用某項功能,只需要在init中配置對應的引數即可,目前支援在init中配置的功能包括:建立子頁面、預載入、手勢事件配置、上拉載入、下拉重新整理、關閉頁面、設定系統狀態列背景顏色。如上程式碼所示,我們在init方法中配置了subpages:[{...}](建立子頁面)、preloadPages:[{...}](預載入),至於裡面的屬性 url、id、styles等不用解釋,都是老司機,當然還有一些其他的屬性,在此也不贅述。

注意:mui.init()是每個mui頁面都必須呼叫的,官方指出,頁面初始化,必須執行init方法。

接下來是mui.plusReady(),說這個之前有必要說說H5+了。

H5,即HTML5,全球資訊網的核心語言、標準通用標記語言下的一個應用超文字標記語言(HTML)第5次重大修改,2014年釋出,之後的瀏覽器都必須遵守這個開發規範實現對html、css、javaScript的解釋。

H5+,即HTML5 Plus,其實還是H5,只不過是在H5的基礎上增加了大量手機原生功能支援,包括wifi、gps、震動、攝像頭等軟硬體功能,通過js封裝呼叫Android原生介面使得H5開發APP更加強大,更加的接近原生。APP的開發必須使用H5+。

官方指出:在app開發中,若要使用H5+ 擴充套件API,必須等plusReady()事件發生後才能正常使用,mui將該事件封裝成了mui.plusReady()方法。涉及到H5+的API,建議都寫在mui.plusReady()方法中。

再來就是mui().on()方法了,事件繫結。

.on( event , selector , handler )

    event:Type: String,需監聽的事件名稱,例如:‘tap‘

    selector:Type: String,選擇器

    handler:Type: Function( Event event ),事件觸發時的回撥函式,通過回撥中的event引數可以獲得事件詳情

除了使用.on()方法實現批量元素的事件繫結外,也可以使用addEventListener()方法監聽某個特定元素上的事件(自行百度)。

最後就是 plus.webview.getWebviewById(id)這個了,在已建立的視窗列表中查詢指定標識的Webview視窗並返回,若沒有查詢到指定標識的視窗則返回null,若存在多個相同標識的Webview視窗,則返回第一個建立的Webview視窗。這讓我們也能聯想到在web開發中 document.getElementById(id) 返回對擁有指定Id的第一個物件的引用,android開發中 findViewById得到控制元件物件的引用。

好了,以上程式碼就說這麼多了,再看home.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" />
	</head>

	<body>
		<script src="../js/mui.min.js"></script>
		<script type="text/javascript">
			mui.init()
		</script>
		
		<header class="mui-bar mui-bar-nav">
			<a class="mui-action-back mui-icon mui-icon-back" href="/index.html"></a>
			<h1 class="mui-title">首頁</h1>
		</header>
		<div class="mui-content" align="center">
			<div id="home_content" class="mui-control-content mui-active">
				<div class="mui-title" align="center">這是首頁</div>
			</div>
		</div>
	</body>

</html>
下面是專案結構:

ok,結束了,就是這麼簡單,不過這裡只是為了簡單實現而實現的,還有好多要優化的地方以及更專業的寫法,大家自己試著寫一下吧,相信難不倒你的。

注意:還有一個問題,就是<nav>實現底部導航條,其裡面的<a>標籤需要注意,我們做web開發使用<a>標籤中的href屬性來新增連結跳轉頁面,但是在這裡是不行的,

小夥伴們可以自己試一下。為什麼不行呢???因為用web做app,有一個無法避開的問題就是 轉場動畫;web是基於連結構建的,從一個頁面點選連結跳轉到另一個頁面,如果通過有重新整理的開啟方式,會出現白屏頁面等待,如果通過無重新整理的方式,用JS移入DOM節點(常見的SPA解決方案),會碰到很高的效能挑戰;DOM節點如果非常多的話,頁面太大,轉場動畫卡頓,不流暢,甚至導致瀏覽器崩潰;

因此,mui的解決思路是:單個的webview只承載單個頁面的dom,減少dom層級及頁面大小;頁面切換使用原生動畫,將最消耗效能的部分交給原生實現。

現在知道為啥連結跳轉不能用了吧。。。

over,收工。