<
html
>
<
cái đầu
>
<
siêu dữ liệu
bộ ký tự
=
"UTF-8"
>
<
siêu dữ liệu
tên
=
"khung nhìn"
nội dung
=
"width=chiều rộng thiết bị, tỷ lệ ban đầu=1.0"
>
<
siêu dữ liệu
http-tương đương
=
"Tương thích với X-UA"
nội dung
=
"ie=cạnh"
>
<
tiêu đề
>mã xác minh canvas
tiêu đề
>
cái đầu
>
<
thân hình
>
<
canvas
chiều rộng
=
"200"
chiều cao
=
"60"
nhận dạng
=
"kiểm tra"
phong cách
=
"viền:1px rắn #000;"
>Trình duyệt của bạn không hỗ trợ thẻ canvas!
canvas
>
<
kịch bản
>
var ctx = document.getElementById("kiểm tra").getContext("2d");
var ctxW = document.getElementById("kiểm tra").clientWidth;
var ctxH = document.getElementById("kiểm tra").clientHeight;
/**
* Tạo số ngẫu nhiên và đặt khoảng số ngẫu nhiên
* @param {[Số]} phút [giới hạn dưới của khoảng số ngẫu nhiên]
* @param {[Số]} tối đa [giới hạn trên của khoảng số ngẫu nhiên]
* @return {[Number]} [Trả về một số ngẫu nhiên trong phạm vi này]
*/
hàm ranNum(min, max) {
trả về Math.random() * (tối đa - tối thiểu) + tối thiểu;
}
/**
* Trả về một màu ngẫu nhiên với dải màu có thể định cấu hình
* @param {[Số]} phút [giới hạn màu thấp hơn]
* @param {[Số]} tối đa [giới hạn trên của màu]
* @return {[Chuỗi]} [màu ngẫu nhiên]
*/
hàm ranColor(min, max) {
var r = ranNum(min, max);
var g = ranNum(min, max);
var b = ranNum(min, max);
// trả về "rgb(" + r + "," + g + "," + b + ")";
trả về `rgb(${r},${g},${b})`;
}
/**
* Mảng chuỗi ngẫu nhiên
* @return {[Mảng]} [mảng ngẫu nhiên]
*/
hàm ranStr() {
var str = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789";
trả về str.split("").sort(hàm () {
trả về Math.random() - 0.5
});
}
/**
* Vẽ chuỗi văn bản
* @param {[String]} canvasId [id canvas]
* @param {[Số]} canvasW [chiều rộng của canvas]
* @param {[Số]} canvasH [chiều cao của canvas]
* @param {[Số]} num [số từ để rút mã xác minh]
* @param {[Số]} fsMin [Kích thước phông chữ tối thiểu]
* @param {[Số]} fsMax [Kích thước phông chữ tối đa]
* @param {[Số]} frMin [Giới hạn dưới bù xoay phông chữ]
* @param {[Số]} frMax [giới hạn trên bù xoay phông chữ]
* @param {[Số]} phút [giới hạn màu thấp hơn]
* @param {[Số]} tối đa [giới hạn trên của màu]
* @return {[Chuỗi]} [chuỗi ngẫu nhiên]
*/
hàm drawText(canvasId, canvasW, canvasH, num, fsMin, fsMax, frMin, frMax, min, max) {
var str = "";
for (var i = 0; i <
trong một
; tôi++) {
của chúng tôi
char
=
ranStr
()[Math.floor(0, ranStr().length)];
của chúng tôi
fs
=
chạyNum
(fsMin, fsMax);
canvasId. phông chữ
=
fs
+ "px Verdana";
canvasId. fillStyle
=
chạyMàu sắc
(tối thiểu, tối đa);
// Lưu trạng thái vẽ
canvasId.save();
// ngữ cảnh.dịch(x,y);
// giá trị x được thêm vào tọa độ ngang (x)
// giá trị y được thêm vào tọa độ dọc (y)
//bù lại
canvasId.translate(canvasW / số * i + canvasW / 20, 0);
// thay đổi góc
canvasId.rotate(ranNum(frMin, frMax) * Math.PI / 180);
// ngữ cảnh.fillText(văn bản, x, y, chiều rộng tối đa);
// text chỉ định đầu ra văn bản trên canvas.
// x Vị trí tọa độ x (so với canvas) để bắt đầu vẽ văn bản.
// y Vị trí tọa độ y (so với khung vẽ) để bắt đầu vẽ văn bản.
// maxWidth tùy chọn. Chiều rộng văn bản tối đa được phép, tính bằng pixel.
canvasId.fillText(ký tự, 0, (canvasH + fs) / 2,5, canvasW / số);
// Trả về trạng thái và thuộc tính đường dẫn đã lưu trước đó
ctx.restore();
chuỗi += ký tự;
}
// console.log(chuỗi);
trả về chuỗi;
}
/**
* Vẽ nền
* @param {[String]} canvasId [id canvas]
* @param {[Số]} canvasW [chiều rộng của canvas]
* @param {[Số]} canvasH [chiều cao của canvas]
* @param {[Số]} phút [giới hạn dưới]
* @param {[Số]} tối đa [giới hạn trên]
*/
hàm drawBg(canvasId, canvasW, canvasH, min, max) {
// Vẽ nền canvas
canvasId. fillStyle
=
chạyMàu sắc
(tối thiểu, tối đa);
// tô màu
canvasId. fillRect(0, 0, canvasW, canvasH);
}
/**
* Vẽ các chấm giao thoa
* @param {[String]} canvasId [id canvas]
* @param {[Số]} canvasW [chiều rộng của canvas]
* @param {[Số]} canvasH [chiều cao của canvas]
* @param {[Số]} num [số lần rút]
* @param {[Số]} r [bán kính điểm]
* @param {[Số]} phút [giới hạn dưới]
* @param {[Số]} tối đa [trực tuyến]
*/
hàm drawCircle(canvasId, canvasW, canvasH, num, r, min, max) {
cho (var
Tôi
=
0
; i < số; i++) {
// Bắt đầu vẽ (nhấc bút lên)
canvasId. beginPath();
// context.arc(x,y,r,sAngle,eAngle,ngược chiều kim đồng hồ);
// x x tọa độ tâm đường tròn.
// y Tọa độ y của tâm đường tròn.
// r Bán kính của đường tròn.
// sAngle Góc bắt đầu, tính bằng radian. (Vị trí 3 giờ của vòng cung là 0 độ).
// eAngle Góc cuối, tính bằng radian.
// ngược chiều kim đồng hồ tùy chọn. Chỉ định xem nên vẽ đồ thị ngược chiều kim đồng hồ hay theo chiều kim đồng hồ. Sai = theo chiều kim đồng hồ, đúng = ngược chiều kim đồng hồ.
canvasId.arc(ranNum(0, canvasW), ranNum(0, canvasH), r, 0, 2 * Math.PI);
// tô màu
canvasId. fillStyle
=
chạyMàu sắc
(tối thiểu, tối đa);
// đổ đầy
canvasId. fill();
// Đóng bản vẽ (nhả bút)
canvasId. closePath();
}
}
/**
* Vẽ các đoạn đường giao thoa
* @param {[String]} canvasId [id canvas]
* @param {[Số]} canvasW [chiều rộng của canvas]
* @param {[Số]} canvasH [chiều cao của canvas]
* @param {[Số]} num [số lần rút]
* @param {[Số]} phút [giới hạn dưới]
* @param {[Số]} tối đa [trực tuyến]
*/
hàm drawLine(canvasId, canvasW, canvasH, num, min, max) {
cho (var
Tôi
=
0
; i < số; i++) {
// Bắt đầu vẽ (nhấc bút lên)
canvasId. beginPath();
// Vẽ điểm bắt đầu
canvasId.moveTo(ranNum(0, canvasW), ranNum(0, canvasH));
// Vẽ điểm cuối
canvasId.lineTo(ranNum(0, canvasW), ranNum(0, canvasH));
canvasId.strokeStyle
=
chạyMàu sắc
(tối thiểu, tối đa);
canvasId.đột quỵ();
canvasId. closePath();
}
}
// Vẽ mã xác minh
hàm drawCanvas() {
// khung vẽ rõ ràng
ctx.clearRect(0, 0, 200, 60);
// vẽ nền
drawBg(ctx, ctxW, ctxH, 200, 255);
// Vẽ các chấm giao thoa
vẽ vòng tròn(ctx, ctxW, ctxH, 20, 5, 200, 255);
// Vẽ các đoạn đường giao thoa
drawLine(ctx, ctxW, ctxH, 20, 0, 255);
// Vẽ mã xác minh
của chúng tôi
đường
=
vẽ văn bản
(ctx, ctxW, ctxH, 4, 10, 50, -30, 30, 0, 100);
trả về chuỗi;
}
drawCanvas();
document.getElementById('kiểm tra')
.khi nhấp chuột
=
vẽVải
;
thân hình
>
html
>
Tôi là một lập trình viên xuất sắc, rất giỏi!