首先呢,还是先看看效果吧!
非可视密码下:
可视密码下:
到此呢,上正菜,为大家奉上。
wxml下:
1 <view class='sameBox'> 2 <icon class='iconfont .icon-mima'></icon> 3 <input bindinput='passWordInput' name="passWord" type="{{typeName}}" placeholder='请输入密码'></input> 4 <view class='seePass' bindtap='showPass'> 5 <icon class="iconfont .icon-yanjing" wx:if="{{passFlag == 1}}"></icon> 6 <icon class='iconfont .icon-bukeshi' wx:else></icon> 7 </view> 8 </view>
wxss下:
1 .sameBox{ 100%;height: 50px;line-height: 50px;overflow: hidden;margin-top: 10px;} 2 .sameBox .iconfont:nth-child(1){float: left;font-size: 1.5rem;color: #4768F3;padding-left: 10px;} 3 .sameBox input{float: right;border-bottom: 1px solid #ccc;height: 97%;font-size: 0.85rem; 85%;color: #ccc;} 4 .sameBox:nth-child(2){position: relative;} 5 .seePass{position: absolute;top: 0;right: 0; 20px;height: 50px;padding-right: 20px;} 6 .seePass .icon-yanjing{font-size: 0.1rem;padding: 0;}
js下:
data: { typeName: 'password', // 密码框的类型,用于显示密码时更改类型可看见输入的密码而非*号 passFlag: 1, // 密码第几次点击代表,用于显示不同的图标 storePass: '', // 暂存密码,用于显示密码 }, showPass(){ // 显示密码而非*号 console.log(this.data.storePass) if (this.data.passFlag == 1){ // 第一次点击 this.setData({ passFlag: 2, typeName : 'text'}); }else{ // 第二次点击 this.setData({ passFlag: 1, typeName : 'password'}); } }, passWordInput(e) { // 监听密码input框并把输入的密码在变量storePass下暂存起来,用于在显示密码操作展示 console.log(e.detail.value) this.setData({ storePass: e.detail.value, passWord: e.detail.value }) },
END:到这里呢,想要的效果就可以实现了,希望对各位有用把,不足之处望海涵。。。
特此记录,虽然通过控制input的type来实现密码是否可见的操作,但也会出现在真机测试上,只有当input获取焦点之后(必须先点击一下input)再点击是否密码可见,才有作用。
这种情况呢,就伴随用户体验很差,我们可以也换个思路来实现,换汤不换药。改用通过wx:if 以及 wx:else 来控制两个input 一个input为text类型,另一个则为password类型即可。