tw-login
v1.0.25
Published
anjuke login TW
Readme
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-login1.2 引入
node_modules/tw-login/login.js1.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: "请先登录"}),且不会出现绑定手机表单
