anjuke
移动端登录/绑定手机组件
功能:
- 设置成功/失败后的回调函数,事件参数为包含
user_id
等用户信息的对象- 同一页面可以引用多次本组件,
iframe
与实例对象一一对应即可- 通过
iframe
的src
中的查询参数对表单进行配置
,如:设置倒计时时长、提交按钮文案等
0. 登录功能/绑定手机功能的地址
登录
的 页面的iframe
的src
:http://login.anjuke.com/member/login/iframeform
绑定手机
页面的iframe
的src
:http://login.anjuke.com/member/bindphone/iframeform
1. 如何使用
- 1.1 安装包:
$ npm install tw-login
-
1.2 引入
node_modules/tw-login/login.js
-
1.3 创建对象(以下为例子):
<script>
var inited = false;
// 绑定事件:点击按钮打开登录弹层
$("#openBtn").on("click", function(e) {
// 尚未初始化实例对象
if (!inited) {
// 以异步加载为例(同步加载即直接将iframe写在html中):
var ifm = $('<iframe id="loginIfm" src="http://login.anjuke.com/member/login/iframeform" frameborder="0" scrolling="no" style="height: 140px;"></iframe>');
// 设置登陆成功之后显示的样式(默认无任何提示)
var successHtmlStr = '<p style="text-align: center;font-size: 24px;color: #333;line-height: 140px;margin:0;">登陆成功!</p>';
// 注意先将ifm插入页面相应节点中
$("#ifmWrapNode").append(ifm);
// 初始化实例
window.loginObj = new LoginClass({
ifm: "loginIfm" // 可以为iframe的[id、DOM对象或者Zepto类型的对象]。一定要唯一标识iframe,不可以为class等其他选择器
});
// 注册登录成功后的回调【可选】
loginObj.onSuccess = function(data) {
window.console && console.log(">> 登录成功,得到的登录信息:", data);
}
// 每次登录失败后调用【可选】
loginObj.onError = function(data) {
window.console && console.log(">> 登录失败:", data); // data.phone【手机号】,data.code【错误码】
}
// ifm onload之后才能调用实例的方法(如showError、hideError()等)
ifm.on("load", function(e) {
// 设置登录成功之后的提示【可选】
loginObj.setSuccessHtml(successHtmlStr);
// 获取当前登录状态( true/false)【可选】
loginObj.getLoginStatus(function(result) {
window.console && console.log("当前已登录?", result);
});
});
inited = true;
} // -- 对象初始化已完成
// 显示登录弹层(略)
...
});
</script>
2. 配置项
配置参数由
iframe
的src
传入(同步输出,以免页面闪动)
=
后面的内容需要经过encodeURIComponent
字段 | 说明 | 默认值(即不传此字段) |
---|---|---|
phone_holder | 手机号输入框的placeholder | 请输入您的手机号码 |
sms_holder | 短信验证码输入框的placeholder | 请输入短信验证码 |
captcha_holder | 图片验证码输入框的placeholder | 请输入图片验证码 |
sms_btn_html | 发短信按钮的文案 | 获取验证码 |
countdown_time | 倒计时时长 | 60 |
submit_btn_html | 提交按钮的文案 | 确定 |
captcha_length | 图片验证码的位数 | 4 |
sms_length | 短信验证码的位数 | 4 |
prevent_scroll | 是否阻止iframe内部滚动 | 1 |
3. 实例的方法
调用
实例的方法
可以控制iframe
内部的行为(在onload
后执行有效)
var loginObj = new window.LoginClass({
ifm: "ifmId"
});
方法名 | 方法解释 |
---|---|
loginObj.showError(msg) | 在iframe 内部提示错误,msg 为错误信息字符串,调用完成后iframe 节点的高度会自动调整 |
loginObj.hideError() | 隐藏掉iframe 内部的错误提示,调用完成后iframe 节点的高度会自动调整 |
loginObj.setSuccessHtml(nodeString) | 设置登陆成功后的提示.@nodeString 为包含节点及內联样式的字符串,默认登陆成功后显示空白页面 |
loginObj.reset(boolean) | 重置登录表单,@boolean 传true 的话将倒计时也重置,默认false |
loginObj.setPhone(phoneNumber:string) | 填入手机号 |
loginObj.blur() | 让iframe内的所有input元素失去焦点(有些浏览器在iframe隐藏后仍会保持键盘弹出) |
4. 实例的回调函数
实例的回调函数用来定义登录成功或失败后的钩子
回调名称 | 解释 |
---|---|
onSuccess(data) | 登录成功之后执行,@data: { user_id: "xxx", phone: "13xxxx", ...} |
onError(data) | 每次登录失败之后都会调用, @data: {phone: "输入的手机号", code: "错误码"} |
onafterFocus(inputId) | input节点获得焦点时触发,参数@inputId为内部获得焦点的input节点的id |
onafterBlur() | iframe内部输入框失去焦点时触发 |
5. 自定义样式
通过在
iframe
的src
中传入'style=xxx'(xxx需要经过url编码)
的方式来自定义表单的样式,例如:
<iframe src="http://login.anjuke.test/touch/login/iframeform?style=.slide-item-btn%20%7Bcolor%3A%20%23ff552e%3B%20background%3A%20%23ffeeea%3B%20border%3A%201px%20solid%20%23ffddd5%3B%20%7D%20.submit-btn%20%7Bcolor%3A%20%23fff%3B%20background%3A%20%23ff552e%3B%20%7D"></iframe>
上述自定义样式后的
iframe
的表单的样式为:
6. 注意事项
iframe
必须要设置有id
属性(是为了保证多次引用时不重复)iframe
节点的高度默认为140px
,请在业务css
中将其高度设置好(140px
),当在调用showError
、hideError
等方法时iframe
会自动调整高度iframe``append
到页面上5分钟后内部token
会过期(登录时报token
过期的错误),例子【1.3】
中采取的动态生成iframe
的方式可避免此种报错,但是点击时会有一定的加载时间,导致页面出现短暂的空白,若想避免此空白可自行在业务中定时刷新iframe
的src
或者用iframe
的onload
事件加个loading
- 已登录用户访问登录页:直接调用
loginObj.onSuccess(userInfoObj)
,且不会出现登录表单
- 未登录用户访问绑定页:直接调用
loginObj.onError({phone: "输入的手机号", code: -1, msg: "请先登录"})
,且不会出现绑定手机表单