五、适合小白的小程序之密码框密码、*号显示隐藏

首先呢,还是先看看效果吧!

非可视密码下:

可视密码下:

到此呢,上正菜,为大家奉上。

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类型即可。

原文地址:https://www.cnblogs.com/xintao/p/11213365.html