廢話就不多說了,直接上官方登陸模闆代碼加注釋
<!DOCTYPE html>
<html class="ui-page-login">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<link href="css/mui.min.css" target="_blank" rel="external nofollow" rel="stylesheet" />
<link href="css/style.css" target="_blank" rel="external nofollow" rel="stylesheet" />
<style>
.area {
margin: 20px auto 0px auto;
}
.mui-input-group {
margin-top: 10px;
}
/*對input元素的第一個節點設定上邊距*/
.mui-input-group:first-child {
margin-top: 20px;
}
.mui-input-group label {
width: 22%;
}
.mui-input-row label~input,
.mui-input-row label~select,
.mui-input-row label~textarea {
width: 78%;
}
.mui-checkbox input[type=checkbox],
.mui-radio input[type=radio] {
top: 6px;
}
.mui-content-padded {
margin-top: 25px;
}
.mui-btn {
padding: 10px;
}
.link-area {
display: block;
margin-top: 25px;
text-align: center;
}
.spliter {
color: #bbb;
padding: 0px 8px;
}
.oauth-area {
position: absolute;
bottom: 20px;
left: 0px;
text-align: center;
width: 100%;
padding: 0px;
margin: 0px;
}
.oauth-area .oauth-btn {
display: inline-block;
width: 50px;
height: 50px;
background-size: 30px 30px;
background-position: center center;
background-repeat: no-repeat;
margin: 0px 20px;
/*-webkit-filter: grayscale(100%); */
border: solid 1px #ddd;
border-radius: 25px;
}
.oauth-area .oauth-btn:active {
border: solid 1px #aaa;
}
.oauth-area .oauth-btn.disabled {
background-color: #ddd;
}
</style>
</head>
<body>
<header class="mui-bar mui-bar-nav">
<h1 class="mui-title">登入</h1>
</header>
<!--之前說過mui的頁面結構一般是mheader+mbody-->
<div class="mui-content">
<form id='login-form' class="mui-input-group">
<div class="mui-input-row">
<label>賬号</label>
<input id='account' type="text" class="mui-input-clear mui-input" placeholder="請輸入賬号">
</div>
<div class="mui-input-row">
<label>密碼</label>
<input id='password' type="password" class="mui-input-clear mui-input" placeholder="請輸入密碼">
</div>
</form>
<form class="mui-input-group">
<ul class="mui-table-view mui-table-view-chevron">
<li class="mui-table-view-cell">
自動登入
<!--開關元件,id用于判斷是否打開自動登陸開關-->
<div id="autoLogin" class="mui-switch">
<div class="mui-switch-handle"></div>
</div>
</li>
</ul>
</form>
<div class="mui-content-padded">
<button id='login' class="mui-btn mui-btn-block mui-btn-primary">登入</button>
<div class="link-area"><a id='reg'>新增賬號</a> <span class="spliter">|</span> <a id='forgetPassword'>忘記密碼</a>
</div>
</div>
<!--快捷登陸方式權鑒,初始時并未設定,但在真機環境下運作是可以看到此處會有3種
快捷登陸的按鈕
-->
<div class="mui-content-padded oauth-area">
</div>
</div>
<script src="js/mui.min.js"></script>
<script src="js/mui.enterfocus.js"></script>
<script src="js/app.js"></script>
<script>
//将mui,document使用$和doc代替
(function($, doc) {
//等價于mui.init()
$.init({
statusBarBackground: '#f7f7f7'
});
//h5+事件的準備,所有的h5+事件必須經過初始化
$.plusReady(function() {
//禁止螢幕翻轉選項
plus.screen.lockOrientation("portrait-primary");
//H5+事件擷取設定和狀态
var settings = app.getSettings();
var state = app.getState();
//定義首頁視圖
var mainPage = plus.webview.getWebviewById("main");
//定義加載完畢标記,并初始化為未完成首頁加載
var main_loaded_flag = false;
if(!mainPage){
//若首頁未加載,則進行mui.perload() 預加載,設定id和路徑,此處id與前四行的id對應
mainPage = $.preload({
"id": 'main',
"url": 'main.html'
});
}else{
main_loaded_flag = true;
}
//添加監聽事件,事件類型為加載
mainPage.addEventListener("loaded",function () {
main_loaded_flag = true;
});
//跳轉首頁面函數
var toMain = function() {
//使用定時器的原因:
//可能執行太快,main頁面loaded事件尚未觸發就執行自定義事件,此時必然會失敗
var id = setInterval(function () {
if(main_loaded_flag){
//setInterval() 方法會不停地調用函數,直到 clearInterval() 被調用或視窗被關閉。
//由 setInterval() 傳回的 ID 值可用作 clearInterval() 方法的參數。
clearInterval(id);
/*
* mui的fire函數觸發目标視窗的自定義事件
* 此處目标視窗為主視窗,方法為show方法,不攜帶參數清單
*/
$.fire(mainPage, 'show', null);
mainPage.show("pop-in");
}
},20);//事件間隔為20ms
};
//檢查 "登入狀态/鎖屏狀态" 開始
if (settings.autoLogin && state.token && settings.gestures) {
//設定了手勢解鎖
$.openWindow({
url: 'unlock.html',
id: 'unlock',
show: {
aniShow: 'pop-in'
},
waiting: {
autoShow: false
}
});
} else if (settings.autoLogin && state.token) {
//未設定手勢解鎖直接跳轉至首頁main
toMain();
} else {
app.setState(null);
//第三方登入
var authBtns = ['qihoo', 'weixin', 'sinaweibo', 'qq']; //配置業務支援的第三方登入
var auths = {};
var oauthArea = doc.querySelector('.oauth-area');
plus.oauth.getServices(function(services) {
for (var i in services) {
var service = services[i];
auths[service.id] = service;
if (~authBtns.indexOf(service.id)) {
var isInstalled = app.isInstalled(service.id);
var btn = document.createElement('div');
//如果微信未安裝,則為不啟用狀态
btn.setAttribute('class', 'oauth-btn' + (!isInstalled && service.id === 'weixin' ? (' disabled') : ''));
btn.authId = service.id;
btn.style.backgroundImage = 'url("images/' + service.id + '.png")'
oauthArea.appendChild(btn);
}
}
$(oauthArea).on('tap', '.oauth-btn', function() {
if (this.classList.contains('disabled')) {
plus.nativeUI.toast('您尚未安裝微信用戶端');
return;
}
var auth = auths[this.authId];
var waiting = plus.nativeUI.showWaiting();
auth.login(function() {
waiting.close();
plus.nativeUI.toast("登入認證成功");
auth.getUserInfo(function() {
plus.nativeUI.toast("擷取使用者資訊成功");
var name = auth.userInfo.nickname || auth.userInfo.name;
app.createState(name, function() {
toMain();
});
}, function(e) {
plus.nativeUI.toast("擷取使用者資訊失敗:" + e.message);
});
}, function(e) {
waiting.close();
plus.nativeUI.toast("登入認證失敗:" + e.message);
});
});
}, function(e) {
oauthArea.style.display = 'none';
plus.nativeUI.toast("擷取登入認證失敗:" + e.message);
});
}
// close splash
setTimeout(function() {
//關閉 splash
plus.navigator.closeSplashscreen();
}, 600);
//檢查 "登入狀态/鎖屏狀态" 結束
var loginButton = doc.getElementById('login');
var accountBox = doc.getElementById('account');
var passwordBox = doc.getElementById('password');
var autoLoginButton = doc.getElementById("autoLogin");
var regButton = doc.getElementById('reg');
var forgetButton = doc.getElementById('forgetPassword');
//點選登陸事件後觸發
loginButton.addEventListener('tap', function(event) {
var loginInfo = {
account: accountBox.value,
password: passwordBox.value
};
app.login(loginInfo, function(err) {
if (err) {
plus.nativeUI.toast(err);
return;
}
toMain();
});
});
//擷取焦點
$.enterfocus('#login-form input', function() {
$.trigger(loginButton, 'tap');
});
autoLoginButton.classList[settings.autoLogin ? 'add' : 'remove']('mui-active')
autoLoginButton.addEventListener('toggle', function(event) {
setTimeout(function() {
var isActive = event.detail.isActive;
settings.autoLogin = isActive;
app.setSettings(settings);
}, 50);
}, false);
regButton.addEventListener('tap', function(event) {
$.openWindow({
url: 'reg.html',
id: 'reg',
preload: true,
show: {
aniShow: 'pop-in'
},
styles: {
popGesture: 'hide'
},
waiting: {
autoShow: false
}
});
}, false);
forgetButton.addEventListener('tap', function(event) {
$.openWindow({
url: 'forget_password.html',
id: 'forget_password',
preload: true,
show: {
aniShow: 'pop-in'
},
styles: {
popGesture: 'hide'
},
waiting: {
autoShow: false
}
});
}, false);
//
window.addEventListener('resize', function() {
oauthArea.style.display = document.body.clientHeight > 400 ? 'block' : 'none';
}, false);
//
var backButtonPress = 0;
$.back = function(event) {
backButtonPress++;
if (backButtonPress > 1) {
plus.runtime.quit();
} else {
plus.nativeUI.toast('再按一次退出應用');
}
setTimeout(function() {
backButtonPress = 0;
}, 1000);
return false;
};
});
}(mui, document));
</script>
</body>
</html>