MUI框架-02-註意事項-適用場景-實現頁面間傳值
阿新 • • 發佈:2018-09-25
存在 net custom fine 影響 chrom 無效 dev 選項卡
MUI框架-02-註意事項-適用場景-實現頁面間傳值
- 關於開發,我拷貝太多也沒什麽意義,就請查閱:官方文檔:http://dev.dcloud.net.cn/mui/ui/
快速入門 - 註意事項
- 有些可能看不懂,這樣排是為了可以做 MUI 開發的時候,養成良好的習慣,避免不必要的錯誤
- DOM 結構:
- 關於 mui 頁面的 dom,你需要知道如下規則
- 固定欄靠前:
- 所謂的固定欄,也就是帶有.mui-bar 屬性的節點,都是基於 fixed 定位的元素;
- 常見組件包括:頂部導航欄(.mui-bar-nav)、底部工具條(.mui-bar-footer)、底部選項卡(.mui-bar-tab);這些元素使用時需遵循一個規則:放在.mui-content 元素之前,即使是底部工具條和底部選項卡,也要放在.mui-content 之前,否則固定欄會遮住部分主內容;
- 一切內容都要包裹在 mui-content 中
- 除了固定欄之外,其它內容都要包裹在.mui-content 中,否則就有可能被固定欄遮罩,原因:固定欄基於Fixed定位,不受流式布局限制,普通內容依然會從 top:0 的位置開始布局,這樣就會被固定欄遮罩,mui 為了解決這個問題,定義了如下 css 代碼:
.mui-bar-nav ~ .mui-content { padding-top: 44px; } .mui-bar-footer ~ .mui-content { padding-bottom: 44px; } .mui-bar-tab ~ .mui-content { padding-bottom: 50px; }
- 你當然可以通過自定義CSS的方式實現如上類似效果,但為了使用簡便,建議將除固定欄之外的所有內容,全部放在.mui-content 中
- 始終為 button 按鈕添加 type 屬性
- 若button按鈕沒有type屬性,瀏覽器默認按照type=submit邏輯處理,這樣若將沒有type的button放在form表單中,點擊按鈕就會執行form表單提交,頁面就會刷新,用戶體驗極差。
- 窗口管理
- 頁面初始化:必須執行mui.init方法
mui在頁面初始化時,初始化了很多參數配置,比如:按鍵監聽、手勢監聽等,因此mui頁面都必須調用一次mui.init()方法;
- 頁面初始化:必須執行mui.init方法
- 頁面跳轉:拋棄 href 跳轉
- 當瀏覽器加載一個新頁面時,若頁面DOM尚未渲染完畢,頁面會先顯示空白,然後等DOM渲染完畢後,再顯示具體內容,這是WEB瀏覽器技術無法逾越的體驗障礙;為解決這個問題,建議使用mui.openWindow方法打開一個新的webview,mui會自動監聽新頁面的loaded事件,若加載完畢,再自動顯示新頁面;
- 擴展閱讀:(當然也很重要,可以先了解)
- hello mui中的無等待窗體切換是如何實現的
- 提示HTML5的性能體驗系列之一 避免切頁白屏
- 頁面關閉:勿重復監聽 backbutton
- mui框架自動封裝了頁面關閉邏輯,若希望自定義返回邏輯(例如編輯頁面的返回,需用戶確認放棄草稿後再執行返回邏輯),則需要重寫mui.back方法,切勿簡單通過addEventListener添加backbutton監聽,因為addEventListener只會增加新的執行程序,mui默認封裝的監聽執行邏輯依然會繼續執行,因此若僅addEventListener添加用戶確認框,則用戶即使選擇了取消,也會繼續關閉窗口。
- 手勢操作
- 點擊:忘記click
快速響應是mobile App實現的重中之重,研究表明,當延遲超過100毫秒,用戶就能感受到界面的卡頓,然而手機瀏覽器的click點擊存在300毫秒延遲(至於為何會延遲,及300毫秒的來龍去脈,請自行谷百),mui為了解決這個問題,封裝了tap事件,因此在任何點擊的時候,請忘記click及onclick操作,統統使用如下代碼:
element.addEventListener('tap',function(){ //點擊響應邏輯 });
- 點擊:忘記click
- 常見錯誤
- Uncaught ReferenceError: plus is not defined
- 在app開發中,若要使用HTML5+擴展api,必須等plusready事件發生後才能正常使用,否則可能會報“plus is not defined”的錯誤;
mui為簡化開發,將plusReady事件封裝成了mui.plusReady()方法,凡涉及到HTML5+的api,建議都寫在mui.plusReady方法中;
適用場景
- mui 適用場景說明:
- 為解決HTML5在低端Android機上的性能缺陷,mui引入了原生加速,其中最關鍵的就是webview控件,因此mui若要發揮其全部能力,需和5+ App配合適用,若脫離5+ App,mui功能會受限,主要涉及三個部分:
適用場景-webview窗口相關
- 涉及 webview 的,除了5+App,其它所有手機瀏覽器及PC瀏覽器均無法使用,涉及功能點包括:
- webview模式窗體動畫
創建子窗口(除了為解決區域滾動的常見雙webview場景,還涉及 - webview模式的選項卡等多webview場景)
- webview模式的側滑菜單(也有div方式側滑菜單)
- webview模式的tab選項卡(也有div方式選項卡)
- nativeUI,如原生的警告框、確認框、popover、actionsheet、toast。這些也有HTML5的實現。
- 預加載
- 自定義事件
第三方擴展插件
涉及webview的,除了5+App,其它所有手機瀏覽器及PC瀏覽器均無法使用,目前主要包括:語音輸入;
- Touch事件相關(註意pc瀏覽器沒有touch事件)
- Touch事件相關的,手機端瀏覽器均可使用、pc端chrome模擬手機瀏覽器也可以正常使用。
但普通PC端瀏覽器因為沒有touch事件,可以顯示控件但滑動操作功能會受限;涉及功能點包括:
手勢事件
- mui封裝的tap相關處理業務:折疊面板、二級列表、二級選項卡;
- mui封裝的swipe、drag相關處理業務:圖片輪播、可左右滑動的圖文表格、可左右滑動的9宮格、滑動觸發列表項菜單、可拖動式側滑菜單、下拉刷新和上拉加載、可拖動式選項卡
- 【備註】:在PC端,大家將tap替換成click,將HTML5默認的Drag事件替換mui 的swipe和drag,就可以解決如上兩個問題。
- 除上述列出的功能點,其它mui功能,均可以在其它手機瀏覽器及PC服務端使用,所有CSS均不受影響。
- 若通過PC端chrome模擬手機瀏覽器訪問hello mui,只能看到首頁標題欄,看不到列表,因為列表是作為子webview頁面加載到首頁的,如無法顯示
MUI 框架如何實現頁面間傳值
- 在App開發中,頁面間傳值是很常見的開發需求,mui框架根據業務場景不同,提供了兩種傳值模式。
- 1、頁面初始化時,通過擴展參數傳值
mui在初始化頁面時,提供了extras配置參數,通過該參數可以設置頁面參數,從而實現頁面間傳值;
mui框架在如下幾種場景下,會執行頁面初始化操作: - 通過mui.openWindow()打開新頁面(若目標頁面為已預加載成功的頁面,則在openWindow方法中傳遞的extras參數無效);
- 通過mui.init()方法創建子頁面;
- 通過mui.init()方法預加載頁面;
通過mui.preload()方法預加載頁面
- 示例,假設我們有如下需求:
在首頁中打開關於頁面時,傳遞當前產品名稱及版本號,然後在關於頁面中讀取這兩個參數並顯示出來;
首頁實現代碼:
mui.openWindow({
url:'info.html',
id:'info.html',
extras:{
name:'mui',
version:'0.5.8'
}
});
關於頁面實現代碼:
var self = plus.webview.currentWebview();
var name = self.name;
var version = self.version;
2、頁面已創建,通過自定義事件傳值
參考mui官網中自定義事件的介紹
更多文章鏈接:MUI 框架
- 本筆記不允許任何個人和組織轉載
MUI框架-02-註意事項-適用場景-實現頁面間傳值