JSFiddle - React, Tailwind, and code Playground
by Mo Qiao
HTML
<div class="popup-password">
<div class="line"></div>
<div class="password-dialog">
<div class="title center">请输入交易密码</div>
<div class="wrap">
<div class="number center">5000 元</div>
<div class="password">
<input type="tel" id="password" maxlength="6">
<div class="password-view" id="password-view">
<span>
<i class="circle"></i>
</span>
<span>
<i class="circle"></i>
</span>
<span>
<i class="circle"></i>
</span>
<span>
<i class="circle"></i>
</span>
<span>
<i class="circle"></i>
</span>
<span>
<i class="circle"></i>
</span>
</div>
</div>
<div class="bottom-btn ">
<a class="btn iden-code-disable close-popup" id="ppCancel">取消</a>
<a class="btn btn-blue " id="ppEnter">确定</a>
</div>
</div>
</div>
</div>
CSS
html{
font-size: 10px;
font-family: 'Helvetica Neue',Helvetica,"Hiragino Sans GB", "Microsoft YaHei","WenQuanYi Micro Hei", sans-serif;
}
.popup-password {
background-color: rgba(0, 0, 0, 0.7);
width: 375px;
height: 627px;
margin: 0 auto;
position:relative;
}
.popup-password .password-dialog {
background-color: #f0f0f0;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
-webkit-border-radius: 0.5rem;
-moz-border-radius: 0.5rem;
border-radius: 0.5rem;
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
width: 84%;
height: 23rem;
}
.popup-password .password-dialog .title {
height: 5.8rem;
line-height: 5.8rem;
font-size: 2rem;
position: relative;
text-align: center;
}
.popup-password .password-dialog .title:after {
content: '';
display: inline-block;
width: 100%;
border-bottom: 1px solid #e7e7e7;
position: absolute;
left: 0;
bottom: 0;
}
.popup-password .password-dialog .wrap {
padding: 0 3rem;
text-align: center;
}
.popup-password .password-dialog .number {
height: 5.2rem;
line-height: 5.2rem;
font-size: 2rem;
color: #54a6ea;
}
.popup-password .password-dialog .password {
height: 4rem;
line-height: 4rem;
position: relative;
}
.popup-password .password-dialog .password input {
position: absolute;
top: 0;
left: 50%;
margin-left: -100px;
width: 200px;
height: 50px;
z-index: 3;
line-height: 10px;
font-size: 16px;
letter-spacing: 21px;
opacity: 0;
}
.popup-password .password-dialog .password .password-view {
top: 0;
left: 50%;
margin-left: -100px;
position: absolute;
height: 4.2rem;
width: 200px;
font-size: 0;
-webkit-box-shadow: inset 0 0 0 1px #e7e7e7;
-moz-box-shadow: inset 0 0 0 1px #e7e7e7;
box-shadow: inset 0 0 0 1px #e7e7e7;
background-color: #fff;
-webkit-border-radius: 0.6rem;
-moz-border-radius: 0.6rem;
border-radius: 0.6rem;
-webkit-background-clip:...
JavaScript
function popupPassword(cancelCB, enterCB) {
var passwordPar = document.querySelector('.password-dialog');
var password = document.querySelector('#password');
var pas = document.querySelector('.password-view').querySelectorAll('span');
var enter = document.querySelector('#ppEnter');
var cancel = document.querySelector('#ppCancel');
var passwordValue;
/**
* 初始化密码输入框
*/
function init() {
for (var i = pas.length - 1; i >= 0; i--) {
pas[i].className = '';
}
password.value = '';
}
/**
* 输入控制逻辑,同步原点的添加和删除
*/
function passInput() {
passwordPar.onclick = function () {
password.focus();
};
password.oninput = function () {
var length = this.value.length;
for (var i = pas.length - 1; i >= 0; i--) {
pas[i].className = '';
}
for (var j = length - 1; j >= 0; j--) {
pas[j].className = 'active';
}
};
}
/**
* 点击取消按键要执行的动作
*/
function passCancel() {
cancel.onclick = function (e) {
e.stopPropagation();
// doSomeThing when cancel has been click
if (cancelCB) {
cancelCB();
} else {
console.log('cancel');
}
};
}
/**
* 点击确定案件要执行的动作
*/
function passEnter() {
enter.onclick = function (e) {
e.stopPropagation();
passwordValue = password.value;
if (passwordValue.length === 6) {
if (enterCB) {
enterCB.call(enterCB,passwordValue);
} else {
console.log(passwordValue);
init();
}
} else {
alert('密码长度小于六位,请重新输入');
}
};
}
passInput();
passCancel();
passEnter();
}
popupPassword(null, function...