基礎
// 判斷值是否是指定數據類型
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:
