MUI是一套前端框架,由DCLOUD公司研發而成,提供大量H5和js語言組成的組件,大大提升了開發效率,能夠用於開發web端應用、web app等應用。javascript
官方文檔php
//第一種方式 <button type="button" class='mui-btn mui-btn-danger mui-action-back'>關閉</button> //第二種方式 默認沒有啓動,如需啓動以下 mui.init({ swipeBack:true //啓用右滑關閉功能 });
除了如上三種操做外,也能夠直接調用mui.back()方法,執行窗口關閉邏輯;
mui.back()僅處理窗口邏輯,若但願在窗口關閉以前再處理一些其它業務邏輯,則可將業務邏輯抽象成一個具體函數,而後註冊爲mui.init方法的beforeback參數;beforeback的執行邏輯爲:css
示例:html
mui.init({
beforeback: function(){ //得到列表界面的webview var list = plus.webview.getWebviewById('list'); //觸發列表界面的自定義事件(refresh),從而進行數據刷新 mui.fire(list,'refresh'); //返回true,繼續頁面關閉邏輯 return true; } });
所謂的預加載技術就是在用戶還沒有觸發頁面跳轉時,提早建立目標頁面,這樣當用戶跳轉時,就能夠當即進行頁面切換,節省建立新頁面的時間,提高app使用體驗。mui提供兩種方式實現頁面預加載。前端
mui.init({
preloadPages:[ { url:prelaod-page-url, id:preload-page-id, styles:{},//窗口參數 extras:{},//自定義擴展參數 subpages:[{},{}]//預加載頁面的子頁面 } ], preloadLimit:5//預加載窗口數量限制(一旦超出,先進先出)默認不限制 });
該種方案使用簡單、可預加載多個頁面,但不會返回預加載每一個頁面的引用,若要得到對應webview引用,還須要經過plus.webview.getWebviewById方式得到;另外,由於mui.init是異步執行,執行完mui.init方法後當即得到對應webview引用,可能會失敗,java
var page = mui.preload({ url:new-page-url, id:new-page-id,//默認使用當前頁面的url做爲id styles:{},//窗口參數 extras:{}//自定義擴展參數 });
經過mui.preload()方法預加載,可當即返回對應webview的引用,但一次僅能預加載一個頁面;若需加載多個webview,則需屢次調用mui.preload()方法;jquery
使用.on()方法實現批量元素的事件綁定,方法介紹:web
示例ajax
mui(".mui-table-view").on('tap','.mui-table-view-cell',function(){ //獲取id var id = this.getAttribute("id"); //傳值給詳情頁面,通知加載新數據 mui.fire(detail,'getDetail',{id:id}); //打開新聞詳情 mui.openWindow({ id:'detail', url:'detail.html' }); })
取消綁定,則可使用off()方法。 off()方法根據傳入參數的不一樣,有不一樣的實現邏輯。json
使用mui.trigger()方法能夠動態觸發特定DOM元素上的事件。
能夠進行一些網頁的跳轉,mui.fire()
移動端開發時,會有一些手勢事件,點擊tap,雙擊doubletap等,爲了方便開放者快速集成這些手勢,mui內置了經常使用的手勢事件,目前支持的手勢事件見以下列表:
分類 | 參數 | 描述 |
---|---|---|
點擊 | tap | 單機屏幕 |
點擊 | doubletap | 雙擊屏幕 |
長按 | longtap | 長按屏幕 |
長按 | hold | 按住屏幕 |
長按 | release | 離開屏幕 |
滑動 | swipeleft | 向左滑動 |
滑動 | swiperight | 向右滑動 |
滑動 | swipeup | 向上滑動 |
滑動 | swipedown | 向下滑動 |
拖動 | dragstart | 開始拖動 |
拖動 | drag | 拖動 |
拖動 | dragend | 結束拖動 |
mui框架默認會監聽部分手勢動做,若是須要監聽你想要的動做,須要在初始化配置動做,mui.init的gestureConfig參數,以下代碼:
mui.init({
gestureConfig:{ tap: true, //默認爲true doubletap: true, //默認爲false longtap: true, //默認爲false swipe: true, //默認爲true drag: true, //默認爲true hold:false,//默認爲false,不監聽 release:false//默認爲false,不監聽 } });
注意:dragstart、drag、dragend共用drag開關,swipeleft、swiperight、swipeup、swipedown共用swipe開關
從上面的api都會或多或少的瞭解部分mui提供的js函數,如mui.init(),可是隻是瞭解函數的部分參數,下面將具體介紹下面一些函數的配置參數及功能
直接上代碼,淺顯易懂
mui.init({
//子頁面 subpages: [{ //... }], //預加載 preloadPages:[ //... ], //下拉刷新、上拉加載 pullRefresh : { //... }, //手勢配置 gestureConfig:{ //... }, //側滑關閉 swipeBack:true, //Boolean(默認false)啓用右滑關閉功能 //監聽Android手機的back、menu按鍵 keyEventBind: { backbutton: false, //Boolean(默認true)關閉back按鍵監聽 menubutton: false //Boolean(默認true)關閉menu按鍵監聽 }, //處理窗口關閉前的業務 beforeback: function() { //... //窗口關閉前處理其餘業務詳情點擊 ↑ "關閉頁面"連接查看 }, //設置狀態欄顏色 statusBarBackground: '#9defbcg', //設置狀態欄顏色,僅iOS可用 preloadLimit:5//預加載窗口數量限制(一旦超出,先進先出)默認不限制 })
mui使用css選擇器獲取HTML元素,返回mui對象數組。
mui("p"):選取全部
元素
mui("p.title"):選取全部包含.title類的
元素
若要將mui對象轉化成dom對象,可以使用以下方法(相似jquery對象轉成dom對象):
//obj1是mui對象 var obj1 = mui("#title"); //obj2是dom對象 var obj2 = obj1[0];
each既是一個類方法,同時也是一個對象方法,兩個方法適用場景不一樣;換言之,你可使用mui.each()去遍歷數組或json對象,也可使用mui(selector).each()去遍歷DOM結構。
var array = [1,2,3] mui.each(array,function(index,item){ console.log(item*item); })
<div class="mui-input-group"> <div class="mui-input-row"> <label>字段1:</label> <input type="text" class="mui-input-clear" id="col1" placeholder="請輸入"> </div> <div class="mui-input-row"> <label>字段2:</label> <input type="text" class="mui-input-clear" id="col2" placeholder="請輸入"> </div> <div class="mui-input-row"> <label>字段3:</label> <input type="text" class="mui-input-clear" id="col3" placeholder="請輸入"> </div> </div>
提交時校驗三個字段均不能爲空,若爲空則提醒並終止業務邏輯運行,使用each()方法循環校驗,以下:
var check = true; mui(".mui-input-group input").each(function () { //若當前input爲空,則alert提醒 if(!this.value||trim(this.value)==""){ var label = this.previousElementSibling; mui.alert(label.innerText+"不容許爲空"); check = false; return false; } }); //校驗經過,繼續執行業務邏輯 if(check){ //..... }
將兩個對象合併成一個對象
var target = { company:"dcloud", product:{ mui:"小巧、高效" } } var obj1 = { city:"beijing", product:{ HBuilder:"飛同樣的編碼" } } mui.extend(target,obj1); //輸出:{"company":"dcloud","product":{"HBuilder":"飛同樣的編碼"},"city":"beijing"} console.log(JSON.stringify(target));
var target = { company:"dcloud", product:{ mui:"小巧、高效" } } var obj1 = { city:"beijing", product:{ HBuilder:"飛同樣的編碼" } } //支持深度合併 mui.extend(true,target,obj1); //輸出:{"company":"dcloud","product":{"mui":"小巧、高效","HBuilder":"飛同樣的編碼"},"city":"beijing"} console.log(JSON.stringify(target));
咱們常常會有經過navigator.userAgent判斷當前運行環境的需求,mui對此進行了封裝,經過調用mui.os.XXX便可
mui提供的plus能夠很方便的訪問系統的原聲東西,如手機devices,還有webview等
mui框架基於htm5plus的XMLHttpRequest,封裝了經常使用的Ajax函數,支持GET、POST請求方式,支持返回json、xml、html、text、script數據類型; 本着極簡的設計原則,mui提供了mui.ajax方法,並在mui.ajax方法基礎上,進一步簡化出最經常使用的mui.get()、mui.getJSON()、mui.post()三個方法。
> mui.ajax( url [,settings] )
url:請求發送的目標地址
settings:key/value格式的json對象,用來配置ajax請求參數,支持的參數以下:
data:發送到服務器的業務數據;
type:請求方式,目前僅支持'GET'和'POST',默認爲'GET'方式;
dataType:預期服務器返回的數據類型;若是不指定,mui將自動根據HTTP包的MIME頭信息自動判斷;
支持設置的dataType可選值:
"xml": 返回XML文檔
"html": 返回純文本HTML信息;
"script": 返回純文本JavaScript代碼
"json": 返回JSON數據
"text": 返回純文本字符串
success:Type: Functon(Anything data,String textStatus,XMLHttpRequest xhr)
請求成功時觸發的回調函數,該函數接收三個參數:
data:服務器返回的響應數據,類型能夠是json對象、xml對象、字符串等;
textStatus:狀態描述,默認值爲'success'
xhr:xhr實例對象
error:Type: Functon(XMLHttpRequest xhr,String type,String errorThrown)請求失敗時觸發的回調函數;
該函數接收三個參數:
xhr:xhr實例對象
type:錯誤描述,可取值:"timeout", "error", "abort", "parsererror"、"null"
errorThrown:可捕獲的異常對象
timeout:Type: Number,請求超時時間(毫秒),默認值爲0,表示永不超時;若超過設置的超時時間(非0的狀況),依然未收到服務器響應,則觸發error回調;
headers:Type: Object,格式爲:{'Content-Type':'application/json'},
mui.ajax(url,{
data:{ username:'username', password:'password' }, dataType:'json',//服務器返回json格式數據 type:'post',//HTTP請求類型 timeout:10000,//超時時間設置爲10秒; success:function(data){ //服務器返回響應,根據響應結果,分析是否登陸成功; ... }, error:function(xhr,type,errorThrown){ //異常處理; console.log(type); } });
mui.post( url [,data] [,success] [,dataType] )
mui.post()方法是對mui.ajax()的一個簡化方法,直接使用POST請求方式向服務器發送數據、且不處理timeout和異常(若需處理異常及超時,請使用mui.ajax()方法)
mui.post('http://server-name/login.php',{ username:'username', password:'password' },function(data){ //服務器返回響應,根據響應結果,分析是否登陸成功; ... },'json' );
> mui.get( url [,data] [,success] [,dataType] )
mui.get()方法和mui.post()方法相似,只不過是直接使用GET請求方式向服務器發送數據、且不處理timeout和異常(若需處理異常及超時,請使用mui.ajax()方法)。以下爲得到某服務器新聞列表的代碼片斷,服務器以json格式返回數據列表:
mui.get('http://server-name/list.php', {category:'news'}, function(data){ //得到服務器響應 ... },'json' );
> mui.getJSON( url [,data] [,success] )
mui.getJSON()方法是在mui.get()方法基礎上的更進一步簡化,限定返回json格式的數據,其它參數和mui.get()方法一致,如上得到新聞列表的代碼換成mui.getJSON()方法後,更爲簡潔,以下:
mui.getJSON('http://server-name/list.php', {category:'news'}, function(data){ //得到服務器響應 ... } );
除上面的api以外,mui還提供了不少封裝好的html組件,使用很是簡單,在Hbuilder ide裏面只須要敲m就會顯示出支持的組件,使用很是方便,這裏就不具體介紹使用方法了,如需瞭解詳情,請點擊一下連接訪問