返回顶部
首页 > 资讯 > 精选 >uniapp怎么自定义验证码输入框并隐藏光标
  • 917
分享到

uniapp怎么自定义验证码输入框并隐藏光标

2023-07-05 04:07:38 917人浏览 安东尼
摘要

这篇文章主要讲解了“uniapp怎么自定义验证码输入框并隐藏光标”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“uniapp怎么自定义验证码输入框并隐藏光标”吧!一. 前言点击输入框唤起键盘,

这篇文章主要讲解了“uniapp怎么自定义验证码输入框并隐藏光标”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“uniapp怎么自定义验证码输入框并隐藏光标”吧!

一. 前言

  1. 点击输入框唤起键盘,蓝框就相当于input的光标,验证码输入错误或者不符合格式要求会将字体以及边框改成红色提示,持续1s,然后清空数据,恢复原边框样式;

  2. 5位验证码输入完毕,点击页面其他位置,隐藏键盘;这时如果发现验证码有误,再次点击输入框又唤起键盘,也能正常删除数字(这里其实做的时候遇到了bug,再次聚焦不能删除错误数字,下文会讲到)。

二. 实现思路

具体实现思路:

  • 将input标签相对于父元素做绝对定位,与父元素左边距设置为负的本身宽度即可(position: absolute; top: 0; left:-100%; width: 100%; height: 100%;)。

  • 动态去设置input的focus属性。

  • input同级使用for循环去创建5个正方形的view标签。

  • 给input同级创建的view标签绑定点击事件,在点击事件方法实现中去设置input的focus属性为true,即可弹出键盘。

  • 在键盘输入的时候,即可触发input属性的一系列方法,利用v-model双向绑定,将input输入的值赋值给循环的view方框即可。

  • 这样input也就不在屏幕中,但是又可以触发input的事件。

总的来说就是,使用for循环去创建5个正方形的view标签,然后创建一个input标签,type=tel,最大输入长度为5(根据需求来设置),再将input伪隐藏掉,获取的值分别放到5个view中展示。

验证码失败后利用v-model双向绑定,清空输入的值,增加错误提示文字和边框样式。

三. 代码实现

父组件

<uni-popup ref="codeInputPopup" background-color="#fff" :mask-click ="false" type="center">     <CodeInput  :codeLength="5"  :disabled="codeBtnDisabled"  @codeInputClose="codeInputClose"  @submitGoodCode="submitGoodCode" /></uni-popup><script>export default {  data() {    return {     intviation_code:'', //邀请码codeBtnDisabled: false //防止接口请求还未返回数据,用户多次点击    }  },  methods: {    // 提交邀请码async submitGoodCode(intviation_code){this.codeBtnDisabled = truethis.intviation_code = intviation_codeconst response =  await this.$api.post('/ebapi/pink_api/secret_intviation_check', {  code: intviation_code})if(response.code === 200){this.codeBtnDisabled = falsethis.$refs.codeInputPopup.close()}else{this.codeBtnDisabled = falsethis.$refs.codeInputPopup.close()this.$api.msg(response.msg) }},codeInputClose(){  this.$refs.codeInputPopup.close()  this.codeBtnDisabled = false}}</script>

子组件

<template>  <view>    <view class="code-popup-top">      <view class="code-title">请输入商品邀请码</view>      <view class="close-icon" @click="codeInputClose">        <uni-icons type="closeempty" size="30" color="#999999" />      </view>    </view>    <!-- 错误提示 -->    <view class="code_errow" v-if="codeColor == '#ff0000'&& !isNum">邀请码必须{{ codeLength }}位数</view>    <view class="code_errow" v-if="codeColor == '#ff0000'&& isNum ">邀请码必须是数字</view>    <view class="code_input_con">      <view        v-for="(item, index) in codeLength"        :key="index"        class="code_input_item"        :        @click="focus = true"      >{{ intviation_code[index] && intviation_code[index] || '' }}</view>      <input        class="cinput"        type="tel"        v-model="intviation_code"        :maxlength="codeLength"        :focus="focus"        :cursor="intviation_code.length"        @focus="focus = true "        @blur="focus = false"      />    </view>    <button      :class="['submit_code_btn', disabled ? 'btn_disabled' : '']"      :disabled="disabled"      @click="submitGoodCode"    >确定</button>  </view></template><script>export default {  data() {    return {      codeColor: '#313131', //自定义错误码颜色      intviation_code: '', //用户输入的验证码      focus: false, // 动态获取焦点的值      isNum: false,    }  },  props: {    codeLength: {      type: Number,      default: 5,    },    disabled: {      type: Boolean,      default: false,    },  },  methods: {    codeInputClose() {      this.intviation_code = ''      this.$emit('codeInputClose')    },    submitGoodCode() {      if (this.intviation_code.length === this.codeLength) {        if (Number(this.intviation_code)) {          this.$emit('submitGoodCode', this.intviation_code)        } else {          this.isNum = true          this.publicErrorSetting()        }      } else {        this.publicErrorSetting()      }    },    // 输入不符合规范,更改样式并清空    publicErrorSetting() {      this.codeColor = '#ff0000'      setTimeout(() => {        this.intviation_code = ''        this.codeColor = '#313131'        this.isNum = false      }, 1000)    },  },}</script><style lang="sCSS" scoped>.code-popup-top {  display: flex;  justify-content: space-between;  align-items: center;  margin-bottom: 50upx;  .code-title {    font-size: 34upx;    color: #333;    font-weight: bold;    position: relative;    &::before {      content: '';      position: absolute;      bottom: 0;      width: 40upx;      height: 19upx;      background: linear-gradient(        to right,        rgba(57, 181, 74, 1),        rgba(57, 181, 74, 0.1)      );    }  }  .close-icon {    background: #f2f4f7;    border-radius: 50%;    display: flex;    align-items: center;    justify-content: center;  }}.code_errow {  font-size: 30upx;  color: #ff5500;  margin-bottom: 20upx;}.submit_code_btn {  width: 100%;  height: 83upx;  line-height: 83upx;  border-radius: 7upx;  background: #39b54a;  color: #fff;  font-size: 31upx;  text-align: center;  margin-top: 45upx;}.btn_disabled {  color: rgba(255, 255, 255, 0.5) !important;  background-color: rgba(57, 181, 74, 0.4) !important;}.code_input_con {  display: flex;  justify-content: space-around;  position: relative;  .code_input_item {    margin-left: 10upx;    text-align: center;    line-height: 88upx;    border-radius: 14upx;    width: 88upx;    height: 88upx;    font-size: 60upx;    font-weight: bold;    color: #333;    &:last-child {      margin-right: 0;    }  }    .cinput {    position: absolute;    top: 0;    left: -100%;     width: 100%;    height: 100%;  }}</style>

四. 过程中遇到的问题

1)input 的type=&lsquo;number&rsquo;, iOS手机正常,光标在内容最后,但Android手机光标有时候在内容最前面,导致聚焦内容删不掉。

修改input 的type = 'tel':cursor="intviation_code.length", 这样cursor属性才生效,并指定focus时光标的位置在内容最后;
type=&lsquo;tel&rsquo;,也会有个小问题,可以输入一些字符,但是我们的需求只能是数字,所以代码中要做限制。就能解决这个问题了。

这个cursor无效的问题,在h6模式应该是type的原因,我试了在type是number或digit时cursor就无效,text、tel、idcard就有效

2)还有另外一种方法

  • 设置input的type=“number”,就不需要设置光标位置了;然后隐藏input文字和光标,相当于间接隐藏了input框;

  • 用到了css样式设置,color: transparent; caret-color: transparent;

  • 最主要的还是相对于父元素做绝对定位,与父元素左边距设置为负的本身宽度的一半即可(position: absolute; top: 0; left:-100%; width: 200%; height: 100%;)with: 200%为了增大点击区域,解决Android机型再次唤起键盘不能聚焦,删不掉错误数字的问题。

张鑫旭的CSS改变插入光标颜色caret-color简介及其它变色方法
自我测试CSS : caret-color

<template>  <view>      <input        class="cinput"        type="number"        v-model="intviation_code"        :maxlength="codeLength"        :focus="focus"        @focus="focus = true "        @blur="focus = false"      />    </view>  </view></template><script>export default {  data() {    return {      intviation_code: '', //商品邀请码      focus: false,    }  },  methods: {}</script><style lang="scss" scoped>.cinput {    position: absolute;    top: 0;    left: -100%;    width: 200%;    height: 100%;    color: transparent;  //输入文字颜色透明    caret-color: transparent !important; //改变插入光标颜色为透明  }  }  // 考虑兼容性  // 浏览器支持caret-color属性,优先使用caret-color(Chrome/Firefox/Opera);其次使用::first-line方法(Safari);最后忽略(如IE)。  @supports (-WEBkit-mask: none) and (not (caret-color: transparent)) {    .cinput {      color: transparent !important;    }    .cinput::first-line {      color: transparent !important;    }  }</style>

感谢各位的阅读,以上就是“uniapp怎么自定义验证码输入框并隐藏光标”的内容了,经过本文的学习后,相信大家对uniapp怎么自定义验证码输入框并隐藏光标这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: uniapp怎么自定义验证码输入框并隐藏光标

本文链接: https://lsjlt.com/news/349629.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • uniapp自定义验证码输入框并隐藏光标
    目录一. 前言二. 实现思路三. 代码实现四. 过程中遇到的问题一. 前言 先看下使用场景效果图: 点击输入框唤起键盘,蓝框就相当于input的光标,验证码输入错误或者不符合格式要求...
    99+
    2023-02-22
    uniapp验证码输入框 uniapp验证码
  • uniapp怎么自定义验证码输入框并隐藏光标
    这篇文章主要讲解了“uniapp怎么自定义验证码输入框并隐藏光标”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“uniapp怎么自定义验证码输入框并隐藏光标”吧!一. 前言点击输入框唤起键盘,...
    99+
    2023-07-05
  • Android自定义View验证码输入框
    本文实例为大家分享了Android自定义View验证码输入框的具体代码,供大家参考,具体内容如下 验证码输入框 1.先看下样式 2.直接上代码 public class M...
    99+
    2022-06-06
    view 输入 输入框 Android
  • uniapp自定义输入框,实现验证码输入框、密码输入框、兼容微信小程序
    前言 在移动端或者小程序项目中,验证码输入框、密码输入框也是很常见的,今天我们就来实现一个这样的效果。 图片展示 代码实现 我这里是用uniapp实现的可兼容微信小程序。 大家如果需要微信小程序也可以参考此案例,实现思路都是一样的。 {{...
    99+
    2023-08-18
    微信小程序 uni-app 小程序
  • Android自定义验证码输入框的方法实例
    目录实践过程总结实践过程 前面我们学完了EditText和TextView两个组件,但是,光学不练没意思。 所以今天我们趁热打铁,利用两个组件实现个自定义验证码输入框。 思路前瞻:...
    99+
    2024-04-02
  • Android实现自定义验证码输入框效果(实例代码)
    这里提一下,这个当时也是在网上看到一个博主写的代码改了下用在我么项目中的验证码输入框。博主的地址不记得了这里只能顺带标注一下。。。 效果图如下: 就是这个酱紫 直入主题,代码...
    99+
    2022-06-06
    自定义 输入 验证码 输入框 Android
  • Qt实现自定义验证码输入框控件的方法
    目录前言UI布局:页面样式初始化:功能实现:前言 本文实现了自定义的验证码输入框控件。控件包括图标、输入框、获取验证码按钮、验证码获取倒计时标签。支持鼠标点击获取验证码按钮后开始显示...
    99+
    2024-04-02
  • WPF怎么在自定义文本框中实现输入法跟随光标
    这篇文章将为大家详细讲解有关WPF怎么在自定义文本框中实现输入法跟随光标,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本文实现的效果如下实现本文的方法参考了 WPF 官方仓库的逻辑,可以在WPF...
    99+
    2023-06-29
  • WPF在自定义文本框中实现输入法跟随光标
    本文告诉大家在 WPF 写一个自定义的文本框,如何实现让输入法跟随光标 本文非小白向,本文适合想开发自定义的文本框,从底层开始开发的文本库的伙伴。在开始之前,期望了解了文本库开发的基...
    99+
    2024-04-02
  • Angular如何使用输入框实现自定义验证功能
    这篇文章将为大家详细讲解有关Angular如何使用输入框实现自定义验证功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。此插件使用angular.js、JQuery实现。...
    99+
    2024-04-02
  • Android怎么实现自定义密码输入框
    本篇内容主要讲解“Android怎么实现自定义密码输入框”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么实现自定义密码输入框”吧!一、实现效果及方案预期效果图:如上图所示,要实现...
    99+
    2023-06-25
  • vue输入框怎么实现输完后光标自动跳到下一个输入框中
    本篇内容主要讲解“vue输入框怎么实现输完后光标自动跳到下一个输入框中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue输入框怎么实现输完后光标自动跳到下一个输入框中”吧!实现思路首先我们需要...
    99+
    2023-07-05
  • uniapp 手机验证码输入框实现代码(随机数、倒计时、隐藏手机号码中间四位)可以直接使用
    如键盘被隐藏,可直接点击蓝框弹出键盘,蓝框就相当于input的光标,验证码输入错误之后会将字体以及边框改为红色,持续1.5s(可自行修改时间),然后清空数据。 <te...
    99+
    2023-02-22
    uniapp验证码输入框 uniapp输入框 uniapp验证码
  • Android怎么自定义View实现随机数验证码
    本篇内容介绍了“Android怎么自定义View实现随机数验证码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果自定义 View 分类简单...
    99+
    2023-07-02
  • vue怎么自定义密码输入框解决浏览器自动填充密码问题
    这篇文章主要讲解了“vue怎么自定义密码输入框解决浏览器自动填充密码问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么自定义密码输入框解决浏览器自动填充密码问题”吧!问题描述浏览器...
    99+
    2023-07-06
  • Android怎么实现自定义圆角输入框和按钮
    这篇文章主要介绍“Android怎么实现自定义圆角输入框和按钮”,在日常操作中,相信很多人在Android怎么实现自定义圆角输入框和按钮问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android怎么实现自定...
    99+
    2023-06-25
  • 怎么在Android应用中自定义一个数字键盘与密码输入框
    这期内容当中小编将会给大家带来有关怎么在Android应用中自定义一个数字键盘与密码输入框,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。控件实现清单: 1)集成于EditText的输入框控件:P...
    99+
    2023-05-31
    android roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作