文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue怎么实现分割验证码效果

2023-06-29 14:35

关注

本篇内容主要讲解“vue怎么实现分割验证码效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现分割验证码效果”吧!

注:该代码存在问题,因为我maxlength =4 ,input 的宽度跟屏幕同宽,所以当我input 里面的length == 4 的时候,我的光标会超出屏幕,所以我在length == 4 的时候做了一个把光标放到第三个的处理,这种虽用户体验不好,也解了length==4的时候整个布局乱了的燃眉之急

上UI 图

vue怎么实现分割验证码效果

上代码:

vue

<template>  <div>    <v-main class="bgi">      <v-container class="verify">        <v-icon @click="verifyShow = false" color="#000">mdi-close</v-icon>        <div>          <p class="verifyTitle">输入验证码</p>          <p class="verifyTitle1" v-show="verifyStatus == 1">            验证码已发送至 <span> {{ "+" + area + phone }}</span>          </p>          <p class="verifyTitle2" v-show="verifyStatus == 3">            验证码不正确,请重新输入          </p>          <div class="verifyInputBox">            <div class="verifyInputBg verifyInputBg1"></div>            <div class="verifyInputBg verifyInputBg2"></div>            <div class="verifyInputBg verifyInputBg3"></div>            <div class="verifyInputBg verifyInputBg4"></div>            <input              ref="verifyInput"              type="text"              class="verifyInput"              maxlength="4"              v-model="verifyInput"            />          </div>          <v-btn            :disabled="restTimeShow"            outlined            tile            class="nextBtn"            @click="verifyConfirm"          >            确定          </v-btn>          <p class="restTime" v-show="restTimeShow">            重新获取(<span>{{ restTime }}</span            >s)          </p>        </div>      </v-container>    </v-main>  </div></template>

css

<style lang="scss" scoped>.bgi {  width: 100vw;  height: 100vh;  background: url("~@/assets/imgs/banner.png");  background-size: 100% 100%;  background-repeat: no-repeat;  p {    margin-bottom: 0;  }  .verify {    width: 100%;    height: 100%;    position: relative;    color: #000;    background: #fff;    .verifyTitle {      margin-left: 2rem;      margin-top: 3rem;      font-size: 1.4rem;    }    .verifyTitle1 {      margin-left: 2rem;      margin-top: 0.6rem;      font-size: 0.8125rem;      span {        color: #bfbfbf;      }    }    .verifyTitle2 {      margin-left: 2rem;      margin-top: 0.6rem;      font-size: 0.8125rem;      color: #f53f3f;    }    input::-webkit-input-placeholder {      color: #000;    }    .verifyInputBox {      width: 20rem;      margin: 3rem auto 0;      position: relative;      height: 4rem;      z-index: 1;      .verifyInputBg {        position: absolute;        z-index: 2;        height: 4rem;        width: 4rem;        border-radius: 0.2rem;        background: rgba($color: #000, $alpha: 0.1);      }      .verifyInputBg2 {        left: 5.33rem;      }      .verifyInputBg3 {        left: 10.66rem;      }      .verifyInputBg4 {        left: 16rem;      }      .verifyInput {        height: 4rem;        line-height: 4rem;        width: 100%;        letter-spacing: 4.53rem;        padding-left: 1.5rem;        font-size: 1.4rem;        font-weight: 700;        position: absolute;        z-index: 3;      }    }    .restTime {      margin-top: 1rem;      color: #bfbfbf;      font-size: 0.8125rem;      text-align: center;    }  }  .nextBtn {    margin-top: 2rem;    margin-left: 2rem;    width: calc(100% - 4rem);    height: 3rem !important;    background: #ff962b;    border-radius: 0.3125rem;    font-size: 1rem;    color: #ffffff !important;    border: none;  }  .nextBtn:disabled {    background: #d2d2d2;    color: #ffffff !important;  }}</style>

script

<script>export default {  name: "Login",  data() {    return {      area: "86",      phone: "",      verifyInput: "",      verifyStatus: "1", // 1  -- 验证码发送至  ||  2 --正在验证验证码  || 3 -- 验证码错误      restTimer: null,      restTime: 60,      restTimeShow: false,    };  },  watch: {    verifyInput(newVal) {      if (newVal.length == 4) {        this.$nextTick(() => {          let verifyInput = this.$refs.verifyInput;          verifyInput.setSelectionRange(3,3);        });        this.verifyConfirm();      }    },  },  methods: {    verifyConfirm() {      this.restTimeShow = true;      this.verifyStatus = 2;      this.restTimeFun();    },    restTimeFun() {      if (!this.restTimer) {        this.restTime = 60;        this.restTimer = setInterval(() => {          if (this.restTime > 0) {            this.restTime--;          } else {            this.restTimeShow = false;            clearInterval(this.restTimer);            this.restTimer = null;          }        }, 1000);      }    },  },};</script>

效果图:

vue怎么实现分割验证码效果

vue怎么实现分割验证码效果

到此,相信大家对“vue怎么实现分割验证码效果”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯