import SIdentify from './views/identify' //引入路径createApp(App).use(SIdentify).mount('#app')
创建identify文件
<template><div class="s-canvas"><canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas></div>
</template>
<script>export default{name: 'SIdentify',props: {identifyCode: {type: String,default: '1234'},fontSizeMin: {type: Number,default: 20},fontSizeMax: {type: Number,default: 35},backgroundColorMin: {type: Number,default: 180},backgroundColorMax: {type: Number,default: 240},colorMin: {type: Number,default: 50},colorMax: {type: Number,default: 160},lineColorMin: {type: Number,default: 40},lineColorMax: {type: Number,default: 180},dotColorMin: {type: Number,default: 0},dotColorMax: {type: Number,default: 255},contentWidth: {type: Number,default: 112},contentHeight: {type: Number,default: 38}},methods: {// 生成一个随机数randomNum (min, max) {return Math.floor(Math.random() * (max - min) + min)},// 生成一个随机的颜色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 + ')'},drawPic () {let canvas = ElementById('s-canvas')let ctx = Context('2d')Baseline = 'bottom'// 绘制背景ctx.fillStyle = this.randomColor(this.backgroundColorMin, this.backgroundColorMax)ctx.fillRect(0, 0, tWidth, tHeight)// 绘制文字for (let i = 0; i < this.identifyCode.length; i++) {this.drawText(ctx, this.identifyCode[i], i)}this.drawLine(ctx)this.drawDot(ctx)},drawText (ctx, txt, i) {ctx.fillStyle = this.lorMin, lorMax)ctx.font = this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'let x = (i + 1) * (tWidth / (this.identifyCode.length + 1))let y = this.randomNum(this.fontSizeMax, tHeight - 5)var deg = this.randomNum(-45, 45)// 修改坐标原点和旋转角度anslate(x, ate(deg * Math.PI / 180)ctx.fillText(txt, 0, 0)// 恢复坐标原点和旋转角度ate(-deg * Math.PI / anslate(-x, -y)},drawLine (ctx) {// 绘制干扰线for (let i = 0; i < 3; i++) {ctx.strokeStyle = this.randomColor(this.lineColorMin, this.lineColorMax)ctx.beginPath()veTo(this.randomNum(0, tWidth), this.randomNum(0, tHeight))ctx.lineTo(this.randomNum(0, tWidth), this.randomNum(0, tHeight))ctx.stroke()}},drawDot (ctx) {// 绘制干扰点for (let i = 0; i < 30; i++) {ctx.fillStyle = this.randomColor(0, 255)ctx.beginPath()ctx.arc(this.randomNum(0, tWidth), this.randomNum(0, tHeight), 1, 0, 2 * Math.PI)ctx.fill()}}},watch: {identifyCode () {this.drawPic()}},mounted () {this.drawPic()}}
</script>
组件引入identify文件
<template><div><h1>vue文章1</h1><div><p>11111111111111111111111111111111111111111111111111111111111</p></div><SIdentify :identifyCode="identifyCode" @click="refreshCode"></SIdentify></div>
</template><script>
import { onMounted,ref } from "@vue/runtime-core";
import SIdentify from "./identify"; //
export default {setup() {onMounted(() => {});const identifyCode=ref('4444')const identifyCodes=ref('0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')const randomNum = (min, max) => {return Math.floor(Math.random() * (max - min) + min);};const refreshCode = () => {identifyCode.value = "";makeCode(identifyCodes, 4);};const makeCode = (o, l) => {for (let i = 0; i < l; i++) {identifyCode.value +=identifyCodes.value[randomNum(0, identifyCodes.value.length)];}console.log(identifyCode.value);};return {randomNum,refreshCode,makeCode,identifyCode};},components: {SIdentify: SIdentify,},
};
</script><style>
</style>
使用效果
本文发布于:2024-02-01 14:44:44,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170676988637345.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |