基礎
// 判斷值是否是指定數據類型 var result = hui.isTargetType("百簽軟件", "string"); //=>true var result = hui.isTargetType(123, "number"); // =>true var result = hui.isTargetType("false", "boolean"); // =>false
// 判斷數據類型是否是undefined類型 var result = hui.isUndefined(undefined); // =>true var result = hui.isUndefined(null); // =>false
// 判斷值是否是有效值,非undefined和非null var result = hui.isValid("百簽軟件"); //=>true var result = hui.isValid(null); // =>false
// 判斷是否是數值類型,包括字符串數值 var result = hui.isNumber("123"); //=>true var result = hui.isNumber(456); //=>true var result = hui.isNumber("123a"); // false
// 判斷是否是function類型 var result = hui.isFunction(function () { }); // =>true function get() { }; var result = hui.isFunction(get); // =>true var result = hui.isFunction("abc"); // =>false
// 判斷是否是boolean類型 var result = hui.isBoolean(false); //=>true var result = hui.isBoolean(true); //=>true var result = hui.isBoolean("true"); //=>false
// 判斷是否是字符串類型 var result = hui.isString(""); //=>true var result = hui.isString("百簽軟件"); //=>true var result = hui.isString(123); // =>false var result = hui.isString(null); // =>false
// 判斷是否是日期類型 var result = hui.isDate("2016-08-24"); //=>true var result = hui.isDate("2016/08/24"); //=>true var result = hui.isDate("2016-2-1"); //=>true var result = hui.isDate("2016-08-24 18:06"); //=>true var result = hui.isDate("2016-08-24 18:06:25"); //=>true var result = hui.isDate("2016/08/24 18:06:25"); //=>true var result = hui.isDate("16/08/24"); // =>false var result = hui.isDate("08-24"); //=>false
// 判斷是否是正數 var result = hui.isPlusDecimal(1); //=>true var result = hui.isPlusDecimal(-1); //=>false var result = hui.isPlusDecimal(+1); //=>true var result = hui.isPlusDecimal("10"); //=>true
// 判斷是否是json類型 var obj = "string"; var result = hui.isJson(obj); // =>false var obj1 = new String("abc"); var result = hui.isJson(obj1); // =>false var obj3 = { name: "百簽軟件", autor: "百小僧" }; var result = hui.isJson(obj3); // =>true var obj4 = ["百簽軟件", "百小僧"]; var result = hui.isJson(obj4); // =>false var obj5 = [{ name: "百簽軟件", autor: "百小僧" }]; var result = hui.isJson(obj5); // =>false
// 判斷是否是數組類型 var arr = ["百簽軟件", "百小僧"]; var result = hui.isArray(arr); //=>true var arr1 = new Array(1, 3, 4); var result = hui.isArray(arr1); //=>true var arr2 = [{ name: "百簽軟件", autor: "百小僧" }]; var result = hui.isArray(arr2); //=>true var arr3 = []; var result = hui.isArray(arr3); //=>true
// 判斷是否是HTML元素 var result = hui.isElement(document.body); //=>true var result = hui.isElement(document.getElementById("nav")); // =>false,如果找到該元素就返回 true
// 獲取自定義類名稱 function Persion(name, age) { this.name = name; this.age = age; } var p = new Persion("百小僧", 23); var result = hui.getCustomType(p); // =>Persion
// 獲取方法名稱,非匿名方法,需傳入方法字符串 var result = hui.getFunctionName("function getName() {}"); // =>getName
// 去掉前后空格 var result = hui.trim(" 百小僧 "); // =>百小僧 var result = hui.trim(" 百 小僧 "); // =>百 小僧
// 去掉所有空格 var result = hui.trimAll(" 百 小 僧 "); // =>百小僧
// 判斷是api對象是否存在,通常用來判斷是否是APICloud的開發環境 var result = hui.apiExit(); //=>false apiready = function () { var result = hui.apiExit(); // =>true }; hui.ready = function () { var result = hui.apiExit(); // =>true };
// 將對象序列化成字符串,也就是可以看到內部結構 var obj = { name: "百簽軟件", autor: "百小僧" }; var result = hui.objParse(obj); // =>" { name: "百簽軟件", autor: "百小僧" }"
// 生成唯一 GUID字符串,32位唯一碼 var guid = hui.guid(); // =>abf9a9a2-8ef9-b291-e557-579f8271f3cf
// 序列化json對象為url格式 var obj = { name: "百簽軟件", autor: "百小僧" }; var result = hui.serialize(obj); // =>&name=百簽軟件&autor=百小僧
// 獲取變量值對應的格式類型,方法eval調用 var val = "123"; var reslut = hui.getValueTypeFormat(val); // => "123"
// 對象拷貝,繼承,並返回新的對象,支持深度拷貝 var a = { name: "百簽軟件" }; var b = { autor: "百小僧" }; var result = hui.deepAssign({}, a, b); // =>{name:"百簽軟件",autor:"百小僧"} var c = { name: "百簽軟件", autor: "新生帝" }; var d = { autor: "百小僧", age: 23 }; var result = hui.deepAssign({}, c, d); // =>{name:"百簽軟件",autor:"百小僧",age:23}
DOM
// 根據ID名稱獲取DOM節點 var header = hui.byId("header");
// 根據class屬性名稱獲取DOM節點 var footers = hui.byClassName("hui-footer");
// 根據標簽名稱獲取DOM節點 var elements = hui.byTagName("<div>");
// 模仿jQuery $ 選擇器語法,不同的是,hui.js總是返回數組類型 var header = hui.$("header")[0]; var divs = hui.$("div"); var txt = hui.$("input[type='text']");
// 獲取單個DOM節點 var header = hui.single("header");
// 獲取第一個DOM節點 var div = hui.first("div.nav");
// 獲取最后一個DOM節點 var li = hui.last("ul li");
// 查找指定DOM元素 var header = hui.find(document.body, ".nav");
// 獲取css屬性的值 var val = hui.getCss(document.body, "margin-left"); // =>0px
// 獲取DOM元素的偏移量 var offsetObj = hui.offset(hui.single("header")); // => { t:0,l:0,w:320,h:44}
載入HTML
/* * 載入link import模板 * 輸入參數: * templateSelectors:link 模板內容選擇器 * targetSelectors:載入模板之后追加到指定DOM元素中 */ hui.LoadLinkTppl(".tppl", document.body);
模板引擎
<!--定義模板,<% %> 包裹Javascript代碼,<%= %> 輸出變量 --> <script type="text/html" id="tppl"> <% for(var i=0; i < list.length;i++){ %> <li>名稱:<%=list[i].name %></li> <%} %> </script> <script type="text/javascript"> // 定義數據集合,必須是json類型 var data = { list: [ { name: "百簽軟件", autor: "百小僧", age: 23 } ] }; // 調用hui.tppl(tpl,data); 返回渲染之后的HTML,不能重復渲染多個數據集合 var html = hui.tppl(document.getElementById("tppl").innerHTML, data); // 同時也可以這樣調用 var render = hui.tppl(document.getElementById("tppl").innerHTML); var html = render(data); // 可以載入不同的數據渲染同一套模板 var html2 = render({ list: [{ name: "Hui 2.x", autor: "百小僧" }] }); </script>
屬性
// 獲取App的ID var appId = hui.appId; // 獲取App在桌面上的名稱 var appName = hui.appName; // 獲取App的版本號,只對正式版有用 var appVersion = hui.appVersion; // 獲取移動設備系統類型 var systemType = hui.systemType; // 獲取移動設備系統版本 var systemVersion = hui.systemVersion; // 獲取APICloud的引擎版本 var version = hui.version; // 獲取移動設備唯一標識 var deviceId = hui.deviceId; // 獲取IOS用於推送的Token var deviceToken = hui.deviceToken; // 獲取移動設備型號 var deviceModel = hui.deviceModel; // 獲取移動設備名稱 var deviceName = hui.deviceName; // 獲取移動設備運營商名稱 var operator = hui.operator; // 獲取移動設備網絡連接類型 var connectionType = hui.connectionType; // 獲取App是否全屏 var fullScreen = hui.fullScreen; // 獲取移動設備分辨率寬度 var screenWidth = hui.screenWidth; // 獲取移動設備分辨率高度 var screenHeight = hui.screenHeight; // 獲取App當前打開窗口的名稱 var winName = hui.winName; // 獲取App當前打開窗口的寬度 var winWidth = hui.winWidth; // 獲取App當前打開窗口的高度 var winHeight = hui.winHeight; // 獲取App當前窗口下的Frame名稱 var frameName = hui.frameName; // 獲取App當前窗口下的Frame寬度 var frameWidth = hui.frameWidth; // 獲取App當前窗口下的Frame高度 var frameHeight = hui.frameHeight; // 獲取頁面傳遞過來的參數 var pageParam = hui.pageParam; // 獲取widget傳遞過來的參數 var wgtParam = hui.wgtParam; // 獲取第三方應用傳遞過來的參數 var appParam = hui.appParam; // 獲取當前狀態欄是否支持沉浸式狀態欄 var statusBarAppearance = hui.statusBarAppearance; // 獲取widget 網頁包真實目錄 var wgtRootDir = hui.wgtRootDir; // 獲取手機上fs的真實目錄 var fsDir = hui.fsDir; // 獲取手機上緩存的目錄,IOS系統下載的文件必須放在這個目錄下 var cacheDir = hui.cacheDir; // 獲取config.xml配置的debug字段的值 var debug = hui.debug;
常量
// APICloud的常量存儲在 hui.constant對象中,可通過索引和屬性方式調用,如: // 判斷移動設備系統是否是Android系統 if (hui.systemVersion == hui.constant.systemType.android) { // => Android } else { // => 其他OS } // 目前內置的所有常量如下: hui.constant = { toast_location: { top: "top", middle: "middle", bottom: "bottom" }, sensor_type: { accelerometer: "accelerometer", gyroscope: "gyroscope", magnetic_field: "magnetic_field", proximity: "proximity" }, error_code: { 0: "錯誤", 1: "沒有指定模塊", 2: "沒有指定方法", 3: "參數不匹配", 4: "沒有權限" }, call_type: { tel: "tel", tel_prompt: "tel_prompt", facetime: "facetime" }, location_accuracy: { "10m": "10m", "100m": "100m", "1km": "1km", "3km": "3km" }, animation_type: { none: "none", push: "push", movein: "movein", fade: "fade", flip: "flip", reveal: "reveal", ripple: "ripple", curl: "curl", un_curl: "un_curl", suck: "suck", cube: "cube" }, animation_curve: { ease_in_out: "ease_in_out", ease_in: "ease_in", ease_out: "ease_out", linear: "linear" }, animation_subType: { from_right: "from_right", from_left: "from_left", from_top: "from_top", from_bottom: "from_bottom" }, showProgress_animationType: { fade: "fade", zoom: "zoom" }, showProgress_style: { default: "default" }, getPicture_mediaValue: { pic: "pic", video: "video", all: "all" }, getPicture_videoQuality: { low: "low", medium: "medium", high: "high" }, openPicker_type: { date: "date", time: "time", date_time: "date_time" }, getPicture_encodingType: { jpg: "jpg", png: "png" }, getPicture_destinationType: { base64: "base64", url: "url" }, getPicture_sourceType: { library: "library", camera: "camera", album: "album" }, connectionType: { unknown: "unknown", ethernet: "ethernet", wifi: "wifi", "2g": "2g", "3g": "3g", "4g": "4g", none: "none" }, file_error_code: { "0": "沒有錯誤", "1": "找不到文件錯誤", "2": "不可讀取錯誤", "3": "編碼格式錯誤", "4": "無效操作錯誤", "5": "無效修改錯誤", "6": "磁盤溢出錯誤", "7": "文件已存在錯誤" }, systemType: { ios: "ios", android: "android", win: "win", wp: "wp" }, download_state: { "0": "下載中", "1": "下載完成", "2": "下載失敗" }, ajax_error_code: { "0": "連接錯誤", "1": "超時", "2": "授權錯誤", "3": "數據類型錯誤" }, ajax_dataType: { json: "json", text: "text" }, ajax_method: { get: "get", post: "post", put: "put", delete: "delete", head: "head" }, statusBar_style: { dark: "dark", light: "light" }, screen_orientation: { portrait_up: "portrait_up", portrait_down: "portrait_down", landscape_left: "landscape_left", landscape_right: "landscape_right", auto: "auto", auto_portrait: "auto_portrait", auto_landscape: "auto_landscape" }, ajax_upload_status: { "0": "上傳中", "1": "上傳完成", "2": "上傳失敗" }, softInputMode: { resize: "resize", pan: "pan", auto: "auto" }, imageCache_policy: { default: "default", cache_else_network: "cache_else_network", no_cache: "no_cache", cache_only: "cache_only" }, progress_type: { default: "default", page: "page" }, openSlidLayout_type: { left: "left", right: "right", all: "all" }, openDrawerLayout_type: { left: "left", right: "right" }, code_type: { "utf-8": "utf-8", "gb2312": "gb2312", "gbk": "gbk" }, notification_sound: { default: "default" }, prompt_type: { text: "text", password: "password", number: "number", email: "email", url: "url" } };
事件
// 監聽設備電池電量低事件 hui.batterylow(function (ret, err) { var level = ret.level; // 電池電量(1-100) var isPlugged = ret.isPlugged; // 是否設備連接電源 }); // 監聽設備電池狀態改變事件,如電量變化或正在充電 hui.batterystatus(function (ret, err) { var level = ret.level; // 電池電量(1-100) var isPlugged = ret.isPlugged; // 是否設備連接電源 }); // 監聽設備 back 鍵被點擊事件,僅 Android 平台有效,該事件必須在 Window 中注冊才有效,Frame 中注冊無效,並且只在當前屏幕上的 window 才能收到回調。 hui.keyback(function (ret, err) { var keyCode = ret.keyCode; // 被點擊的按鍵 var longPress = ret.longPress; // 是否是長按 }); // 監聽設備 menu 鍵被點擊事件,僅 Android 平台有效,該事件必須在 Window 中注冊才有效,Frame 中注冊無效,並且只在當前屏幕上的 window 才能收到回調。 hui.keymenu(function (ret, err) { var keyCode = ret.keyCode; // 被點擊的按鍵 var longPress = ret.longPress; // 是否是長按 }); // 監聽設備音量加鍵被點擊事件,僅 Android 平台有效,該事件必須在 Window 中注冊才有效,Frame 中注冊無效,並且只在當前屏幕上的 window 才能收到回調。 hui.volumeup(function () { var keyCode = ret.keyCode; // 被點擊的按鍵 var longPress = ret.longPress; // 是否是長按 }); // 監聽設備音量減鍵被點擊事件,僅 Android 平台有效,該事件必須在 Window 中注冊才有效,Frame 中注冊無效,並且只在當前屏幕上的 window 才能收到回調。 hui.volumedown(function () { var keyCode = ret.keyCode; // 被點擊的按鍵 var longPress = ret.longPress; // 是否是長按 }); // 監聽設備斷開網絡的事件 hui.offline(function (ret, err) { // => 斷網了 }); // 監聽設備連接到網絡的事件 hui.online(function (ret, err) { var connectionType = ret.connectionType; // 當前網絡連接類型 }); // 監聽App進入后台事件,也可以說回到桌面,或者當前手機屏幕顯示的是其他App hui.pause(function (ret, err) { // => App進入后台運行 }); // 監聽應用從后台回到前台事件,也就是顯示在當前手機屏幕上 hui.resume(function (ret, err) { // => App正在當前手機屏幕上運行 }); // 監聽Window 或者 Frame 頁面滑動到底部事件,通常用來做上拉加載 hui.scrolltobottom(function (ret, err) { // =>距離底部0px觸發 }); hui.scrolltobottom(function (ret, err) { // =>距離底部10px觸發 }, { threshold: 10 }); // 監聽設備搖動事件,設置該監聽后,當前 APP 將立即開啟搖動檢測功能 hui.shake(function (ret, err) { // =>手機正在搖動 }); // 監聽應用在前台運行期間,用戶屏幕截圖事件(比如同時按下了 home 鍵和電源鍵),只支持 iOS。 hui.takescreenshot(function (ret, err) { // =>你的iPhone手機截屏了 }); // 監聽Window 或者 Frame 的頁面全局向下輕掃事件 hui.swipedown(function (ret, err) { //=>你在App上快速向下滑動了 }); // 監聽Window 或者 Frame 的頁面全局向左輕掃事件 hui.swipeleft(function (ret, err) { //=>你在App上快速向左滑動了 }); // 監聽Window 或者 Frame 的頁面全局向右輕掃事件 hui.swiperight(function (ret, err) { //=>你在App上快速向右滑動了 }); // 監聽Window 或者 Frame 的頁面全局向上輕掃事件 hui.swipeup(function (ret, err) { //=>你在App上快速向上滑動了 }); // 監聽Window 或者 Frame 的頁面全局單擊事件,監聽該事件后,點擊 window 或者 frame 的任意位置,都將收到 tap 回調 hui.tap(function (ret, err) { // =>你點擊了App頁面 }); // 監聽Window 或者 Frame 的頁面全局長按事件 hui.longpress(function (ret, err) { // =>你長按了頁面 }); // 監聽Window 顯示到屏幕的事件,收到 viewappear 事件回調,即標識當前 Window 已經動畫結束,並且完全顯示到屏幕上,該事件的作用對象為 Window,Frame 的顯示不會收到事件 hui.viewappear(function (ret, err) { // => 當前Window顯示在屏幕上了 }); // 監聽Window 離開屏幕的事件,收到 viewdisappear 事件回調,即標識當前 Window 已經動畫結束,並且完全從屏幕上移除,該事件的作用對象為 Window,Frame 的隱藏不會收到事件,若是 Window 被關閉,此事件不會再回調 hui.viewdisappear(function (ret, err) { // =>當前Window消失在屏幕上,但未關閉 }); // 監聽狀態欄通知被用戶點擊后的回調 hui.noticeclicked(function (ret, err) { var type = ret.type; // 內容來源類型。取值范圍:0-APICloud 收到的推送內容,1-開發者自定義的 var value = ret.value; // 內容,收到的推送內容或者由開發者發送通知時自行傳入的,見notification接口中extra }); // 監聽本應用被其他應用調起來時(Android 平台也可以通過 Activity 打開),收到相關數據的回調,在任意頁面中注冊該監聽后,如果本應用被其他應用調起,將觸發該監聽函數,同時將傳給該應用的數據回調給網頁 hui.appintent(function (ret, err) { var iosUrl = ret.iosUrl; // 其他應用打開本應用的url,只iOS有效 var sourceAppId = ret.sourceAppId; // 其他應用的包名,iOS平台有可能為空字符串 var appParam = ret.appParam; // 其他應用傳遞過來的參數,JSON或字符串類型 }); // 監聽雲修復使用靜默修復時,更新完畢事件。可通過監聽此事件來通知用戶做是否強制重啟應用等操作或者提示,以使更新生效,如果是提示修復,則不會觸發該事件 hui.smartupdatefinish(function (ret, err) { var value = ret.value; var extra = value[0].extra; // 在控制台雲修復里面進行靜默修復時填寫的附加信息 }); // 監聽啟動頁被用戶點擊后的回調 hui.launchviewclicked(function (ret, err) { var value = ret.value; // 附件信息 });
API方法
/* * 打開新窗口 * 輸入參數: * name:窗口名稱,必填 * url:窗口地址,選填,默認為:窗口名稱.html * pageParam:頁面參數,選填 * params:詳細參數配置(和APICloud的Options一致) */ // 打開新窗口 hui.openWin("home"); // url 默認是 home.html // 打開新窗口,指定本地地址 hui.openWin("home", "/html/home.html"); // 打開新窗口,url為 網址 hui.openWin("baidu", "http://www.baidu.com"); // 打開新窗口,傳遞頁面參數 hui.openWin("home", "/html/home.html", { id: 10, name: "百小僧" }); // 新頁面可通過獲取參數值 var id = hui.pageParam.id; var name = hui.pageParam.name; // 打開新窗口,傳遞頁面參數新寫法,兼容URL傳參 hui.openWin("home", "/html/home.html?id=10&name=百小僧"); // 新頁面可通過獲取參數值 var id = hui.pageParam.id; var name = hui.pageParam.name; // 打開新窗口,設置其他可選參數,詳細請看apicloud的 api.openWin的options參數 hui.openWin("home", "/html/home.html", null, { vScrollBarEnabled: false, // 是否顯示垂直滾動條 allowEdit: true // 是否允許頁面長按彈出系統菜單 });
/* * 跨window,跨frame執行腳本 * 輸入參數: * obj:腳本字符串 或 匿名處理方法 或 帶輸入參數的對象 * frameName:window名稱 * name:window名稱 */ // 當前window窗口執行腳本 // 寫法一(不推薦,需轉義,書寫也不方便) hui.execScript("alert('我是百小僧,多多指教');"); // 寫法二(推薦) hui.execScript(function () { alert("我是百小僧,多多指教"); }); // 寫法三(高級用法,可把外部參數傳入) var name = "百小僧"; hui.execScript({ // 把外部參數注入到里面,非常實用 params: { "name": name }, // 要執行的腳本 callback: function () { alert("我是" + name + ",多多指教"); } }); // 指定window窗口執行腳本 // 寫法一(不推薦,需轉義,書寫也不方便) hui.execScript("alert('我是百小僧,多多指教');", null, "home"); // 寫法二(推薦) hui.execScript(function () { alert("我是百小僧,多多指教"); }, null, "home"); // 寫法三(高級用法,可把外部參數傳入) var name = "百小僧"; hui.execScript({ // 把外部參數注入到里面,非常實用 params: { "name": name }, // 要執行的腳本 callback: function () { alert("我是" + name + ",多多指教"); } }, null, "home"); // 指定frame窗口執行腳本 // 寫法一(不推薦,需轉義,書寫也不方便) hui.execScript("alert('我是百小僧,多多指教');", "frame_body"); // 寫法二(推薦) hui.execScript(function () { alert("我是百小僧,多多指教"); }, "frame_body"); // 寫法三(高級用法,可把外部參數傳入) var name = "百小僧"; hui.execScript({ // 把外部參數注入到里面,非常實用 params: { "name": name }, // 要執行的腳本 callback: function () { alert("我是" + name + ",多多指教"); } }, "frame_body"); // 指定frame,window窗口執行腳本 // 寫法一(不推薦,需轉義,書寫也不方便) hui.execScript("alert('我是百小僧,多多指教');", "frame_body", "home"); // 寫法二(推薦) hui.execScript(function () { alert("我是百小僧,多多指教"); }, "frame_body", "home"); // 寫法三(高級用法,可把外部參數傳入) var name = "百小僧"; hui.execScript({ // 把外部參數注入到里面,非常實用 params: { "name": name }, // 要執行的腳本 callback: function () { alert("我是" + name + ",多多指教"); } }, "frame_body", "home");
/* * 異步請求互聯網數據 * 輸入參數: * callback:回調函數 * data:傳入數據 * method:請求方式 * dataType:服務器返回數據類型 * headers:請求報文頭,json類型 * params:詳細參數配置(和APICloud的Options一致) */ var url = "http://m.imzc.cn/mobile/activity/activityList.do"; // 請求服務器端數據,默認get方式,返回json數據 hui.ajax(function (ret, err) { hui.alert(ret); }, url); // 請求服務器端數據,默認get方式,並傳入id參數,返回json數據 hui.ajax(function (ret, err) { hui.alert(ret); }, url, { id: 10 }); // 請求服務器端數據,默認get方式,返回text數據 hui.ajax(function (ret, err) { hui.alert(ret); }, url, hui.constant.ajax_method.get, {}, hui.constant.ajax_dataType.text); // 請求服務器端數據,默認get方式,設置headers hui.ajax(function (ret, err) { hui.alert(ret); }, url, hui.constant.ajax_method.get, {}, hui.constant.ajax_dataType.json, { key: "abcdefg123" }); // 請求服務器端數據,默認get方式,設置其他參數 hui.ajax(function (ret, err) { hui.alert(ret); }, url, hui.constant.ajax_method.get, {}, hui.constant.ajax_dataType.text, null, { cache: true, // 是否緩存 returnAll: true //是否返回全部消息 }); // Post提交數據 hui.ajax(function (ret, err) { hui.alert("提交成功"); }, url, { id: 1, name: "百小僧", age: 23 }, hui.constant.ajax_method.post); // Post提交數據,帶values傳入數據 hui.ajax(function (ret, err) { hui.alert("提交成功"); }, url, { values: { id: 1, name: "百小僧", age: 23 } }, hui.constant.ajax_method.post); // Post上傳單個文件 hui.ajax(function (ret, err) { hui.alert("上傳成功"); }, url, { files: { "file": "fs://abc.jpg" } }, hui.constant.ajax_method.post); // Post上傳多個文件 hui.ajax(function (ret, err) { hui.alert("上傳成功"); }, url, { files: { "file": [ "fs://abc.jpg", "fs://abc2.jpg", "fs://abc.jpg" ] } }, hui.constant.ajax_method.post); // Post上傳文件並提交表單(同步進行) hui.ajax(function (ret, err) { hui.alert("提交成功"); }, url, { values: { id: 1, name: "百小僧", age: 23 }, files: { "file": "fs://abc.jpg" } }, hui.constant.ajax_method.post);
/* * 獲取偏好設置(也就是小數據本地存儲,類似Session,Cookie,常用於登錄判斷操作) * 輸入參數: * callback:回調函數,或字符串 * key:存儲的鍵 */ // 同步獲取數據,直接可以用變量接收(推薦寫法) var value = hui.getPrefs("name"); // 異步獲取數據 hui.getPrefs(function (ret, err) { var value = ret.value; }, "name");
語法糖
打開沉浸式Frame
/* * 打開沉浸式Frame(可設置帶不帶沉浸式,自動計算frame高度,比如除去頭部,尾部。通常用來做首頁,或者在window中打開帶頭部的frame內容頁) * 輸入參數: * name:窗口名稱,必填 * url:窗口地址,選填,默認為:窗口名稱.html * minus:設置沉浸式相關信息,數組類型,只有三個元素:[array,array,boolean],第一、第二元素是一個DOM數組,第一個元素表示frame上邊元素集合,第二個元素表示frame下邊元素集合,第三個元素是設置是否沉浸式,默認為true * pageParam:頁面參數,選填 * bounces:是否允許頁面彈動,默認false * params:詳細參數配置(和APICloud的Options一致) */ // 打開普通frame,默認和windows同高度 hui.openContentFrame("home"); // 可以指定名稱和地址打開frame hui.openContentFrame("home", "/html/home.html"); // 打開frame,並設置頭部為沉浸式 hui.openContentFrame("home", "/html/home.html", [["#header"]]); // 打開frame,設置頭部為沉浸式,並去掉底部的高度,通常用做首頁 hui.openContentFrame("home", "/html/home.html", [["#header"], ["#footer"]]); // 打開frame,設置frame高度頂部排除header,header1,header2的高度,或者底部排除footer,footer1,footer2的高度 hui.openContentFrame("home", "/html/home.html", [["#header", "#header1", "#header2"], ["#footer", "#footer1", "#footer2"]]); // 打開frame,設置頭部為沉浸式,並去掉底部的高度,並設置不需要做沉浸式處理 hui.openContentFrame("home", "/html/home.html", [["#header"], ["#footer"], false]); // 打開frame,設置頭部為沉浸式,並傳遞參數 hui.openContentFrame("home", "/html/home.html", [["#header"]], { id: 1, name: "百小僧" }); // 新頁面可通過獲取參數值 var id = hui.pageParam.id; var name = hui.pageParam.name; // 通常我們的參數都是通過openWin傳入的,那frame只需要調用 hui.pageParam即可,最簡單的不需要設置,因為內部已經做了處理 hui.openContentFrame("home", "/html/home.html", [["#header"]], hui.pageParam); // 上面的等同下面的(推薦下面寫法) hui.openContentFrame("home", "/html/home.html", [["#header"]]); // 打開frame,設置頭部為沉浸式,傳遞頁面參數新寫法,兼容URL傳參 hui.openContentFrame("home", "/html/home.html?id=10&name=百小僧", [["#header"]]); // 新頁面可通過獲取參數值 var id = hui.pageParam.id; var name = hui.pageParam.name; // 打開frame,設置頭部為沉浸式,並設置frame頁面彈動 hui.openContentFrame("home", "/html/home.html", [["#header"]], hui.pageParam, true); // 打開frame,設置其他可選參數,詳細請看apicloud的 api.openFrame的options參數 hui.openContentFrame("home", "/html/home.html", [["#header"]], null, null, { vScrollBarEnabled: false, // 是否顯示垂直滾動條 allowEdit: true // 是否允許頁面長按彈出系統菜單 });
過濾器
// 設置需要過濾器的api方法,通過hui.filter指定 // 設置 hui.closeWin 點擊的時候先執行過濾方法 hui.filter = [ { enable: true, // 是否全局啟用過濾器 handle: function () { // 過濾器處理方法 alert("我是先執行的哦!"); }, emitter: hui.closeWin // 綁定過濾器的api方法 } ]; // 設置 hui.closeWin 點擊的時候先執行過濾方法,如果return false,則禁止向后執行,通用用來做是否登錄權限控制 hui.filter = [ { enable: true, // 是否全局啟用過濾器 handle: function () { // 過濾器處理方法 alert("你還沒登錄哦"); return false; }, emitter: hui.closeWin // 綁定過濾器的api方法 } ]; // 綁定多個過濾器,可以為同一個方法綁定多個過濾器 hui.filter = [ { enable: true, // 是否全局啟用過濾器 handle: function () { // 過濾器處理方法 alert("你還沒登錄哦"); return false; }, emitter: hui.closeWin // 綁定關閉窗口時執行過濾方法 }, { enable: true, // 是否全局啟用過濾器 handle: function () { // 過濾器處理方法 alert("你還沒登錄哦"); return false; }, emitter: hui.openWin // 綁定打開窗口時執行過濾方法 } ]; // 設置過濾器白名單,也就是無需執行過濾認證,一般用來設置登錄頁面,注冊頁面,驗證頁面,或其他頁面無需過濾認證 // 只需要在api方法中任意json對象參數中添加 filterEnable:false 即可,推薦用最后一個參數指定 // 此方法的openWin不會執行 hui.filter綁定的過濾器,也就是所謂的白名單 hui.openWin("login", "login.html", null, { filterEnable: false });
高級用法
api初始化
/* * api對象准備完畢 * 輸入參數: * callback:api對象准備完畢執行回調函數,通常api對象的方法必須在這里面編寫 * DOMContentLoaded:HTML DOM節點加載完畢回調函數 */ // api對象加載完畢之后,獲取網絡連接 hui.ready(function () { var connectionType = hui.connectionType; // =>wifi }); // 無需等待api對象加載完畢,即可操作DOM hui.ready(function () { var connectionType = hui.connectionType; // =>wifi }, function () { var div = hui.$("div"); // 無需等待api對象,只要dom加載完畢即可 });
模塊引入
/* * 載入第三方模塊 * 輸入參數: * modules:模塊名稱,可以是字符串,字符串數組,或者數組字符串 */ // 引入單個模塊,直接可以通過變量接收 var bMap = hui.require("bMap"); // 引入單個模塊,直接可以通過全局變量獲取 hui.require("bMap"); // 通過以下方式可以獲取模塊對象 hui.M.bMap; // 推薦寫法 hui.M["bMap"]; // 引入多個模塊,這種方式只能通過數組索引獲取對象,不推薦 var modules = hui.require("bMap,fs,db"); modules[0]; // bMap對象 modules[1]; // fs對象 modules[2]; // db對象 // 引入多個模塊,直接可以通過全局變量獲取,推薦 hui.require("bMap,fs,db"); hui.M.bMap; // bMap對象 hui.M.fs; // fs對象 hui.M.db; // db對象 // 也可以通過下面方式 hui.M["bMap"]; // bMap對象 hui.M["fs"]; // fs對象 hui.M["db"]; // db對象 // 還可以通過數組方式引入 hui.require(["bMap", "fs", "db"]); // 獲取方法如上
解決openWin切換性能
// openWin切換之所以卡,是因為轉場動畫和DOM渲染同步進行導致的,只要我們避免即可,目前內置了處理方法,如需其他處理,可以自行拓展 // 第一步:為frame頁面的body添加class:<body class="hui-body">,這是頁面便會看不到,因為隱藏起來了,建議是上線階段再改,方便開發 // 第二步:調用hui.optimizeLocation方法,此方法必須寫在window頁面才有作用 /* * 解決openWin切換性能問題 * 輸入參數: * frameName:frame名稱,必填 * animateClassName:窗口切換完成后,DOM顯示動畫,默認是 hui-body-show,可自行拓展 * delay:設置延遲時間,默認為100,單位毫秒,推薦100~300 */ // 在window頁面打開frame推薦寫法 var framName = "badge_body"; hui.openContentFrame(framName, null, [["#header"]]); // 解決openWin切換性能問題,完美原生體驗 hui.optimizeLocation(framName); // 你也可以設置其他顯示動畫,自行拓展 hui.optimizeLocation(framName, "你的動畫class名稱"); // 你也可以設置其他顯示動畫,並設置延遲時間,自行拓展 hui.optimizeLocation(framName, "你的動畫class名稱", 300);
更新記錄
# 2016.09.01 Hui 2.0.0 * [升級] hui.css * [升級] hui.js * [升級] 全部組件 * [優化] 頁面性能
項目地址
開源中國:https://git.oschina.net/baisoft_org/Hui-2.x
文檔地址
官方文檔:http://www.cnblogs.com/baisoft/p/5804168.html
體驗地址
Android:
IOS:
Web: