最近需要自己做一个验证密码的密码框,实现效果如下图所示。
该密码框实现的基本思路就是将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>
);
}