js制作随机四位数验证码图片
<div class="lable lable2"><div class="l"><span>*</span>验证码</div><div class="r"><input type="number" name="vercode" placeholder="请输入验证码"></div><div class="verCode_div" style="margin-left: 5px;"><canvas id="digitCanvas" width="120" height="40"></canvas></div><a href="javascript:;" class="chang_verCode_img" id="de_chang_verCodeImg"style="font-size: 12px;">换一张</a>
</div>
通过canvas绘制,并在图片中设置随机圆点、横线;
var imgcode;
getimgcode();
function generateRandomNumber() {imgcode = Math.floor(1000 + Math.random() * 9000);}function getimgcode() {const canvas = document.getElementById('digitCanvas');const ctx = canvas.getContext('2d');ctx.clearRect(0, 0, canvas.width, canvas.height);let numToShow = imgcode; // 要显示的数字const fontSize = 30;const animationDuration = 100; // 动画持续时间(ms)const dotCount = 20; // 点的数量const lineCount = 2; // 线的数量// 设置字体样式ctx.font = `bold ${fontSize}px Arial`;// 获取数字的边界框,以便居中显示const numWidth = ctx.measureText(numToShow).width;const centerX = canvas.width / 2;const centerY = canvas.height / 2;// 渐显动画function fadeinText(text, x, y, duration) {return new Promise(resolve => {// 在开始绘制之前清空画布ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.fillStyle = 'black'; // 设置文本颜色为黑色let startOpacity = 0;const step = 1 / (duration / 16.67); // 基于每帧约16.67ms计算步长function animate(currentTime) {if (startOpacity >= 1) {resolve();return;}ctx.globalAlpha = startOpacity;ctx.fillText(text, x, y);startOpacity += step;requestAnimationFrame(animate);}requestAnimationFrame(animate);});}// 绘制随机点function drawRandomDots(count) {for (let i = 0; i < count; i++) {const x = Math.random() * canvas.width;const y = Math.random() * canvas.height;const radius = Math.random() * 3 + 1;ctx.fillStyle = `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})`;ctx.beginPath();ctx.arc(x, y, radius, 0, Math.PI * 2);ctx.fill();}}// 绘制随机线条function drawRandomLines(count) {for (let i = 0; i < count; i++) {ctx.beginPath();ctx.moveTo(Math.random() * canvas.width, Math.random() * canvas.height);ctx.lineTo(Math.random() * canvas.width, Math.random() * canvas.height);ctx.strokeStyle = `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})`;ctx.lineWidth = Math.random() * 3 + 1;ctx.stroke();}}// 主程序async function startAnimation() {await fadeinText(numToShow, centerX - numWidth / 2, centerY + fontSize / 2, animationDuration);drawRandomDots(dotCount);drawRandomLines(lineCount);}// 启动动画startAnimation();}
手动获取随机数,可以在输入时自己进行校验;
相关文章:
js制作随机四位数验证码图片
<div class"lable lable2"><div class"l"><span>*</span>验证码</div><div class"r"><input type"number" name"vercode" placeholder"请输入验证码"></div>&l…...
[开源软件] 支持链接汇总
“Common rules: 1- If the repo is on github, the support/bug link is also on the github with issues”" label; 2- Could ask questions by email list;" 3rd party software support link Note gcc https://gcc.gnu.org openssh https://bugzilla.mindrot.o…...
从零开始搭建spring boot多模块项目
一、搭建父级模块 1、打开idea,选择file–new–project 2、选择Spring Initializr,选择相关java版本,点击“Next” 3、填写父级模块信息 选择/填写group、artifact、type、language、packaging(后面需要修改)、java version(后面需要修改成和第2步中版本一致)。点击“…...
Iot解决方案开发的体系结构模式和技术
前言 Foreword 计算机技术起源于20世纪40年代,最初专注于数学问题的基本原理;到了60年代和70年代,它以符号系统为中心,该领域首先开始面临复杂性问题;到80年代,随着个人计算的兴起和人机交互的问题&#x…...
02.C1W1.Sentiment Analysis with Logistic Regression
目录 Supervised ML and Sentiment AnalysisSupervised ML (training)Sentiment analysis Vocabulary and Feature ExtractionVocabularyFeature extractionSparse representations and some of their issues Negative and Positive FrequenciesFeature extraction with freque…...
Stable Diffusion秋叶AnimateDiff与TemporalKit插件冲突解决
文章目录 Stable Diffusion秋叶AnimateDiff与TemporalKit插件冲突解决描述错误描述:找不到模块imageio.v3解决:参考地址 其他文章推荐:专栏 : 人工智能基础知识点专栏:大语言模型LLM Stable Diffusion秋叶AnimateDiff与…...
PCL 渐进形态过滤器实现地面分割
点云地面分割 一、代码实现二、结果示例🙋 概述 渐进形态过滤器:采用先腐蚀后膨胀的运算过程,可以有效滤除场景中的建筑物、植被、车辆、行人以及交通附属设施,保留道路路面及路缘石点云。 一、代码实现 #include <iostream> #include <pcl/io/pcd_io.h> #in…...
第十四届蓝桥杯省赛C++B组E题【接龙数列】题解(AC)
需求分析 题目要求最少删掉多少个数后,使得数列变为接龙数列。 相当于题目要求求出数组中的最长接龙子序列。 题目分析 对于一个数能不能放到接龙数列中,只关系到这个数的第一位和最后一位,所以我们可以先对数组进行预处理,将…...
Ubuntu 20.04.4 LTS 离线安装docker 与docker-compose
Ubuntu 20.04.4 LTS 离线安装docker 与docker-compose 要在Ubuntu 20.04.4 LTS上离线安装Docker和Docker Compose,你需要首先从有网络的环境下载Docker和Docker Compose的安装包,然后将它们传输到离线的服务器上进行安装。 在有网络的环境中:…...
vue3+ts 写echarts 中国地图
需要引入二次封装的echarts和在ts文件写的option <template><div class"contentPage"><myEcharts :options"chartOptions" class"myEcharts" id"myEchartsMapId" ref"mapEcharts" /></di…...
【设计模式】【行为型模式】【责任链模式】
系列文章目录 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录…...
超越所有SOTA达11%!媲美全监督方法 | UC伯克利开源UnSAM
文章链接:https://arxiv.org/pdf/2406.20081 github链接:https://github.com/frank-xwang/UnSAM SAM 代表了计算机视觉领域,特别是图像分割领域的重大进步。对于需要详细分析和理解复杂视觉场景(如自动驾驶、医学成像和环境监控)的应用特别有…...
享元模式(设计模式)
享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享细粒度对象来减少内存使用,从而提高性能。在享元模式中,多个对象可以共享相同的状态以减少内存消耗,特别适合用于大量相似对象的场景。 享元模…...
【机器学习】大模型训练的深入探讨——Fine-tuning技术阐述与Dify平台介绍
目录 引言 Fine-tuning技术的原理阐 预训练模型 迁移学习 模型初始化 模型微调 超参数调整 任务设计 数学模型公式 Dify平台介绍 Dify部署 创建AI 接入大模型api 选择知识库 个人主页链接:东洛的克莱斯韦克-CSDN博客 引言 Fine-tuning技术允许用户根…...
【Linux从入门到放弃】探究进程如何退出以进程等待的前因后果
🧑💻作者: 情话0.0 📝专栏:《Linux从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! 进…...
QT5 static_cast实现显示类型转换
QT5 static_cast实现显示类型转换,解决信号重载情况...
【ES】--Elasticsearch的翻页详解
目录 一、前言二、from+size浅分页1、from+size导致深度分页问题三、scroll深分页1、scroll原理2、scroll可以返回总计数量四、search_after深分页1、search_after避免深度分页问题一、前言 ES的分页常见的主要有三种方式:from+size浅分页、scroll深分页、search_after分页。…...
3.js - 纹理的重复、偏移、修改中心点、旋转
你瞅啥 上字母 // ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js // 导入twee…...
RS232隔离器的使用
RS232隔离器在通信系统中扮演着至关重要的角色,其主要作用可以归纳如下: 一、保护通信设备 电气隔离:RS232隔离器通过光电隔离技术,将RS-232接口两端的设备电气完全隔离,从而避免了地线回路电压、浪涌、感应雷击、静电…...
一切为了安全丨2024中国应急(消防)品牌巡展武汉站成功召开!
消防品牌巡展武汉站 6月28日,由中国安全产业协会指导,中国安全产业协会应急创新分会、应急救援产业网联合主办,湖北消防协会协办的“一切为了安全”2024年中国应急(消防)品牌巡展-武汉站成功举办。该巡展旨在展示中国应急(消防&am…...
Claude Code 用户遭遇封号或额度不足时转向 Taotoken 的平滑迁移方案
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Claude Code 用户遭遇封号或额度不足时转向 Taotoken 的平滑迁移方案 应用场景类,针对依赖 Claude Code 进行编程辅助但…...
Claude-Crowed项目深度解析:构建高效AI应用的工具调用与流式响应实践
1. 项目概述与核心价值最近在折腾一些AI应用开发,发现一个挺有意思的项目,叫claude-crowed。这名字乍一看有点怪,像是“Claude”和“crowd”(人群)的混合体。简单来说,它是一个旨在让开发者能够更便捷地调用…...
SDN与OpenFlow架构解析及路由实现
1. SDN与OpenFlow架构解析在传统网络架构中,控制平面与数据平面紧密耦合,每个网络设备都需要独立维护路由表和转发决策。这种分布式架构虽然具有高可靠性,但也带来了管理复杂、配置繁琐、创新缓慢等问题。软件定义网络(SDN&#x…...
杰理之接谷歌 pixel8、华为P60手机,较大概率连接不上【篇】
音箱上有TWS状态信息,一直在switch状态轮转的时候连接。...
通过Taotoken模型广场快速为项目选择合适的AI模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken模型广场快速为项目选择合适的AI模型 当你开始一个新项目,或者需要为现有应用集成AI能力时,面…...
基于Simulink图形化建模求解一阶时变偏微分方程
1. 项目概述:从工程视角看一阶时变偏微分方程在工程系统建模与仿真领域,我们常常会遇到一类描述物理量在空间和时间上同时演化的数学模型,这就是偏微分方程。其中,一阶时变偏微分方程,比如对流方程、传输方程ÿ…...
智能AI研修系统:解锁轻量化智能研修的核心技术逻辑
很多人以为智能AI研修系统,只是普通的线上听课、刷题工具,其实这是很大的误解。传统研修模式模式固化、内容同质化严重,还需要人工统计学时、整理学习资料,费时又低效。而智能AI研修系统,是依托多项AI核心技术打造的专…...
AirSim无人机仿真入门:从Unreal视角设置到Python API调用的保姆级避坑全流程
AirSim无人机仿真入门:从Unreal视角设置到Python API调用的保姆级避坑全流程 当你第一次打开AirSim的官方文档,可能会被那些专业术语和零散的配置步骤搞得晕头转向。作为微软开源的无人机与自动驾驶仿真平台,AirSim确实强大,但它的…...
如何为OBS音频源集成专业VST插件:提升直播音质的终极指南
如何为OBS音频源集成专业VST插件:提升直播音质的终极指南 【免费下载链接】obs-vst Use VST plugins in OBS 项目地址: https://gitcode.com/gh_mirrors/ob/obs-vst OBS-VST是一款革命性的开源插件,它让OBS Studio用户能够在直播和录制过程中直接…...
一个开源免费的轻量Blazor UI控件库
bit BlazorUI组件原生、易于定制,并且在所有交互式Blazor模式(WASM、服务器、混合、预渲染)中无缝运行,节省时间,使开发过程更愉快。 bit BlazorUI是一个专为 Blazor 开发的高性能原生 UI 组件库,可以帮助开发者高效构建高质量应用。它拥有 80 多个高性能组件,总体体积…...
