跨平臺移動APP開發進階(二)HTML5+、mui開發移動app教程

前端開發APP,從HBuilder開始~

通過 HTML5 開發移動App 時,會發現HTML5 很多能力不具備。爲彌補HTML5 能力的不足,在W3C 中國的指導下成立了www.HTML5Plus.org組織,推出HTML5+規範。

 

HTML5+擴展了JavaScript 對象plus,使得js 可以調用各種瀏覽器無法實現或實現不佳的系統能力,設備能力如攝像頭、陀螺儀、文件系統等,業務能力如上傳下載、二維碼、地圖、支付、語音輸入、消息推送等。

 

HBuilder 的手機原生能力調用分個層面:

 

a) 跨手機平臺的能力調用都在HTML5+ 規範裏,比如二維碼、語音輸入,使用plus.barcode plus.speech。編寫一次,可跨平臺運行。

 

b) JS Bridge是另一項創新技術,通過js 可以直接調ios Android 的原生API,這部分就不再跨平臺,比如調ios game center,或在android 手機桌面創建快捷方式。

JSB 的用法是var obj = plus.android.import("android.content.Intent");將一個原生對象android.content.Intent 映射爲js 對象obj,然後在js 裏操作obj對象的方法屬性就可以了。

 

注:使用 HTML5+開發的移動App 並非mobileweb頁面。這是新手最容易混淆的地方。mobileweb 的文件存放在web 服務器上,而移動App 的文件存放在手機本地,編寫移動App htmljscss文件被打包到ipaapk等原生安裝包,在手機客戶端運行。

 

當然這些移動 App 裏某些頁面也可以繼續從服務器端以網頁方式運行。所以mobile web,在HBuilder 裏新建項目時,屬於web 項目。不要放置到移動App 項目。mobile web 項目也不能真機聯調和打包.

內容簡介

介紹目前前端人員開發app的幾種方法,具體介紹hbuilder開發app,一扇贊新的大門~

無所不能的js

最開始js僅僅侷限於網頁上一些效果,操作網頁內容等,但是nodejsjs帶入了後端,也就是服務器端,從此前端人員可以涉及後端,前後通吃,native.js(以及其他js,稍候介紹)把js帶入了移動端,從此前端人員前後移動通吃。

 

前端涉及app的兩種方式

適應移動端的網頁

大家都很熟悉的bootstrap,和現在剛出來的amazeui就是這種方法的代表,說的簡單點就是對移動端做了適配,佈局樣式組件都適合移動端展示。

 

缺陷:畢竟不是app,不管怎樣也沒辦法取代app的便捷和功能強大。

 

js+html+css+打包技術

比較有名的就是phonegap了,國內的是hbuilder,大概的意思是html負責頁面內容,js負責效果以及調用原生app方法,ui框架負責樣式,最後打包成apk或者ipa

 

hbuilderhttp://www.dcloud.io/

不談phonegap,不適用國內國情,是的,你沒有看錯,這是一個開發的ide,其實就是對eclipse進行了深度定製。

 

特點是快捷鍵比較多,支持移動app開發(h5+方式)。

 

h5+http://www.html5plus.org/#home

可以說nodejsjs帶到後端,h5+js帶到移動端。

 

原理

上面說過的原理,再次說一遍:

 

html負責頁面,也就是的內容和框架;

 

js負責調用方法,也就是調用一些移動端原生;

 

ui負責樣式,比較有名的bootstrapamazeuijquery mobilemui

 

ui比較

上面說的幾個ui,做下簡單比較,僅代表個人觀點,

 

Amazeui:功能和bootstrap重複,官方解釋是對中文排版做了優化,個人覺得有點多餘,bootstrap就很好。

 

Bootstrap:適合移動端瀏覽網頁適配,移動端瀏覽效果不錯,但是還是網頁。

 

jquery mobile:專門對移動端做定製,看起來就像手機應用一樣,js+css,國外的,不推薦,有坑。

 

Mui:這個是推薦的,比較了jqmobilemui,顯然mui效果樣式好點,估計也會有坑,但是支持國產吧。

 

前端開發app

 

搭建開發環境

不需要搭建iosandroid的開發環境,只需要下載hbuilder(估計需要java環境支持)

 

選定ui

目前推薦mui,效果不錯

 

寫事件

通過js調用原生方法實現app效果

 

寫業務邏輯

環境搭建

前言

本教程是介紹使用html5+nativejs)和mui開發移動app(包括androidios),

 

感興趣請繼續,不感興趣請跳過,大部分來自官方api,增加了一些自己的總結。

 

HBuilder

 

說明

h5+開發app的環境,也是ide,對eclipse做了深度定製,以前使用過eclipse或者myeclipse的童鞋可以直接上手。

 

官網

http://www.dcloud.io/

 

下載

在官網上點擊下載,安裝好後可以自己將文件夾壓縮成zip,方便以後使用,解壓就可以用

 

依賴

估計會需要jre環境,沒有試過,如果需要請自行百度搜索jre安裝方法

 

上手

打開HBuilder之後默認會有一個項目“HelloHBuilder”,裏面有HBuilder使用的介紹

 

快捷鍵

HBuilder一大亮點是快捷鍵,但是如果習慣了自己之前的快捷鍵會很彆扭,需要自己在工具——選項——常規——快捷鍵中修改

 

插件

HBuilder將插件做了下優化,提供了最長用的一些插件,並且使用dcloud網站下載,速度很快,eclipse自帶插件安裝需要翻牆

 

打開工具——插件安裝,安裝自己需要的插件,例如我安裝瞭如下插件:

 

完成

環境搭建就完成了,這應該是所有開發環境搭建中最簡單的了。

 

 

原理介紹

原理

html5+開發app的原理大概是這樣:

 

html頁面負責內容;

 

ui負責頁面樣式;

 

js負責調用原生app方法。

 

html5

html5這部分負責頁面,也就是app中你看到的東西,大概的架構和內容

 

ui

ui負責頁面樣式,既然要做移動app,那做出的效果就得和移動端靠近,這裏並沒有侷限於用哪種ui,比較常見的適配移動端的ui框架有:

 

bootstrap

介紹:Twitter開發的ui框架,特點是可以簡介美觀,可以適配移動端(例如本站:http://uikoo9.com/

 

中文官網:http://v3.bootcss.com/

 

amazeui

介紹:國人模仿bootstrap做的一個ui框架,個人感覺有點多餘,有興趣的可以看看

 

官網:http://amazeui.org/

 

jquery mobile

介紹:HBuilder其實是模仿國外的phonegap,通用mui是模仿jquery mobile,但是感覺也不錯

 

官網:http://jquerymobile.com/

 

mui

介紹:和HBuilder相搭配的移動ui,也和nativejs相搭配,感覺還不錯,模仿的ios7界面風格

 

官網:http://dcloudio.github.io/mui/

 

framework7

介紹:國外一塊模仿ios7ui框架,贊

 

官網:http://www.idangero.us/framework7/

 

 

nativejs

介紹:一個可以調用androidios原生方法的js

入門:http://ask.dcloud.net.cn/article/88

 

搭配

選擇:目前比較好的搭配是mui+nativejs+hbuilder,你也可以嘗試其他的組合,例如jqmobile+nativejs

 

mui-demohttp://www.dcloud.io/hellomui/

 

nativejs-demohttp://www.html5plus.org/#case#/case/id/4.html

 

mui開發示例

前言

看了前面兩篇內容是否有點躍躍欲試了?

 

下面就開始一個簡單的例子,以及mui相關內容

 

mui

官網:http://dcloudio.github.io/mui/

 

說明:希望你可以把官網內容通讀一遍,這是以後開發的基礎

 

開始

新建項目

在首頁點擊新建移動App,如下:


或者在項目管理器內右鍵新建,或者快捷鍵ctrl+n+a

 

選擇模版

這裏選擇mui項目,會自動引入muijscss,如下:


文件結構

默認有以下幾個文件夾:cssfontsjs,如下:

 

簡單開發

header

打開index.html後在body內輸入mh後回車,如下:


body

同樣輸入mbo後回車

 

list

mbody中添加一些列表

最後的代碼

<!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>  

    <link href="css/mui.min.css" rel="stylesheet"/>  

    <script type="text/javascript" charset="utf-8">  

        mui.init();  

    </script>  

</head>  

<body>  

    <header class="mui-bar mui-bar-nav">  

        <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>  

        <h1 class="mui-title">我的標題</h1>  

    </header>  

    <div class="mui-content">  

        <ul class="mui-table-view" id="my_task_list">  

            <li class="mui-table-view-cell">  

                <div class="mui-slider-right mui-disabled">  

                    <a class="mui-btn mui-btn-red">刪除</a>  

                </div>  

                <div class="mui-slider-handle">  

                    待辦事項1  

                </div>  

            </li>  

            <li class="mui-table-view-cell">  

                <div class="mui-slider-right mui-disabled">  

                    <a class="mui-btn mui-btn-red">刪除</a>  

                </div>  

                <div class="mui-slider-handle">  

                    待辦事項2  

                </div>  

            </li>  

        </ul>  

    </div>  

</body>  

</html>  

 

調試(android爲例)

連接手機

首先需要連接手機

 

運行

選擇運行——手機運行——在xx設備上運行

或者使用快捷鍵ctrl+r

 

效果

現在你就可以在手機上看效果了

 

注意

需要開啓開發者模式

 

打包

dcloud證書打包

選擇發行——App打包——選擇android以及dcloud公用證書,如下:


參數配置

可能有時候會提示參數配置錯誤,這是你需要打開項目下manifest.json文件,並去掉第三方插件,如下:

 

等待

返回上一步的發行打包,點擊打包後會提示你已經到雲端打包,你只需要等待了,

 

一小會之後就打包好了,這時你就可以把apk拷貝到自己手機使用了,

mui中幾種open頁面的區別

使用hbuilder+muiapp一段時間,期間遇到問題不少,自己摸索,做了個app,詳見:http://uikoo9.com/dishi/download

 

如果您水平比這個高,那就不用看了,直接跳過。

 

【水平】

 

由於用hbuilder+mui出於興趣,也就沒有去看源碼,停留在使用總結層次,所以有說的不對的地方還請見諒。

 

【幾種打開頁面的方式】

 

1.初始化時創建子頁面

 

2.直接打開新頁面

 

3.預加載頁面

 

【示例】

 

1.初始化時創建子頁面

 

mui.init({  

    subpages: [{  

        url: your - subpage - url, //子頁面HTML地址,支持本地地址和網絡地址  

        id: your - subpage - id, //子頁面標誌  

        styles: {  

            top: subpage - top - position, //子頁面頂部位置  

            bottom: subpage - bottom - position, //子頁面底部位置  

            width: subpage - width, //子頁面寬度,默認爲100%  

            height: subpage - height, //子頁面高度,默認爲100%  

            ......  

        },  

        extras: {} //額外擴展參數  

    }]  

});  

 

2.直接打開新頁面

 

mui.openWindow({  

    url: new - page - url,  

    id: new - page - id,  

    styles: {  

        top: newpage - top - position, //新頁面頂部位置  

        bottom: newage - bottom - position, //新頁面底部位置  

        width: newpage - width, //新頁面寬度,默認爲100%  

        height: newpage - height, //新頁面高度,默認爲100%  

        ......  

    },  

    extras: {  

        ..... //自定義擴展參數,可以用來處理頁面間傳值  

    }  

    show: {  

        autoShow: true, //頁面loaded事件發生後自動顯示,默認爲true  

        aniShow: animationType, //頁面顯示動畫,默認爲”slide-in-right“;  

        duration: animationTime //頁面動畫持續時間,Android平臺默認100毫秒,iOS平臺默認200毫秒;  

    },  

    waiting: {  

        autoShow: true, //自動顯示等待框,默認爲true  

        title: '正在加載...', //等待對話框上顯示的提示內容  

        options: {  

            width: waiting - dialog - widht, //等待框背景區域寬度,默認根據內容自動計算合適寬度  

            height: waiting - dialog - height, //等待框背景區域高度,默認根據內容自動計算合適高度  

            ......  

        }  

    }  

})  

 

3.預加載頁面

 

// 方式1  

mui.init({  

    preloadPages: [{  

        url: prelaod - page - url,  

        id: preload - page - id,  

        styles: {}, //窗口參數  

        extras: {}, //自定義擴展參數  

        subpages: [{}, {}] //預加載頁面的子頁面  

    }]  

});  

  

// 方式2  

var page = mui.preload({  

    url: new - page - url,  

    id: new - page - id, //默認使用當前頁面的url作爲id  

    styles: {}, //窗口參數  

    extras: {} //自定義擴展參數  

});  

 

 

 

【一些區別】

 

1.子頁面和非子頁面

 

以上三種方式中,23打開的頁面非子頁面,

 

區別是子頁面相當於html中的iframe,而非子頁面相當於新開了一個瀏覽器窗口加載了一個html

 

2.子頁面適用於側滑菜單

 

子頁面有其特點,特別適用與index.html+list.html這種情況,

 

如果用index.html(主頁面)+list.html(子頁面)實現的話,當主頁面右滑時子頁面會自動跟隨,

 

而用index.html(主頁面)+list.html(新頁面)實現的話,主頁面右滑,新頁面不右滑,還得單獨處理新頁面。

 

 

3.子頁面使用頻繁切換的情況

 

如果頻繁左滑右滑,在配置較低的手機上會出現list.html遮住index.html的情況,採用子頁面模式就不會,採用新頁面模式機率很大。

 

4.子頁面適用與下拉刷新和上拉加載

 

之前做向下拉刷新的時候,採用的是新頁面的形式,按照官網教程,怎麼搞都不成功,後來看了下源碼,發現下拉刷新必須採用子頁面的形式,也就是你的list.html必須是index.html的子頁面,纔可以下拉刷新。

 

5.新頁面適用於新頁面

 

open一個新頁面,適用於查看詳情之類的,需要打開一個新頁面的情況,並且mui自己封裝了新頁面的back方法,你就不需要去操心了。

 

6.預加載頁面的兩種方式

 

第一種是在初始化的時候預加載,這種情況適合在你這個頁面在很久之後纔會用,如果你要立即到的頁面並使用,那麼你會得到null。第二種方式類似與open,個人感覺沒有什麼太大的區別,唯一的區別是open就直接打開了,preload只是加載,你可以之後選擇打開的時機。

 

7.總結

 

需要下拉刷新上拉加載請使用子頁面,需要打開一個新頁面請使用新頁面方式,需要加載一個頁面但是暫時不使用請使用預加載方式。

 

發佈了74 篇原創文章 · 獲贊 17 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章