微信小程序中自定义密码框中关于聚焦键盘吊起的问题

398 阅读1分钟

最近需要自己做一个验证密码的密码框,实现效果如下图所示。

该密码框实现的基本思路就是将Input隐藏起来,然后根据Input输入中value的长度,展示出相应数量的 * 。(这里提供简易的Taro,React的代码)

const PasswordCom = () => {
  const [pwd, setPwd] = useState('')
  const len = pwd.length
  const arr = [0,1,2,3,4,5]
  return (
    <View>
        <Input 
          maxLength={6}
          type='number'
          onInput={e => setPwd(e.detail.value)}
          style={{ visibility: "hidden",width: 0,height: 0}}
        />
        <View>
          {arr.map(item => {
            return <View className='自己的样式'>{item < len ? '*' : ''}</View>
          })}
        </View>
    </View>
  );
}

现在我们再来看看键盘的吊起问题,我可以给Input的fcous设置true,这样我们在进入页面的时候就会自动聚焦被隐藏的Input,然后我们再给显示 * 的那一部分添加一个点击事件,当点击这一部分的时候,focus的值变为true。然而,这样写好我们会发现当Input失焦后键盘仍然无法正确的吊起。原因是Input失去焦点后focus的值一直是true,没有发生任何变化,这里我们还需要对Input的失焦做处理,在Input失焦的时候将焦点变为false,这样点击 * 区域键盘即可正常吊起。

const PasswordCom = () => {
  const [pwd, setPwd] = useState('')
  const [isFocus, setIsFocus] = useState(true)
  const len = pwd.length
  const arr = [0,1,2,3,4,5]
  return (
    <View>
        <Input 
          maxLength={6}
          type='number'
          onInput={e => setPwd(e.detail.value)}
          style={{ visibility: "hidden",width: 0,height: 0}}
          focus={isFocus}
          onBlur={() => setIsFocus(false)}
        />
        <View onClick={() => setIsFocus(true)}>
          {arr.map(item => {
            return <View className='自己的样式'>{item < len ? '*' : ''}</View>
          })}
        </View>
    </View>
  );
}