vue3获取验证码+背景切换

需要安装element-plus组件库

用户获取验证码后按钮会被禁用,等待10秒后重新获取验证码

验证码

元素布局template部分

javascript 复制代码
<template>
    <div>
        <el-button type="success" round :disabled="isSend" @click="countDown">
            {{ codeName }}
        </el-button>
    </div>
</template>

script功能部分

javascript 复制代码
<script setup>
import { ref, reactive, watch } from 'vue';
import { ElMessage } from 'element-plus'

const isSend = ref(false); // 禁用
const codeName = ref("发送验证码");
const totalTime = 10; // 10秒倒计时
let timer = null; // 定时器
const code = ref() // 验证码存放处
const col = ref("") // 背景颜色rgb()

const countDown = () => {
    if (isSend.value) return;
    isSend.value = true;
    codeName.value = `${totalTime}s后重新发送`;

    // 生成随机验证码
    const len = 6;
    const codeList = [];
    const chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789";
    const charsLen = chars.length;
    for (let i = 0; i < len; i++) {
        codeList.push(chars.charAt(Math.floor(Math.random() * charsLen)));
    }
    code.value = codeList.join("")
    console.log(codeList.join(""));

    ElMessage({
        message: '验证码提示---' + code.value,
        type: 'success',
    })
    
    // 倒计时
    let currentTime = totalTime;
    timer = setInterval(() => {
        currentTime--;
        codeName.value = `${currentTime}s后重新发送`;
        if (currentTime < 1) {
            clearInterval(timer);
            codeName.value = "重新发送验证码";
            isSend.value = false;
        }
    }, 1000);
};
</script>
  

样式这里没有

随机背景颜色

template部分

javascript 复制代码
<template>
    <div>
        <div class="box">
            <h2>随机切换背景</h2>
        </div>
    </div>
</template>

script部分

javascript 复制代码
<script setup>
// 生成一个随机的颜色
const randomColor = () => {
    const r = Math.floor(Math.random() * (255 - 0) + 0);
    const g = Math.floor(Math.random() * (255 - 0) + 0);
    const b = Math.floor(Math.random() * (255 - 0) + 0);
    return "rgb(" + r + "," + g + "," + b + ")"
}

const changecolor = () => {
    const box = document.querySelector('.box')
    const color = randomColor()
    box.style.backgroundColor = color
}
</script>

style部分

javascript 复制代码
<style scoped>
.box {
    height: 100px;
    width: 200px;
    background-color: bisque;
    text-align: center;
    line-height: 100px;
}
</style>

完整代码:希望能帮助到你

javascript 复制代码
<template>
    <div>
        <el-button type="success" round :disabled="isSend" @click="countDown">
            {{ codeName }}
        </el-button>
        <div class="box">
            <h2>随机切换背景</h2>
        </div>
    </div>
</template>
  
<script setup>
import { ref, reactive, watch } from 'vue';
import { ElMessage } from 'element-plus'

const isSend = ref(false); // 禁用
const codeName = ref("发送验证码");
const totalTime = 10; // 10秒倒计时
let timer = null; // 定时器
const code = ref() // 验证码存放处
const col = ref("") // 背景颜色rgb()

const countDown = () => {
    if (isSend.value) return;
    isSend.value = true;
    codeName.value = `${totalTime}s后重新发送`;

    // 生成随机验证码
    const len = 6;
    const codeList = [];
    const chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789";
    const charsLen = chars.length;
    for (let i = 0; i < len; i++) {
        codeList.push(chars.charAt(Math.floor(Math.random() * charsLen)));
    }
    code.value = codeList.join("")
    console.log(codeList.join(""));

    ElMessage({
        message: '验证码提示---' + code.value,
        type: 'success',
    })

    ElMessage({
        message: '背景颜色提示---' + randomColor(),
        type: 'success',
    })

    changecolor()
    // 倒计时
    let currentTime = totalTime;
    timer = setInterval(() => {
        currentTime--;
        codeName.value = `${currentTime}s后重新发送`;
        if (currentTime < 1) {
            clearInterval(timer);
            codeName.value = "重新发送验证码";
            isSend.value = false;
        }
    }, 1000);
};

// 生成一个随机的颜色
const randomColor = () => {
    const r = Math.floor(Math.random() * (255 - 0) + 0);
    const g = Math.floor(Math.random() * (255 - 0) + 0);
    const b = Math.floor(Math.random() * (255 - 0) + 0);
    return "rgb(" + r + "," + g + "," + b + ")"
}

const changecolor = () => {
    const box = document.querySelector('.box')
    const color = randomColor()
    box.style.backgroundColor = color
}

</script>
  
<style scoped>
.box {
    height: 100px;
    width: 200px;
    background-color: bisque;
    text-align: center;
    line-height: 100px;
}
</style>
  

效果展示:

练习验证码实现

相关推荐
雁鸣零落3 分钟前
如何在 Chrome 中查看其他浏览器的书签?书签空间订阅与侧边栏只读切换指南
前端·chrome·edge浏览器
hpoenixf34 分钟前
一天上线 + 零返工:我如何给复杂前端需求建立“安全感”
前端
广州华水科技1 小时前
单北斗GNSS变形监测系统在水利工程安全保障中的应用与优势分析
前端
yqcoder1 小时前
CSS 外边距重叠(Margin Collapsing):现象、原理与完美解决方案
前端·css
山楂树の2 小时前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
本山德彪2 小时前
我做了一个拼豆图纸生成器,把照片秒变图纸
前端
DTrader3 小时前
用TS无法实盘量化? - 实盘均线策略
前端·api
进击的夸父3 小时前
vfojs:Vue 超集架构,外壳React灵魂Vue
前端
编程老船长3 小时前
解决不同项目需要不同 Node.js 版本的问题
前端·vue.js
Wect3 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·算法·typescript