微信小程序?qū)崿F(xiàn)圖形驗(yàn)證碼
本文實(shí)例為大家分享了微信小程序?qū)崿F(xiàn)圖形驗(yàn)證碼的具體代碼,供大家參考,具體內(nèi)容如下
1.wxml頁(yè)面
<canvas canvas-id="canvas" bindtap='change' style="width:90px;height: 30px;"></canvas>
2.js頁(yè)面
var app = getApp();
var baseUrl = getApp().baseUrl;
var ctx;
data:{
? ? text:""
},
onLoad: function(options) {
? ? var that = this;
? ? this.drawPic(that);
},
change: function() {
? ? var that = this;
? ? this.drawPic(that);
},
mobile(e) {
? ? this.setData({
? ? ? ? mobile: e.detail.value
? ? })
},
randomNum(min, max) {
return Math.floor(Math.random() * (max - min) + min);
},
/**生成一個(gè)隨機(jī)色**/
randomColor(min, max) {
let r = this.randomNum(min, max);
let g = this.randomNum(min, max);
let b = this.randomNum(min, max);
return "rgb(" + r + "," + g + "," + b + ")";
},
?
/**繪制驗(yàn)證碼圖片**/
drawPic(that) {
ctx = wx.createCanvasContext('canvas');
/**繪制背景色**/
ctx.fillStyle = this.randomColor(180, 240); //顏色若太深可能導(dǎo)致看不清
ctx.fillRect(0, 0, 90, 28)
/**繪制文字**/
var arr;
var text = '';
var str = 'ABCEFGHJKLMNPQRSTWXY123456789';
for (var i = 0; i < 4; i++) {
? ?var txt = str[this.randomNum(0, str.length)];
? ?ctx.fillStyle = this.randomColor(50, 160); //隨機(jī)生成字體顏色
? ?ctx.font = this.randomNum(20, 26) + 'px SimHei'; //隨機(jī)生成字體大小
? ?var x = 5 + i * 20;
? ?var y = this.randomNum(20, 25);
? ?var deg = this.randomNum(-20, 20);
? ?//修改坐標(biāo)原點(diǎn)和旋轉(zhuǎn)角度
? ?ctx.translate(x, y);
? ?ctx.rotate(deg * Math.PI / 180);
? ?ctx.fillText(txt, 5, 0);
? ?text = text + txt;
? ?//恢復(fù)坐標(biāo)原點(diǎn)和旋轉(zhuǎn)角度
? ?ctx.rotate(-deg * Math.PI / 180);
? ?ctx.translate(-x, -y);
}
/**繪制干擾線**/
for (var i = 0; i < 4; i++) {
? ?ctx.strokeStyle = this.randomColor(40, 180);
? ?ctx.beginPath();
? ?ctx.moveTo(this.randomNum(0, 90), this.randomNum(0, 28));
? ?ctx.lineTo(this.randomNum(0, 90), this.randomNum(0, 28));
? ?ctx.stroke();
}
/**繪制干擾點(diǎn)**/
for (var i = 0; i < 20; i++) {
? ?ctx.fillStyle = this.randomColor(0, 255);
? ?ctx.beginPath();
? ?ctx.arc(this.randomNum(0, 90), this.randomNum(0, 28), 1, 0, 2 * Math.PI);
? ?ctx.fill();
}
ctx.draw(false, function() {
? ?that.setData({
? ? ? ?text: text
? ?})
});3.效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 微信小程序 功能函數(shù)小結(jié)(手機(jī)號(hào)驗(yàn)證*、密碼驗(yàn)證*、獲取驗(yàn)證碼*)
- 微信小程序6位或多位驗(yàn)證碼密碼輸入框功能的實(shí)現(xiàn)代碼
- 微信小程序發(fā)送短信驗(yàn)證碼完整實(shí)例
- 微信小程序?qū)崿F(xiàn)倒計(jì)時(shí)60s獲取驗(yàn)證碼
- 微信小程序如何獲取手機(jī)驗(yàn)證碼
- 微信小程序綁定手機(jī)號(hào)獲取驗(yàn)證碼功能
- 微信小程序?qū)崿F(xiàn)隨機(jī)驗(yàn)證碼功能
- 微信小程序?qū)崿F(xiàn)驗(yàn)證碼獲取倒計(jì)時(shí)效果
- 微信小程序?qū)崿F(xiàn)發(fā)送驗(yàn)證碼按鈕效果
- 詳解如何使用微信小程序云函數(shù)發(fā)送短信驗(yàn)證碼
相關(guān)文章
javascript實(shí)現(xiàn)的淘寶旅行通用日歷組件用法實(shí)例
這篇文章主要介紹了javascript實(shí)現(xiàn)的淘寶旅行通用日歷組件,以實(shí)例形式分析了該日歷組件的相關(guān)設(shè)置及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
Ajax實(shí)現(xiàn)郵箱驗(yàn)證實(shí)例代碼
這篇文章介紹了Ajax實(shí)現(xiàn)郵箱驗(yàn)證的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
TypeScript函數(shù)和類型斷言實(shí)例詳解
在某些情況下,我們會(huì)比TS更清楚一個(gè)數(shù)據(jù)的類型,這種時(shí)候我們就可以使用斷言來(lái)告訴TS相信我,我知道自己在干什么,下面這篇文章主要給大家介紹了關(guān)于TypeScript函數(shù)和類型斷言的相關(guān)資料,需要的朋友可以參考下2022-06-06
uniapp開(kāi)發(fā)小程序?qū)崿F(xiàn)全局懸浮按鈕的代碼
這篇文章主要介紹了uniapp開(kāi)發(fā)小程序如何實(shí)現(xiàn)全局懸浮按鈕,但是在uniapp中式?jīng)]有window對(duì)象,和dom元素的,需要獲取頁(yè)面上節(jié)點(diǎn)的幾何信息,具體實(shí)例代碼詳細(xì)跟隨小編一起看看吧2022-03-03
js+html5實(shí)現(xiàn)canvas繪制圓形圖案的方法
這篇文章主要介紹了js+html5實(shí)現(xiàn)canvas繪制圓形圖案的方法,涉及html5圖形繪制的基礎(chǔ)技巧,需要的朋友可以參考下2015-06-06
Node.js:Windows7下搭建的Node.js服務(wù)(來(lái)玩玩服務(wù)器端的javascript吧,這可不是前端js插件
什么是Node.js?還服務(wù)器端javascript?對(duì)于這個(gè)概念我在這篇文章不做解釋,可以自己去搜索了解下,服務(wù)器端js不是新技術(shù),只是最近的node.js的火爆讓他爆發(fā)了,我會(huì)在以后的文章里解釋什么是node.js。2011-06-06
微信小程序?qū)崿F(xiàn)滴滴導(dǎo)航tab切換效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)滴滴導(dǎo)航tab切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
JavaScript動(dòng)畫(huà)實(shí)例之粒子文本的實(shí)現(xiàn)方法詳解
這篇文章主要介紹了JavaScript動(dòng)畫(huà)實(shí)例之粒子文本的實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

