DC(DCloud)自带的模块不是很好用,所以我们封装了这些模块插件。

Ajax

Ajax 是我们对 DCloud XMLHttpRequest 深度封装的网络数据请求插件。

特点:

1. 参数灵活:传递灵活、简明,具体见下面的参数说明(单参数、多参数)

2. 调试方便:控制台信息打印功能默认开启,无论请求成功或失败,控制台都会打印相应信息

3. 一时语塞,不知所措 ( ╹◡╹ )


配置:

var config = { host: "http://www.domain.com/api/" };

这一坨是什么鬼???!!!!

是这样的,Ajax 是 hhframe 框架的一部分,config 是 hhframe 的全局配置,这个 host 只是其中一项,因为在一个项目中,Ajax 所请求的接口基本上都是一个域名,而且很大程度上也会有一部分相同的前缀(比如上面的 /api/),所以将这部分写入全局配置有两个好处:

1. 修改一处,全局生效,这在开发环境和生产环境切换时非常便捷。

2. 节省代码,每次调用插件时,只需要填写具体的接口名称即可,用的多了会有点卵用。


依赖:

  1. layer(第三方,提示框、对话框)

  2. Console(后天堂插件,打印插件)

  3. jQuery(第三方,底层支持)



此插件有两种调用模式:单参数、多参数,基本上能够应对大部分的使用场景。

单参数:

用法:Ajax(JSON);

说明:当插件的第一个参数是 Object 类型的时候,即单参数模式(即使传多个也不会生效)。

url:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,请求地址。

data:

  1. 类型:

    JSON 对象 / url 地址查询字符串("site=houheaven&author=Eric")

  2. 默认:

  3. 描述:

    选填,POST 数据。

    插件的贴心担当,此参数不为空时,请求的类型是 POST,反之则是 GET,所以就不用单独设置请求的类型了,少写一个参数,贴不贴心。还有一点,插件的 Content-Type 默认是 "application/x-www-form-urlencoded;charset=utf-8",就算传的参数是 JSON 对象,插件在最后发送的时候也会将其转换成 url 地址查询的字符串形式。

loader:

  1. 类型:

    布尔值

  2. 默认:

    true

  3. 描述:

    选填,是否显示加载提示框。

    加载提示框暂时不支持修改,默认为模态(显示的时候不能对页面进行操作)。

loaderAbort:

  1. 类型:

    布尔值

  2. 默认:

    true

  3. 描述:

    选填,加载提示框能否被关闭(关闭时会自动取消 Ajax 请求)。

    这个参数与“安卓的返回键”、“苹果的侧滑返回”进行了绑定。

    在安卓机上,当其为 true 时,用户按下返回键后,加载提示框会被关闭,同时取消 Ajax 请求,反之,页面无响应。

    在苹果机上,当其为 true 时,用户侧滑关闭页面后,加载提示框会被关闭,同时取消 Ajax 请求,反之,页面无响应。

console:

  1. 类型:

    布尔值

  2. 默认:

    true

  3. 描述:

    选填,是否开启控制台打印调试。

success:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,Ajax 请求成功之后执行,未设置且 state:false 时,会短暂出现一个 msg 的提示。

  4. 返回值:

    success(ret)

    格式:{ "state": Boolean, "data": JSON / String / Other, "msg": String }

failed:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,Ajax 请求失败(发生错误)之后执行,默认弹出一个提示“网络异常,是否重新加载?”的对话框。

  4. 返回值:

    failed(ret)

    格式:{ "code": Number, "descp": String }

// 单参数 示例代码
Ajax({
	url: "proc.php",
	data: {
		name: "立树",
		job: "前端程序猿、WebApp开发者",
	},
	success: function(ret){
		alert("Ajax 终于请求成功了,你看返回状态:"+ret.state);
	},
	failed: function(err){
		alert("最后难逃没网的命运");
	}
});

多参数:

用法:Ajax(url,data,success,failed);

说明:这 4 个参数(地址、数据、成功回调、错误回调)在使用时比较灵活,比如第二个参数是数据格式(JSON 对象或者 URL 查询字符串),网络请求将会是 POST 的形式,否则就是 GET。

url:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,请求地址。

data:

  1. 类型:

    JSON 对象 / url 地址查询字符串("site=houheaven&author=Eric")

  2. 默认:

  3. 描述:

    选填,POST 数据。

    对应单参数的 data,此参数不为空时,请求的类型是 POST,反之则是 GET,所以就不用单独设置请求的类型了,少写一个参数,贴不贴心。还有一点,插件的 Content-Type 默认是 "application/x-www-form-urlencoded;charset=utf-8",就算传的参数是 JSON 对象,插件在最后发送的时候也会将其转换成 url 地址查询的字符串形式。

success:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,Ajax 请求成功之后执行,未设置且 state:false 时,会短暂出现一个 msg 的提示。

  4. 返回值:

    success(ret)

    格式:{ "state": Boolean, "data": JSON / String / Other, "msg": String }

failed:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,Ajax 请求失败(发生错误)之后执行,默认弹出一个提示“网络异常,是否重新加载?”的对话框。

  4. 返回值:

    failed(ret)

    格式:{ "code": Number, "descp": String }


多参数的使用场景(6 种)

urldatasuccessfailed请求类型
有值GET
有值有值POST
有值有值有值POST
有值有值有值有值POST
有值有值GET
有值有值有值GET

示例代码:

// 多参数 示例代码
url = "proc.php";
data = {
	name: "立树",
	job: "前端程序猿、WebApp开发者"
};
Ajax(url,data,function(ret){
	alert("这次是真的可以了,你再看下返回状态:"+ret.state);
});

Alert

说明:Alert,弹窗调试插件。

版本:1.1.0

开发:2017-07-21

作者:立树(Eric)


参数:

用法:Alert( param1 [,param2] … [,paramx] )。

说明:参数可以是 1 个,也可以是多个,多参数适用于一次打印多个对象、数组 等。

param:

  1. 类型:

    混合类型(数组、对象、数字、布尔值、字符串)

  2. 默认:

  3. 描述:

    必填,弹窗展示的内容。


示例代码:

// 字符串
Alert("哈哈哈");              // "哈哈哈"

// 等效字符串
Alert("哈哈哈"+"呵呵呵");      // "哈哈哈呵呵呵"
Alert("哈哈哈","呵呵呵");      // "哈哈哈呵呵呵"

// 单个数组
Alert([1,2,3]);                                       // [1,2,3]
Alert(["哈哈","吼吼","怕不是个傻子吧"]);                  // ["哈哈","吼吼","怕不是个傻子吧"]
// 多个数组("\n":换行显示)
Alert([1,2,3],"\n",["哈哈","吼吼","怕不是个傻子吧"]);     // 一行显示一个数组,便于查看数组内容("\n")

// 单个对象
Alert({plugin:"Alert.js",author:"立树"});            // {"plugin":"Alert.js","author":"立树"}
// 多个对象(说到对象,我还没有对象!!)
Alert({plugin:"Alert.js"},"\n",{author:"立树"});     // 一行显示一个对象,便于查看对象内容("\n")

// 特殊对象(会打印对象类型)
Alert(window);               // [object Window]

Console

说明:Console,控制台调试插件。

版本:1.1.2

开发:2018-01-24

作者:立树(Eric)


参数:

用法:Console( param1 [,param2] … [,paramx] )。

说明:参数可以是 1 个,也可以是多个,多参数适用于一次打印多个对象、数组 等。

param:

  1. 类型:

    混合类型(数组、对象、数字、布尔值、字符串)

  2. 默认:

  3. 描述:

    必填,控制台打印的内容。


示例代码:

// 字符串
Console("哈哈哈");              // "哈哈哈"

// 等效字符串
Console("哈哈哈"+"呵呵呵");      // "哈哈哈呵呵呵"
Console("哈哈哈","呵呵呵");      // "哈哈哈呵呵呵"

// 单个数组
Console([1,2,3]);                                       // [1,2,3]
Console(["哈哈","吼吼","怕不是个傻子吧"]);                  // ["哈哈","吼吼","怕不是个傻子吧"]
// 多个数组("\n":换行显示)
Console([1,2,3],"\n",["哈哈","吼吼","怕不是个傻子吧"]);     // 一行显示一个数组,便于查看数组内容("\n")

// 单个对象
Console({plugin:"Console.js",author:"立树"});            // {"plugin":"Console.js","author":"立树"}
// 多个对象(说到对象,我还没有对象!!)
Console({plugin:"Console.js"},"\n",{author:"立树"});     // 一行显示一个对象,便于查看对象内容("\n")

// 特殊对象(会打印比较详细的数据)
Console(window);
// =============================
// Param No.1
// Param Type  : [object Window]
// Constructor : function Window() { [native code] }
// Content Details :
// Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
// =============================
// [object Window]

localdata

说明:localdata,HTML5 本地存储插件。

版本:1.2.0

开发:2018-01-05

作者:立树(Eric)


功能:

  1. 设置缓存

    可以存储 字符串、数字、布尔值、数组、对象 等(详解)。

  2. 读取缓存

    读取已保存的缓存(详解)。

  3. 删除缓存

    删除已保存的缓存(详解)。

  4. 更新缓存

    更新已保存的缓存(详解)。

  5. 清空缓存

    删除所有的缓存(详解)。


设置缓存:

用法:localdata.set(key,val)。

key:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,要存储的数据的键名。

val:

  1. 类型:

    混合类型(字符串、数字、布尔值、数组、对象)

  2. 默认:

  3. 描述:

    必填,要存储的数据。


// 字符串
localdata.set("name","立树");

// 数字
localdata.set("age",25);

// 布尔值
localdata.set("single",true);

// 数组
localdata.set("favor",["电影","音乐","摄影","编程","美食","旅行"]);

// 对象
localdata.set("infos",{job:"前端工程师"});

读取缓存:

用法:localdata.get(key)。

key:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,要读取的数据的键名。


// 示例代码
localdata.get("name");        // 字符串,"立树"
localdata.get("age");         // 字符串,"25"
localdata.get("single");      // 字符串,"true"
localdata.get("favor");       // 数组,["电影","音乐","摄影","编程","美食","旅行"]
localdata.get("infos");       // 对象,{"job":"前端工程师"}
localdata.get("other");       // 读取不到,返回 undefined

删除缓存:

用法:localdata.del(key)。

key:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,要删除的数据的键名。


// 设置缓存
localdata.set("name","立树");
Console(localdata.get("name"));     // 控制台打印 "立树"
// 删除缓存
localdata.del("name");
Console(localdata.get("name"));     // 控制台打印 undefined 

更新缓存:

用法:localdata.update(key,val)。

key:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,要更新的数据的键名。

val:

  1. 类型:

    混合类型(字符串、数字、布尔值、数组、对象)

  2. 默认:

  3. 描述:

    必填,要更新的数据。


// 设置缓存
localdata.set("infos",{job:"设计师"});
Console(localdata.get("infos"));                // 控制台打印 {job:"设计师"}
// 更新缓存
localdata.update("infos",{job:"前端工程师"});
Console(localdata.get("infos"));                // 控制台打印 {job:"前端工程师"}  

清空缓存:

用法:localdata.clear()。

参数:无

// 设置缓存
localdata.set("name","立树");
localdata.set("infos",{job:"前端工程师"});
Console(localdata.get("name"));      // 控制台打印 "立树"
Console(localdata.get("infos"));     // 控制台打印 {"job":"前端工程师"}
// 清空缓存
localdata.clear();
Console(localdata.get("name"));      // 控制台打印 undefined
Console(localdata.get("infos"));     // 控制台打印 undefined 

hhRegex

说明:正则表达式验证插件。

版本:1.4.1

开发:2018-07-04

作者:立树(Eric)


功能:

  1. 邮箱验证

    用于验证 各类邮箱账号(详解)。

  2. 手机号验证

    用于验证 移动、联通、电信 三大运营商的手机号(详解)。

  3. 身份证验证

    用于验证 15位、18位 身份证号,日期范围:1900-今天(详解)。

  4. 车牌号验证

    用于验证 普通车牌号、新能源车牌号、特殊车牌号 等(详解)。


邮箱验证

用法:hhRegex.isEmail(str);

返回值:布尔值

str:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,邮箱账号。

// 示例代码
var email1 = "houheaven";          // 随意字符串
alert(hhRegex.isEmail(email1));    // false

var email2 = "1000@gmail";         // 无效邮箱
alert(hhRegex.isEmail(email2));    // false

var email3 = "10000@gmail.com";    // 有效邮箱
alert(hhRegex.isEmail(email3));    // true

手机号验证

用法:hhRegex.isPhone(str);

返回值:布尔值

str:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,手机号码。

// 示例代码
var phone1 = "houheaven";          // 随意字符串
alert(hhRegex.isPhone(phone1));    // false

var phone2 = "10010102030";        // 无效号码
alert(hhRegex.isPhone(phone2));    // false

var phone3 = "15050050010";        // 有效号码
alert(hhRegex.isPhone(phone3));    // true

身份证验证

用法:hhRegex.isSfz(str);

返回值:布尔值

str:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,身份证号码(15位、18位)。

// 示例代码
var sfz1 = "houheaven";         // 随意字符串
alert(hhRegex.isSfz(sfz1));     // false

var sfz2 = "110110201801241234";    // 无效身份证
alert(hhRegex.isSfz(sfz2));         // false

// 为了隐私安全和避免不必要的麻烦,有效身份证不做演示

车牌号验证

用法:hhRegex.isCar(str);

返回值:布尔值

str:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,车牌号。

// 示例代码
var car1 = "houheaven";         // 随意字符串
alert(hhRegex.isCar(car1));     // false

var car2 = "琼B66666";          // 模拟车牌号
alert(hhRegex.isCar(car2));     // true

hhArr

说明:数组操作插件。

版本:1.2.0

开发:2018-01-26

作者:立树(Eric)


功能:

  1. 数组排序

    对一维数组可以进行升序、降序两种操作(详解)。

  2. 数组打乱

    将数组内容进行随机打乱(详解)。


数组排序

用法:hhArr.sort( arr, key, type );

说明一:此排序会改变原数组,无返回值。

说明二:如果数组不是一维对象数组,第二个参数可以是排序类型。

arr:

  1. 类型:

    数组

  2. 默认:

  3. 描述:

    必填,要排序的数组(仅支持一维数组)。

key:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    选填,对一维对象数组进行排序,key 是对象中的键名。

type:

  1. 类型:

    字符串

  2. 默认:

    "desc"

  3. 取值:

    "desc" - 降序,"asc" - 升序。

  4. 描述:

    选填,排序类型。

// 字符串型数组
var arr = ["bb","AA","z","a"];
hhArr.sort(arr);
Console(arr);              // 默认降序,["z","bb","a","AA"]
// 数字型数组
var arr = [1024,"799",111,66,3];
hhArr.sort(arr,"desc");
Console(arr);              // 降序,[1024,"799",111,66,3]
hhArr.sort(arr,"asc");
Console(arr);              // 升序,[3,66,111,"799",1024]
// 对象型数组
var arr = [
	{idx:3,str:"a"},
	{idx:1,str:"b"},
	{idx:2,str:"c"}
];

// 按 idx 的值进行排序
hhArr.sort(arr,"idx","asc");
Console(arr);
//[
//	{"idx":1,"str":"b"},
//	{"idx":2,"str":"c"},
//	{"idx":3,"str":"a"}
//]

// 按 str 的值进行排序
hhArr.sort(arr,"str","asc");
Console(arr); 
//[
//	{"idx":3,"str":"a"},
//	{"idx":1,"str":"b"},
//	{"idx":2,"str":"c"}
//]

数组打乱

用法:hhArr.shuffle(arr);

说明一:此打乱会改变原数组,无返回值。

说明二:至今不知道这个功能有什么用 。。

arr:

  1. 类型:

    数组

  2. 默认:

  3. 描述:

    必填,要打乱内容的数组。

// 示例代码
var arr = [1024,"799",111,66,3];

// 打乱数组顺序
hhArr.shuffle(arr);
Console(arr);              // [3,1024,"799",111,66]

// 打乱数组顺序
hhArr.shuffle(arr);
Console(arr);              // [66,"799",3,111,1024]

hhObj

说明:对象操作插件。

版本:1.2.0

开发:2018-01-30

作者:立树(Eric)


功能:

  1. 获取对象属性与方法的个数

    只能获取对象的第一级属性与方法,多级不做处理(详解)。


获取对象属性与方法的个数

用法:hhObj.getSize(obj);

说明:此功能不会改变原数组。

返回值:对象一级属性与方法的个数。

obj:

  1. 类型:

    对象

  2. 默认:

  3. 描述:

    必填,要操作的对象。

// 空对象
var obj = {};
Console(hhObj.getSize(obj));       // 0
// 普通对象
var obj = {
	name: "立树",
	detail: {
		age: 25,
		favor: ["电影","音乐","摄影","编程","美食","旅行"]
	},
	greet: function(){
		alert("嘿,小婊砸。");
	}
};
Console(hhObj.getSize(obj));       // 3

hhStr

说明:字符串操作插件。

版本:1.1.0

开发:2018-03-19

作者:立树(Eric)


功能:

  1. 获取浏览器地址的参数

    传入参数名即可获取当前浏览器地址中对应的值(详解)。

  2. 获取指定地址的参数

    传入参数名即可获取指定地址中对应的值(详解)。


获取浏览器地址的参数

用法:hhStr.getQueryValue(key);

说明:如果获取的参数值被 encodeURIComponent 编码过,插件会将其解码后返回。

返回值:参数名不存在时,返回 null。

key:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,要获取的参数名。

// 模拟的浏览器地址
url = "http://boo.com/foo.php?name=Eric&job=developer";
// 获取姓名和职业
Console(hhStr.getQueryValue("name"));       // Eric
Console(hhStr.getQueryValue("job"));        // developer

获取指定地址的参数

用法:hhStr.getUrlValue(url,key);

说明:如果获取的参数值被 encodeURIComponent 编码过,插件会将其解码后返回。

返回值:参数名不存在时,返回 null。

url:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,要操作的有效地址。

key:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,要获取的参数名。

// 模拟的浏览器地址
url = "http://boo.com/foo.php?name=%E7%AB%8B%E6%A0%91&job=developer";
// 获取姓名和职业
Console(hhStr.getQueryValue("name"));       // 立树
Console(hhStr.getQueryValue("job"));        // developer

hhPanel

说明:hhPanel,面板插件。

版本:3.3.0

开发:2018-09-26

作者:立树(Eric)

演示:查看效果


依赖:

  1. smartScroll.js(第三方,插件弹窗防止页面滚动,by 张鑫旭)

  2. jQuery(第三方,底层支持)

  3. Ajax(后天堂插件,网络数据请求)


功能:

  1. 信息弹窗

    显示一个展示信息的弹窗(详解)。

  2. 确认弹窗

    显示一个确认信息的弹窗(详解)。

  3. 输入弹窗

    显示一个输入信息的弹窗(详解)。

  4. 消息弹窗

    显示一个展示信息的弹窗,一段时间后会自动关闭(详解)。

  5. 加载提示框

    提供了几种比较精致百搭的加载提示框,目前应用在 Ajax 插件中(详解)。

  6. 进度条提示框

    显示一个 1-100 进度的提示框(详解)。

  7. 微信提示面板

    主要应用于微信,提供了一款分享提示和一款下载提示(详解)。

  8. 二维码展示面板

    一款简洁百搭的二维码展示面板(详解)。

  9. 分享面板

    APP 特有功能,提供了微信、新浪微博、QQ 等分享方式(详解)。

  10. 上拉菜单面板

    移动端特有功能,仿 APP 的 actionSheet 功能,提供三种风格(详解)。

  11. 级联树面板

    主要是处理级联数据(比如,省市区三级数据选择、医院科室多级选择 等),不限级数(详解)。

  12. 地址面板

    一组提供了 选择、添加、修改等功能的地址面板(详解)。

  13. 远程页面面板

    粗暴的传入一个远程地址,直接就可以打开浏览(详解)。

  14. 模态框

    类似于 bootstrap 模态框功能(详解)。

  15. 关闭面板

    可以关闭单个面板,也可以关闭一组相同类型的面板(详解)。

  16. 关闭全部面板

    可以一次性当前所有的面板(详解)。


信息弹窗

两种调用模式。

简单模式:hhPanel.alert(content,fnYes)

复杂模式:hhPanel.alert(object)

简单模式

用法:hhPanel.alert(content,fnYes)

content:

  1. 类型:

    混合类型(字符串、数组、数字 等)

  2. 默认:

  3. 描述:

    必填,信息内容。

fnYes:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,点击确定按钮后的回调函数。

  4. 返回值:

    function(elm,opt)

    elm:jQuery 元素

    opt:面板参数

// 字符串
hhPanel.alert("Hello hhPanel!");
// 数组
hhPanel.alert(["邪不压正","我不是药神","头号玩家","生存家族","迷雾"]);

复杂模式

用法:hhPanel.alert(object)

具体参数如下。

id:

  1. 类型:

    字符串

  2. 默认:

    default

  3. 描述:

    选填,面板标识,如果一个页面使用多个信息弹窗的话,需要进行设置。

title:

  1. 类型:

    混合类型(字符串、布尔值)

  2. 默认:

    信息提示

  3. 描述:

    选填,标题,为 false 时不显示标题。

content:

  1. 类型:

    混合类型(字符串、数组、对象、数字 等)

  2. 默认:

  3. 描述:

    必填,信息内容。

btns:

  1. 类型:

    数组

  2. 默认:

    ["确定"]

  3. 描述:

    选填,确定按钮文字,只能是数组,并且数组长度为 1。

anim:

  1. 类型:

    字符串

  2. 默认:

    bounce

  3. 描述:

    选填,显示与关闭弹窗的动画特效。

  4. 取值:

    "动画特效"

area:

  1. 类型:

    数组

  2. 默认:

    ["300px","auto"]

  3. 描述:

    选填,面板大小,只能是数组,并且数组长度为 2,前者为宽度,后者为高度。

    宽度支持类型:数字(视为px)、像素(px)、百分比(%)。

    高度支持类型:数字(视为px)、像素(px)、百分比(%)、自适应("auto")。

skin:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    选填,样式类名(用于修改弹窗样式)。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0.5

  3. 取值:

    0-1

  4. 描述:

    选填,遮罩透明度。

yesClose:

  1. 类型:

    布尔值

  2. 默认:

    true

  3. 描述:

    选填,点击确定按钮时,是否自动关闭面板(通常用于异步请求,需要手动关闭)。

yes:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,点击确定按钮后的回调函数。

  4. 返回值:

    function(elm,opt)

    elm:jQuery 元素

    opt:面板参数

// 示例代码
hhPanel.alert({
	title: "新消息",
	content: "我心向水,君心向山。",
	area: ["250px","200px"],
	btns: ["关闭"],
	shade: 0.2,
	anim: "slideUp"
});

确认弹窗

两种调用模式。

简单模式:hhPanel.confirm(content,fnYes)

复杂模式:hhPanel.confirm(object)

简单模式

用法:hhPanel.confirm(content,fnYes)

详情:见信息弹窗(hhPanel.alert)- 简单模式

复杂模式

用法:hhPanel.confirm(object)

具体参数如下(部分参数已略,详见 信息弹窗(hhPanel.alert)- 复杂模式)。

id:略。

title:略。

content:略。

btns:

  1. 类型:

    数组

  2. 默认:

    ["取消","确定"]

  3. 描述:

    选填,面板按钮,只能是数组,并且数组长度为 2。

anim:略。

area:略。

skin:略。

shade:略。

yesClose:略。

yes:略。

cancel:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,点击取消按钮后的回调函数。

// 示例代码
hhPanel.confirm({
	title: "新消息",
	content: "你要是觉得我丑,那你就发个 3 元红包给我,但是呢,我觉得,我可能一个都收不到,呕吼。",
	btns: ["承认你帅","立刻打赏!"]
});

输入弹窗

两种调用模式。

简单模式:hhPanel.prompt(fnYes)

复杂模式:hhPanel.prompt(object)

简单模式

用法:hhPanel.prompt(fnYes)

fnYes:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,点击取消按钮后的回调函数。

  4. 返回值:

    function(val,val_html,elm,opt)

    val:输入内容

    val_html:输入内容的标签形式(formType=textarea 时有效)

    elm:jQuery 元素

    opt:面板参数

// 示例代码
hhPanel.prompt(function(val){
	alert(val);
});

复杂模式

用法:hhPanel.prompt(object)

具体参数如下(部分参数已略,详见 信息弹窗(hhPanel.alert)- 复杂模式)。

id:略。

title:略。

formType:

  1. 类型:

    字符串

  2. 默认:

    text

  3. 取值:

    text(输入框)、textarea(文本框)、password(密码框)、number(数字框)

  4. 描述:

    选填,输入框的类型。

maxlength:

  1. 类型:

    数字

  2. 默认:

    10000

  3. 描述:

    选填,输入框的输入内容长度限制。

value:

  1. 类型:

    混合类型(数字、字符串)

  2. 默认:

  3. 描述:

    选填,输入框的初始化内容。

descp:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    选填,面板的描述。

placeholder:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    选填,输入框的提示文字。

btns:略。

anim:略。

area:略。

skin:略。

shade:略。

yesClose:略。

yes:略(与此方法简单模式的相同)。

cancel:略。

// 示例代码
hhPanel.prompt({
	formType: "textarea",
	descp: "无缘无故的卖个萌~",
	placeholder: "随便写点什么吧",
	yes: function(val,html){
		alert(val);
		console.log(html);
	}
});

消息弹窗

两种调用模式。

简单模式:hhPanel.msg(content,fnEnd)

复杂模式:hhPanel.msg(object)

简单模式

用法:hhPanel.msg(content,fnEnd)

content:略。

fnEnd:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,消息弹窗关闭后的回调函数。

  4. 返回值:

    function(elm,opt)

    elm:jQuery 元素

    opt:面板参数

// 示例代码
hhPanel.msg("我喜欢你,你有意见?");
hhPanel.msg("反抗是不可能反抗的,只有偷偷略略略这个样子。",function(elm,opt){
	console.log("内心:略略略");
});

复杂模式

用法:hhPanel.msg(object)

具体参数如下(部分参数已略,详见 信息弹窗(hhPanel.alert)- 复杂模式)。

content:略。

anim:略。

skin:略。

time:

  1. 类型:

    数字

  2. 默认:

    1500(单位:毫秒)

  3. 描述:

    选填,自动关闭的时间。

end:略(与此方法简单模式的相同)。

// 示例代码
hhPanel.msg({
	content: "你制杖吗?",
	anim: "shake",
	time: 3000,
	end: function(){
		console.log("怕不是个傻子吧。");
	}
});

加载提示框

用法:hhPanel.loader(param,title);

param:可以是 Number(预设样式)、String(关闭提示)、Object(自定义模式)

title:修改提示标题

param类型风格效果默认提示文字
1Number白色切换魔方无遮罩
2Number白色切换魔方有黑色遮罩
3Number黑色旋转花纹无遮罩正在加载中
4Number黑色波动音律无遮罩正在加载中
hideString关闭当前显示的加载提示框
JSONObject见下方详解
// 显示
hhPanel.loader(3);
// 关闭
hhPanel.loader("hide");

param 为 JSON 时候的具体参数。

style:

  1. 类型:

    数字

  2. 默认:

    1

  3. 取值:

    1,2,3,4

  4. 描述:

    必填,样式。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0

  3. 取值:

    0-1

  4. 描述:

    选填,遮罩透明度。

title:

  1. 类型:

    字符串

  2. 默认:

    "正在加载中"

  3. 描述:

    选填,提示标题(style 为 3、4 时有效)。

anim_show:

  1. 类型:

    字符串

  2. 默认:

    bounce

  3. 描述:

    选填,显示的动画特效。

  4. 取值:

    "动画特效"

anim_hide:

  1. 类型:

    字符串

  2. 默认:

    bounce

  3. 描述:

    选填,关闭的动画特效。

  4. 取值:

    "动画特效"

// 示例代码
hhPanel.loader({
	style: 3,
	title: "欧吼~",
	shade: 0.5,
	anim_show: "slideUp",
	anim_hide: "slideUp"
});

进度条提示框

两种调用模式。

简单模式:hhPanel.progress(percent,descp)

复杂模式:hhPanel.progress(object)

简单模式

用法:hhPanel.progress(percent,descp)

percent:

  1. 类型:

    数字

  2. 默认:

    0

  3. 取值:

    0-100

  4. 描述:

    必填,进度值。

descp:

  1. 类型:

    字符串

  2. 默认:

    "请稍后"

  3. 描述:

    选填,提示文字。

// 示例代码
hhPanel.progress(5);
hhPanel.progress(50,"正在下载");

复杂模式

用法:hhPanel.progress(object)

具体参数如下。

id:

  1. 类型:

    字符串

  2. 默认:

    default

  3. 描述:

    选填,面板标识,如果一个页面使用多个进度条提示框的话,需要进行设置。

percent:

  1. 类型:

    数字

  2. 默认:

    0

  3. 取值:

    0-100

  4. 描述:

    必填,进度值。

unit:

  1. 类型:

    字符串

  2. 默认:

    %

  3. 描述:

    选填,进度值的单位。

descp:

  1. 类型:

    字符串

  2. 默认:

    "请稍后"

  3. 描述:

    选填,提示文字。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0

  3. 取值:

    0-1

  4. 描述:

    选填,遮罩透明度。

anim:

  1. 类型:

    字符串

  2. 默认:

    bounce

  3. 描述:

    选填,显示与关闭弹窗的动画特效。

  4. 取值:

    "动画特效"

// 示例代码
hhPanel.progress({
	percent: 25,
	unit: "",
	descp: "正在下载",
	shade: 0.2,
	anim: "slideUp"
});

微信提示面板

用法:hhPanel.wxhelp(param);

param 类型 默认效果 功能说明
"share" String 页面虚化程度(blur):5
遮罩透明度(shade):0.7
动画特效(anim):slideUp
提示图片宽度(width):250px
提示图片右边距(right):10px
提示图片上边距(top):20px
打开一个分享提示
"download" String 页面虚化程度(blur):5
遮罩透明度(shade):0.7
动画特效(anim):slideUp
提示图片宽度(width):85%
提示图片右边距(right):7%
提示图片上边距(top):20px
打开一个下载提示
JSON Object 见下方详解 打开一个自定义提示

param 为 JSON 时候的具体参数。

img:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,提示图片,支持本地路径、网络路径(http)。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0.3

  3. 取值:

    0-1

  4. 描述:

    选填,黑色遮罩的透明度。

anim:

  1. 类型:

    字符串

  2. 默认:

    slideUp

  3. 描述:

    选填,显示与关闭的动画特效。

  4. 取值:

    "动画特效"

width:

  1. 类型:

    字符串

  2. 默认:

    250px

  3. 描述:

    选填,提示图片的宽度。

  4. 取值:

    像素值(比如 "100px")、百分比(比如 "50%")

right:

  1. 类型:

    字符串

  2. 默认:

    10px

  3. 描述:

    选填,提示图片与设备右侧的距离。

  4. 取值:

    像素值(比如 "100px")、百分比(比如 "50%")

top:

  1. 类型:

    字符串

  2. 默认:

    20px

  3. 描述:

    选填,提示图片与设备上侧的距离。

  4. 取值:

    像素值(比如 "100px")、百分比(比如 "50%")

// 分享提示(预定义模式)
hhPanel.wxhelp("share");
// 下载提示(预定义模式)
hhPanel.wxhelp("download");
// 自定义模式
hhPanel.wxhelp({
	img: "http://qnworks.houheaven.com/avatar_06.gif",
	shade: 0.5,
	blur: 10,
	anim: "slideDown",
	width: "50%",
	right: "40px",
	top: "60px"
});

二维码展示面板

说明:这个功能简单实用,就是展示一个二维码。

用法:hhPanel.qrcode(JSON);

id:

  1. 类型:

    字符串

  2. 默认:

    default

  3. 描述:

    选填,面板标识,如果一个页面使用多个二维码面板的话,需要进行设置。

img:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,二维码图片地址,支持本地路径、网络路径(http)。

descp:

  1. 类型:

    字符串

  2. 默认:

    "二维码"

  3. 描述:

    选填,提示文字。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0.3

  3. 取值:

    0-1

  4. 描述:

    选填,黑色遮罩的透明度。

blur:

  1. 类型:

    数字

  2. 默认:

    0

  3. 取值:

    0-100

  4. 描述:

    选填,页面虚化程度。

anim:

  1. 类型:

    字符串

  2. 默认:

    slideUp

  3. 描述:

    选填,显示与关闭的动画特效。

  4. 取值:

    "动画特效"

// 示例代码
hhPanel.qrcode({
	img: "plugin/hhPanel/image/wx_qrcode.jpg",
	descp: "大爷儿,来玩啊",
	anim: "slideUp",
	shade: 0.4,
	blur: 5
});

分享面板

用法:hhPanel.share(JSON);

id:

  1. 类型:

    字符串

  2. 默认:

    default

  3. 描述:

    选填,面板标识,如果一个页面使用多个分享面板的话,需要进行设置。

title:

  1. 类型:

    字符串

  2. 默认:

    "分享到"

  3. 描述:

    选填,面板标题。

list:

  1. 类型:

    数组

  2. 默认:

    []

  3. 取值:

    wxfriend(微信好友)、wxzone(微信朋友圈)、wxfavor(微信收藏)、qqfriend(QQ 好友)、weibo(新浪微博)

  4. 描述:

    必填,要分享的平台。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0.4

  3. 取值:

    0-1

  4. 描述:

    选填,黑色遮罩的透明度。

blur:

  1. 类型:

    数字

  2. 默认:

    0

  3. 取值:

    0-100

  4. 描述:

    选填,页面虚化程度。

success:

  1. 类型:

    函数

  2. 默认:

  3. 描述:

    选填,用户选择分享平台后的回调函数。

  4. 返回值:

    success(ret)

    格式:{ "id": String, "name": String }

// 示例代码
hhPanel.share({
	title: "请选择分享平台",
	list: ["wxfriend","wxzone","wxfavor"],
	shade: 0.2,
	blur: 5,
	success: function(ret)
	{
		// 选择 "微信好友"
		Console(ret.id);      // wxfriend
		Console(ret.name);    // 微信好友
	}
});

上拉菜单面板

用法:hhPanel.actionSheet(JSON);

id:

  1. 类型:

    字符串

  2. 默认:

    default

  3. 描述:

    选填,面板标识,如果一个页面使用多个上拉菜单面板的话,需要进行设置。

title:

  1. 类型:

    字符串

  2. 默认:

    ""

  3. 描述:

    选填,面板标题。

dangers:

  1. 类型:

    字符串、字符串数组(["xxx"])、对象数组([{label:"xxx"}])

  2. 默认:

    []

  3. 描述:

    选填,危险选项菜单(比如“删除”操作),文字为红色。

buttons:

  1. 类型:

    字符串、字符串数组(["xxx"])、对象数组([{label:"xxx"}])

  2. 默认:

    []

  3. 描述:

    必填,普通选项菜单,文字为蓝色。

itemkey:

  1. 类型:

    对象

  2. 默认:

    {id: "id",label: "label"}

  3. 描述:

    选填,菜单(危险选项菜单、普通选项菜单)选项为 对象时,可以指定对象 key(键名)。

cancel:

  1. 类型:

    字符串

  2. 默认:

    "取消"

  3. 描述:

    选填,取消按钮的标题。

display:

  1. 类型:

    字符串

  2. 默认:

    default

  3. 取值:

    default(默认样式)、modal(模态居中样式)、bottom(底部无边距样式)

  4. 描述:

    选填,面板样式。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0.4

  3. 取值:

    0-1

  4. 描述:

    选填,黑色遮罩的透明度。

success:

  1. 类型:

    函数

  2. 默认:

  3. 描述:

    选填,用户选择菜单后的回调函数。

  4. 返回值:

    success(ret1,ret2)

    ret1(插件数据):{"id":ID,"label":String,"index":Number}

    ret2(原始数据):String / Object

// 基础调用
hhPanel.actionSheet({
	buttons: ["转发","点赞","评论","编辑"],
	success: function(ret1,ret2)
	{
		// 选择"评论"
		Console(ret1);      // {"id":"","label":"评论","index":2}
		Console(ret2);      // 评论
	}
});
// 高级调用
hhPanel.actionSheet({
	title: "请选择",
	dangers: "删除",
	buttons: [{label:"转发"},{label:"点赞"},{label:"评论"},{label:"编辑"}],
	display: "modal",
	anim: "bounce",
	success: function(ret1,ret2)
	{
		// 选择"点赞"
		Console(ret1);      // {"id":"","label":"点赞","index":2}
		Console(ret2);      // 点赞
	}
});
// 高级调用
hhPanel.actionSheet({
	title: "请选择",
	dangers: "删除",
	buttons: [
		{uid:"hh101",name:"立树"},
		{uid:"hh102",name:"东城"},
		{uid:"hh103",name:"余愔"}
	],
	itemkey: {id:"uid",label:"name"},
	success: function(ret1,ret2)
	{
		// 选择"东城"
		Console(ret1);      // {"id":"hh102","label":"东城","index":2}
		Console(ret2);      // {"uid":"hh102","name":"东城"}
	}
});

级联树面板

嘚瑟:这个功能可把自己牛批坏了,我先叉会腰。

说明:这个功能主要用于有联动关系的结构数据(省市区的三级地址联动、医院科室部门医生的四级联动 等)。

特点:

  1. 不限制数据级数(深度)
  2. 不限制请求接口的参数,参数配置灵活
  3. 数据缓存,当请求过的数据被再次调用时将直接读取缓存,节省了带宽,提升了访问速度和用户体验

思路说明(以省市区三级联动为例)。

  1. 核心问题一:参数值不固定

    省列表:第一级数据,通常没有参数,直接获取。

    市列表:第二级数据,获取市列表时,肯定需要省的 ID,参数名称(key)可以看做是固定的(比如 province_id),但是参数值(val)是变化的。

    区列表:第三级数据,获取区列表时,肯定需要市的 ID,参数名称(key)可以看做是固定的(比如 city_id),但是参数值(val)是变化的。

    由上可知,这些固定值(province_id、city_id)没有什么问题,关键是如何固定这些变化的参数值,所以,我们引用了魔法变量(灵感来源于七牛),在请求地址中使用 {{id}} 来代表其值,然后在数据请求之前将其替换为具体的值。

    然后,我们将省市区三个接口存放在一个一维数组中,传给插件。

  2. 核心问题二:接口返回数据解析

    项目不同、开发者不同,所以请求接口最终返回的 JSON 数据格式也有可能是不同的。

    但是有一点是可以确定的,开发者一定知道数据格式,因此他只需要把数据中的键名和键值告诉插件就行了,然后省下的功能就甩给插件处理吧(告诉我谁是最贴心的人)。

    然后,我们将三组对应的键值对存放在一个一维数组中,传给插件。

  3. 核心问题三:数据回填

    这个也没什么好说的,只需要将三个值(省市区)存放在一个一维数组中,传给插件。

    综上,如果上面的思路你实在看不懂,那也没关系,看下面的参数说明和演示代码,能用就行了。


用法:hhPanel.tree(JSON);

id:

  1. 类型:

    字符串

  2. 默认:

    default

  3. 描述:

    选填,面板标识,如果一个页面使用多个级联树面板的话,需要进行设置。

title:

  1. 类型:

    字符串

  2. 默认:

    "数据面板"

  3. 描述:

    选填,面板标题。

urls:

  1. 类型:

    数组

  2. 默认:

  3. 描述:

    必填,级联数据的请求地址列表(详见示例代码)。

    数组的长度决定了级联数据的层级。

    魔法变量为 {{id}},不可修改(比如,proc/get_city.php?province_id={{id}})。

rets:

  1. 类型:

    数组

  2. 默认:

  3. 描述:

    必填,接口返回值的键值对列表(详见示例代码)。

    数组的长度必须与 urls 保持一致。

  4. 格式:

    {id:"provinceid",text:"province"}

    id、text 为插件预设值,不可修改。

    provinceid:字符串,指代的是 ID 的键名。

    province:字符串,指代的是 中文展示 的键名。

vals:

  1. 类型:

    数组

  2. 默认:

  3. 描述:

    选填,具体的键值列表,用于数据回填(详见示例代码)。

    数组的长度必须与 urls 保持一致。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0.3

  3. 描述:

    选填,黑色遮罩的透明度。

  4. 取值:

    0-1

blur:

  1. 类型:

    数字

  2. 默认:

    0

  3. 描述:

    选填,页面虚化程度。

  4. 取值:

    0-100

success:

  1. 类型:

    函数

  2. 默认:

  3. 描述:

    选填,用户选择好级联数据的回调函数。

  4. 返回值:

    success(ret)

    格式:{ "items": Array, "ids": Array, "texts": Array, "result": String }


示例代码:

下面是获取省市区三个接口的返回数据( 以“上海市 - 市辖区 - 徐汇区”为例)。

// 获取省级列表(get_province.php)
{
    "state": true,
    "data": [
        {"provinceid":"110000","province":"北京市"},
        {"provinceid":"320000","province":"江苏省"},
        {"provinceid":"310000","province":"上海市"},
        // 略
    ],
    "msg": "success"
}
// 获取市级列表(get_city.php)
{
    "state": true,
    "data": [
        {"cityid":"310100","city":"市辖区","provinceid":"310000"},
        {"cityid":"310200","city":"县","provinceid":"310000"}
    ],
    "msg": "success"
}
// 获取区县列表(get_area.php)
{
    "state": true,
    "data": [
        {"areaid":"310104","area":"徐汇区","cityid":"310100"},
        {"areaid":"310106","area":"静安区","cityid":"310100"},
        {"areaid":"310115","area":"浦东新区","cityid":"310100"},
        // 略
    ],
    "msg": "success"
}

下面是选择地址的调用代码。

// 选择地址
hhPanel.tree({
	id: "choose",
	title: "选择地址",
	urls: [
		"proc/get_province.php",          // 获取省级列表
		"proc/get_city.php?pid={{id}}",   // 获取市级列表
		"proc/get_area.php?cid={{id}}"    // 获取区县列表
	],
	rets: [
		{id:"provinceid",text:"province"},  // provinceid、province 参照 get_province.php
		{id:"cityid",text:"city"},          // cityid、city 参照 get_city.php
		{id:"areaid",text:"area"}           // areaid、area 参照 get_area.php
	],
	success: function(ret){
		// 选择成功
	}
});
// 回调成功的返回值
{
    "items": [
        {"id":310000,"text":"上海市"},
        {"id":310100,"text":"市辖区"},
        {"id":310104,"text":"徐汇区"}
    ],
    "ids": [310000,310100,310104],
    "texts": ["上海市","市辖区","徐汇区"],
    "result": "上海市市辖区徐汇区"
}

下面是修改地址的调用代码。

// 选择地址
hhPanel.tree({
	id: "edit",
	title: "修改地址",
	urls: [
		"proc/get_province.php",
		"proc/get_city.php?pid={{id}}",
		"proc/get_area.php?cid={{id}}"
	],
	rets: [
		{id:"provinceid",text:"province"},
		{id:"cityid",text:"city"},
		{id:"areaid",text:"area"}
	],
	vals: [310000,310100,310104],     // 省市区的值,面板打开时,自动被选中
	success: function(ret){
		// 选择成功
	}
});

PS:省市区三级数据选择只是一个小小的例子,替换参数之后,插件可以应用各种场景。


地址面板

地址面板,是继“级联树面板”后开发的又一强大功能。

  1. 跨终端:地址面板为移动端开发,同时对 PC 做了适配(550x350)
  2. 多功能:集成了地址列表、添加、修改等功能,并且各功能可独立使用

地址数据格式问题。

与“级联树面板”自定义的数据格式不同,地址面板数据预先定义好了一套数据格式,若想使用此功能,开发者必须严格遵从。

// 地址数据格式(以下为虚拟数据)
{
	"id": 1000,                                      // 地址 ID
	"name": "Eric",                                  // 收件人姓名
	"phone": "1506007xxxx",                          // 收件人手机号
	"province_id": "310000",                         // 省 ID
	"province": "上海市",                             // 省名称
	"city_id": "310100",                             // 市 ID
	"city": "市辖区",                                 // 市名称
	"area_id": "310115",                             // 区 ID
	"area": "浦东新区",                                // 区名称
	"detail": "金茂大厦999层",                         // 具体地址
	"address": "上海市市辖区浦东新区金茂大厦999层",       // 全部地址信息
	"postalcode": "",                                // 邮政编码
	"is_default": 0,                                 // 是否是默认地址(0-否,1-是)
	"is_delete": 0,                                  // 是否已被删除(0-否,1-是)
	"created": "2018-07-26 17:33:02"                 // 创建时间
}

三种功能模式:选择地址、添加地址、修改地址。

选择地址

用法:hhPanel.addr(object)

具体参数如下。

id:

  1. 类型:

    字符串

  2. 默认:

    default

  3. 描述:

    选填,面板标识,如果一个页面使用多个地址面板的话,需要进行设置。

mode:

  1. 类型:

    字符串

  2. 描述:

    必填,面板模式,当其处于“选择地址”时,mode 必须为 "list"。

title:

  1. 类型:

    字符串

  2. 默认:

    收货地址

  3. 描述:

    选填,面板标题。

list_url:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,地址的列表接口。

add_url:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,地址的添加接口。

edit_url:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,地址的修改接口。

tree:

  1. 类型:

    对象

  2. 默认:

    空对象

  3. 描述:

    必填,级联树面板参数(详见 hhPanel.tree)。

    地址列表中,地址添加、修改时,会对省市区进行操作,因此会调用级联树面板。

blur:

  1. 类型:

    数字

  2. 默认:

    0

  3. 取值:

    0-100

  4. 描述:

    选填,页面虚化程度。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0.3

  3. 取值:

    0-1

  4. 描述:

    选填,遮罩透明度。

shadeClose:

  1. 类型:

    布尔值

  2. 默认:

    true

  3. 描述:

    选填,点击遮罩后是否关闭面板。

success:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,用户选择地址后的回调函数。

  4. 返回值:

    function(addr)

    addr:选择的地址数据(JSON)。

// 地址列表
hhPanel.addr({
	id: "list",
	mode: "list",
	title: "我的地址",
	list_url: "addr_list.php?uid=10001",
	add_url: "addr_add.php?uid=10001",
	edit_url: "addr_edit.php?uid=10001",
	tree: {
		urls: [
			"get_province.php",
			"get_city.php?pid={{id}}",
			"get_area.php?cid={{id}}"
		],
		rets: [
			{id:"provinceid",text:"province"},
			{id:"cityid",text:"city"},
			{id:"areaid",text:"area"}
		]
	},
	success: function(addr){
		// 选择地址成功后的操作
	}
});

添加地址

用法:hhPanel.addr(object)

具体参数如下(部分参数已略,详见“选择地址”)。

id:略。

mode:

  1. 类型:

    字符串

  2. 描述:

    必填,面板模式,当其处于“添加地址”时,mode 必须为 "add"。

title:略。

add_url:略。

tree:略。

blur:略。

shade:略。

shadeClose:略。

success:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,用户添加地址后的回调函数。

  4. 返回值:

    function(addr)

    addr:添加的地址数据(JSON)。

// 添加地址
hhPanel.addr({
	mode: "add",
	title: "添加地址",
	add_url: "addr_add.php?uid=10001",
	tree: {
		urls: [
			"get_province.php",
			"get_city.php?pid={{id}}",
			"get_area.php?cid={{id}}"
		],
		rets: [
			{id:"provinceid",text:"province"},
			{id:"cityid",text:"city"},
			{id:"areaid",text:"area"}
		]
	},
	success: function(addr){
		// 选择地址成功后的操作
	}
});

修改地址

用法:hhPanel.addr(object)

具体参数如下(部分参数已略,详见“选择地址”)。

id:略。

mode:

  1. 类型:

    字符串

  2. 描述:

    必填,面板模式,当其处于“修改地址”时,mode 必须为 "edit"。

title:略。

edit_url:略。

tree:略。

addr:

  1. 类型:

    对象

  2. 默认:

    空对象

  3. 描述:

    必填,要修改的地址数据(请注意数据格式)。

blur:略。

shade:略。

shadeClose:略。

success:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,用户修改地址后的回调函数。

  4. 返回值:

    function(addr)

    addr:修改的地址数据(JSON)。

// 修改地址
hhPanel.addr({
	mode: "edit",
	edit_url: "addr_edit.php?uid=10001",
	tree: {
		urls: [
			"get_province.php",
			"get_city.php?pid={{id}}",
			"get_area.php?cid={{id}}"
		],
		rets: [
			{id:"provinceid",text:"province"},
			{id:"cityid",text:"city"},
			{id:"areaid",text:"area"}
		],
		vals: [310000,310100,310104]
	},
	addr: {
		"id":5000,
		"name":"立树",
		"phone":"150500xxxxx",
		"province_id":"310000",
		"province":"上海市",
		"city_id":"310100",
		"city":"市辖区",
		"area_id":"310104",
		"area":"徐汇区",
		"detail":"徐家汇23333号",
		"address":"上海市市辖区徐汇区徐家汇23333号",
		"postalcode":"666666",
		"is_default":0,
		"is_delete":0,
		"created":"2018-04-29 22:30:04"
	},
	success: function(addr){
		// 选择地址成功后的操作
	}
});

远程页面面板

两种调用模式。

简单模式:hhPanel.page(url)

复杂模式:hhPanel.page(object)

简单模式

用法:hhPanel.page(url)

url:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,远程页面的地址。

// 本地页面
hhPanel.page("music/index.html");
// 远程页面
hhPanel.page("http://www.houheaven.com");

复杂模式

用法:hhPanel.page(object)

具体参数如下。

id:

  1. 类型:

    字符串

  2. 默认:

    default

  3. 描述:

    选填,面板标识,如果一个页面使用多个远程页面面板的话,需要进行设置。

title:

  1. 类型:

    混合(字符串、布尔值)

  2. 默认:

    false

  3. 描述:

    选填,面板标题,设置后会显示一个带有关闭按钮的面板头部,为 false 时不显示。

url:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,远程页面的地址。

area:

  1. 类型:

    数组

  2. 默认:

    ["80%","80%"]

  3. 描述:

    选填,面板大小,只能是数组,并且数组长度为 2,前者为宽度,后者为高度。

    宽度支持类型:数字(视为px)、像素(px)、百分比(%)。

    高度支持类型:数字(视为px)、像素(px)、百分比(%)。

display:

  1. 类型:

    字符串

  2. 默认:

    "center"

  3. 取值:

    center(居中)、bottom(居下)

  4. 描述:

    选填,面板显示位置(与 area 配合使用)。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0.4

  3. 取值:

    0-1

  4. 描述:

    选填,遮罩透明度。

shadeClose:

  1. 类型:

    布尔值

  2. 默认:

    true

  3. 描述:

    选填,点击遮罩后是否关闭面板。

destroyOnClose:

  1. 类型:

    布尔值

  2. 默认:

    true

  3. 描述:

    选填,关闭面板后是否删除面板 DOM。

anim:

  1. 类型:

    字符串

  2. 默认:

    slideUp

  3. 描述:

    选填,显示与关闭弹窗的动画特效。

  4. 取值:

    "动画特效"

// 全屏显示
hhPanel.page({
	id: "page1",
	title: "houheaven",
	url: "http://www.houheaven.com",
	area: ["100%","100%"],
	destroyOnClose: false
});
// 底部显示
hhPanel.page({
	id: "page2",
	title: "搜索还是谷歌好!",
	url: "http://baidu.com",
	shade: 0.5,
	area: ["100%","75%"],
	display: "bottom",
	destroyOnClose: false
});

模态框

此功能类似于 bootstrap modal,需要在页面中提前写好指定格式的 html 标签(以下面代码为例)。

首先,".hhModal" 是最外层容器,是必须的,而且必须是类名(class)。

其次,".hhModalHeader"(及内部)、 ".hhModalContent" 是预设样式,而任何加了 hhModalClose 类名之后,都会被绑定一个点击关闭模态框的事件。


正经演示

什么都不要说了,这次充多少?

当前时间戳:0


用法:hhPanel.modal(object)

具体参数如下。

elm:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    必填,要显示的模态框的标签,只能是 类名(class)、唯一标识(id)。

shade:

  1. 类型:

    浮点数

  2. 默认:

    0.4

  3. 取值:

    0-1

  4. 描述:

    选填,遮罩透明度。

shadeClose:

  1. 类型:

    布尔值

  2. 默认:

    true

  3. 描述:

    选填,点击遮罩后是否关闭面板。

anim:

  1. 类型:

    字符串

  2. 默认:

    slideUp

  3. 描述:

    选填,显示与关闭弹窗的动画特效。

  4. 取值:

    "动画特效"

init:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,初始化成功的回调函数,模态框第一次初始化时触发。

  4. 返回值:

    function(ret){}

success:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,调用成功的回调函数,每次显示模态框都会触发。

  4. 返回值:

    function(ret){}

// JS 调用
hhPanel.modal({
	elm: ".demo",
	init: function(ret){
		Console(ret);
	},
	success: function(ret){
		$(ret.elm).find(".time").text(Date.now());
	}
});

关闭面板

用法:hhPanel.close([type]);

type:

  1. 类型:

    字符串

  2. 默认:

  3. 取值:

    hhAlert(信息弹窗)、hhConfirm(确认弹窗)、hhPrompt(输入弹窗)、hhMsg(消息弹窗)

    hhLoader(加载弹窗)、hhProgress(进度条)、hhQrcode(二维码)、hhShare(分享)、hhWxHelp(微信引导)

    hhActionSheet(上拉菜单)、hhTree(级联树)、hhAddr(地址)、hhPage(远程页面)

  4. 描述:

    选填,面板类型。

    值为空时,关闭最上方的面板。

    不为空时,则关闭此类型的所有面板。

// 关闭单个面板
hhPanel.close();

// 关闭全部消息弹窗
hhPanel.close("hhMsg");

关闭全部面板

说明:一次性当前所有的面板。

用法:hhPanel.closeAll();

// 关闭全部面板
hhPanel.closeAll();

hhQrcodeScan

说明:扫码插件(二维码/条形码)。

版本:1.0.0

作者:立树(Eric)


参数:

用法:hhQrcodeScan( success )

success:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    必填


返回值:

type:

  1. 类型:

    字符串

  2. 范围:

    Qrcode(二维码)、EAN13(13位条形码)、EAN8(8位条形码)

  3. 说明:

    扫码类型。

descp:

  1. 类型:

    字符串

  2. 说明:

    扫码类型的说明(对应 type 括号内容)。

data:

  1. 类型:

    混合类型(字符串、数字、数组、对象、布尔 等)

  2. 说明:

    扫码数据。

// 示例代码
hhQrcodeScan(function(ret){
	Console(ret.type);     // Qrcode
	Console(ret.descp);    // 二维码
	Console(ret.data);     // www.houheaven.com
});

Gpush

Gpush(Getui Push):"个推推送插件"。

个推推送真的很不错,普通推送就不谈了,它的亮点在于它能够发送“透传推送”,用户 APP 不在线也能收到信息,苹果完全没问题,可惜的是部分安卓手机无法实现此效果(手机厂商为了省电之类的原因,用户关闭 APP 后,个推后台接收进程也被关闭了)。

但是个推也仅仅是不错,因为他们官方文档堪称简陋(苹果 APN 透传推送参数完全忽略),在开发这个插件的过程中,使用了五台设备(苹果 6、锤子 T2、小米 3、雷电模拟器、海马玩模拟器)反复推送测试,爬坑无数,心酸无比。

个推的特点:

1. 功能强大:支持 普通推送、透传推送、链接推送、下载推送。

2. 透传推送免费:用过 AC 的极光推送模块,他们的透传推送是要收费的,DC 没用过极光。


三种推送模式:

这三种模式的名词都是我们内部交流时使用的,为了更好的了解本插件,先解释下。

  1. 外推(外部推送)

    简单的说,就是我们能够看到的推送。

    比如,通知栏的推送列表,比如,苹果的临时横幅,我都称之为“外推”。

  2. 内推(内部推送)

    这种推送是隐藏性质的,它们不会出现在手机的通知栏或横幅,它们适用于这种场景:

    ①. APP 在前台时,收到推送时,会出现一个对话框来询问用户是否跳转。

    ②. 完全不提示用户,比如,用户账号在其他手机登录,APP 接收到推送时,强制用户退出。

  3. 智推(智能推送)

    APP 在前台时,发送内推。

    APP 在后台或者关闭时,发送外推。


依赖:

个推推送自身就需要前端与后台的高度配合,此插件也是如此。

我们定义了特定的推送消息数据格式,此插件与后台进行对接时需要这套数据格式,不然无法正常运行。

参数:

插件的唯一参数是一个回调函数。

收到推送事件(Receive)、推送点击事件(Click)已被内置在插件中,当这两个事件被触发时,插件会先已处理好推送逻辑,然后将推送的数据进行格式化,然后会触发这个回调函数,并将格式化的消息返回,以供开发者处理业务逻辑。

格式化的推送消息:

  1. title 消息标题

  2. descp 消息内容

  3. event 事件名称(开发者根据此参数决定执行业务逻辑)

  4. data 推送数据(服务器返回的业务数据)


示例代码:

// 个推推送
Gpush(function(notice){
	switch(notice.event)
	{
		case "warning":
			// 弹出警告内容
			alert(notice.descp);
			break;
		case "logout":
			// 执行强制用户退出的程序
			UserLogout();
			break;
	}
});

imgupload

七牛图片上传。

七牛是一个异常彪悍、异常好用的平台,以至于从上世纪80年代我就开始用了(开个玩笑)。


插件特点:

  • 智能裁剪:下方有详解。
  • 多图上传:借助 DC 的 uploader 功能,插件能够实现一次选择多张图片上传,减少用户操作。
  • 令牌失效处理:令牌失效后,插件会自动处理更新令牌,正在上传的图片也不会被中断,达到无缝衔接。
  • 多种上传模式:图片来源(摄像头、相册)菜单选择、相册直接选择、不选择直接上传指定图片 等。

智能裁剪:

这是插件的核心功能之一。

图片裁剪是七牛平台提供的一个重要功能,本身就已经很强大了。

在七牛图片裁剪的原生能力基础上,又做了算法优化,能保证缩略图与设置预期相符。

我们主要用的是 imageView2/1/ 这种裁剪模式,因为它比较符合项目需求,但是这个裁剪功能有个小缺点,它只能在大尺寸图片上裁剪,才能得到小尺寸的缩略图。

先看这组数据:

大尺寸图片裁剪

原图效果原图尺寸裁剪尺寸缩略图尺寸缩略图比例最终效果
横图1000x750500x500500x5001:1正常
竖图600x800500x500500x5001:1正常
正方形图750x750500x500500x5001:1正常

这组数据的意思是,将不同尺寸的大图裁剪成 500x500 的正方形缩略图。

虽然我们的规划是好的,但是用户选的图片往往是难以把控的,如果他选择的图片尺寸不足 500x500 呢?

再看这组数据:

小尺寸图片裁剪

原图效果原图尺寸裁剪尺寸缩略图尺寸缩略图比例最终效果
横图600x400500x500500x4005:4异常
横图400x300500x500400x3004:3异常
竖图150x250500x500150x2503:5异常
正方形图100x100500x500100x1001:1正常

当图片的尺寸小于(或者部分小于)裁剪尺寸时,缩略图比例紊乱,这时候就无法达到我们的预期了。

我们裁剪图片获取缩略图的目的是什么,大部分的需求是要获取一张跟缩略图尺寸比例相同的,或者一组比例相同的图片,便于页面布局。

所以,我们认为,保证缩略图图片比例的重要性 要远高于 保证缩略图最终尺寸的重要性

所以,我们做了大量的实验,涵盖了各种尺寸、各种情况,最终在插件内部嵌入了图片裁剪算法,来解决这个问题。

下面是经过裁剪算法得到的数据:

图片智能裁剪

原图效果原图尺寸裁剪尺寸缩略图尺寸缩略图比例最终效果
横图1000x750500x500500x5001:1正常
竖图600x800500x500500x5001:1正常
正方形图750x750500x500500x5001:1正常
横图600x400500x500400x4001:1正常
横图400x300500x500300x3001:1正常
竖图150x250500x500150x1501:1正常
正方形图100x100500x500100x1001:1正常

参数:

用法:imgupload(JSON);

source:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    选填,图片来源。

    "camera":APP 直接打开摄像头,拍摄后上传。

    "album":APP 直接打开本地相册,用户选择图片后上传。

    空值或其他,APP 会弹出图片来源提示菜单(摄像头、本地相册),供用户选择。

file:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    选填,图片路径。

    设置有效的图片路径后,插件会将其直接上传,此时 source 参数会失效。

prefix:

  1. 类型:

    字符串

  2. 默认:

  3. 描述:

    选填,图片前缀。

    无前缀,http://www.xxxx.com/hello.jpg。

    有前缀,http://www.xxxx.com/foo/hello.jpg。

thumb_w:

  1. 类型:

    数字

  2. 默认:

    200

  3. 描述:

    选填,图片上传后缩略图的宽度。

thumb_h:

  1. 类型:

    数字

  2. 默认:

    200

  3. 描述:

    选填,图片上传后缩略图的高度。

multi:

  1. 类型:

    布尔值

  2. 默认:

    false

  3. 描述:

    选填,是否开启多张图片上传。

multi_num:

  1. 类型:

    数字

  2. 默认:

    9

  3. 描述:

    选填,一次最多选择的图片数量,当 multi = ture 时有效。

qn_token:

  1. 类型:

    字符串

  2. 默认:

    全局配置(config)中的 qn_token

  3. 描述:

    选填,七牛图片上传令牌的获取地址。

    插件初始化时,会取全局配置(config)中的 qn_token 作为默认值,如果设置了此参数,将会覆盖掉默认值。

    返回格式:{"uptoken":"xxxxxx","expire":"3600000"}。

qn_server:

  1. 类型:

    字符串

  2. 默认:

    全局配置(config)中的 qn_server

  3. 描述:

    选填,七牛存储空间地址,用来显示图片。

    插件初始化时,会取全局配置(config)中的 qn_server 作为默认值,如果设置了此参数,将会覆盖掉默认值。

    比如,将 hello.jpg 上传到七牛空间(bucket),图片地址是 http://www.xxxx.com/hello.jpg,那么,qn_server 就要设置为 "http://www.xxxx.com/"。

success:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,当单张图片上传完成之后就会触发(单图触发一次,多图触发多次)。

  4. 返回值:

    success(image,thumb,infos)

    image:原图地址

    thumb:缩略图地址

    infos:原图信息(图片名称、大小、宽度、高度、Mime 类型)

complete:

  1. 类型:

    回调函数

  2. 默认:

  3. 描述:

    选填,当所有图片上传完成之后才会触发(单图、多图都会触发)。

  4. 返回值:

    complete(array)

    单图:[{image:"原图地址",thumb:"缩略图地址",infos:"原图信息"}]

    多图:[{image:"原图地址",thumb:"缩略图地址",infos:"原图信息"},{image:"原图地址",thumb:"缩略图地址",infos:"原图信息"}]


示例代码

// 默认模式,从摄像头、相册上传单张图片,获取 200x200 尺寸的缩略图
imgupload({
	success: function(img,thumb){
		console.log(img);    // http://www.xxx.com/hello.jpg
		console.log(thumb);  // http://www.xxx.com/hello.jpg?imageView2/1/w/200/h/200
	}
});
// 从相册上传单张图片,获取有前缀的 500x250 尺寸的缩略图
imgupload({
	source: "album",
	prefix: "avatar/",
	thumb_w: 500,
	thumb_h: 250,
	success: function(img,thumb){
		console.log(img);    // http://www.xxx.com/avatar/hello.jpg
		console.log(thumb);  // http://www.xxx.com/avatar/hello.jpg?imageView2/1/w/500/h/250
	}
});
// 从相册上传多张图片,全部图片上传完毕后统一处理
imgupload({
	source: "album",
	multi: true,
	success: function(img,thumb){
		console.log(img);    // http://www.xxx.com/hello.jpg
		console.log(thumb);  // http://www.xxx.com/hello.jpg?imageView2/1/w/200/h/200
	},
	complete: function(imgs){
		// 全部图片上传完毕,统一处理
	}
});