IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue3发送验证码-防止页面刷新-发送验证码状态改变 -> 正文阅读

[JavaScript知识库]Vue3发送验证码-防止页面刷新-发送验证码状态改变

效果:

在这里插入图片描述

1.页面DOM

<div v-show="state.sendAuthCode" @click="getCode">发送验证码</div>
<div v-show="!state.sendAuthCode" ><span class="auth_text_blue">{{state.second}} </span>s</div>

2. 业务逻辑代码(直接复制 , 直接复制 , 直接复制 即可)

/*定义 data 数据*/
const state = reactive({
  sendAuthCode: true,/* 布尔值,通过v-show控制显示‘获取按钮’还是‘倒计时’ */
  second: 60, /* 一分钟 倒计时*/
  timer: null  /* 倒计时 计数器,防止点击的时候触发多个setInterval*/
})
/*-----------------------------------验证码----------------------------*/
/**
 * 发送验证码 === `点击按钮操作,点击按钮操作,点击按钮操作`
 * */
const getCode = () => {
  if (state.sendAuthCode) {
    state.sendAuthCode = false;
    let interval = window.setInterval(function () {
      setStorage(state.second);
      if (state.second-- <= 0) {
        /* 如果 倒计时完毕 重新赋值*/
        state.second = 60;
        state.sendAuthCode = true;
        window.clearInterval(interval);
      }
    }, 1000);
  }
}
/**
 * 存储 验证码 防止刷新
 * `用处`: 防止页面刷新 发送验证码状态改变
 * */
const setStorage = (parm) => {
  localStorage.setItem("dalay", parm);
  localStorage.setItem("_time", new Date().getTime());
};
/**
 * 获取 缓存 数据
 * `用处`: 防止页面刷新 发送验证码状态改变
 * */
const getStorage = () => {
  let localDelay = {};
  localDelay.delay = localStorage.getItem("dalay");
  localDelay.sec = localStorage.getItem("_time");
  return localDelay;
}
/**
 *  判断
 *  */
const judgeCode = () => {
  // 获取缓存中的数据
  let localDelay = getStorage();
  let secTime = parseInt(
    (new Date().getTime() - localDelay.sec) / 1000
  );
  if (secTime > localDelay.delay) {
    state.sendAuthCode = true;
  } else {
    state.sendAuthCode = false;
    let _delay = localDelay.delay - secTime;
    state.second = _delay;
    state.timer = setInterval(() => {
      if (_delay > 1) {
        _delay--;
        setStorage(_delay);
        state.second = _delay;
        state.sendAuthCode = false;
      } else {
        // 让浏览器打开的时候,显示剩余的时间
        state.sendAuthCode = true;
        window.clearInterval(state.timer);
      }
    }, 1000);
  }
}

/**
 * 页面执行
 */
judgeCode()
/*-----------------------------------验证码----------------------------*/
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:53:25  更:2022-03-06 12:57:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:15:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码