1. 在vue项目中安装konva
和vue-konva
库
npm install konva vue-konva --save-dev
2. 引入vue-konva
库
import VueKonva from ‘vue-konva';
Vue.use(VueKonva)
3. 创建单独的滑块验证组件 Captcha.vue
,在相应的页面中引入使用即可
<template> <v-stage :config="Config.stage"> <v-layer ref="layer"> <!-- 背景组 --> <v-group :config="Config.group"> <v-rect :config="Config.rect"></v-rect> <v-text :config="Config.text"></v-text> </v-group> <!-- 遮罩层组 --> <v-group :config="Config.group"> <v-rect :config="Config.coverRect" ref="coverRect"></v-rect> <v-text :config="Config.coverText" v-if="success" ref="coverText"></v-text> </v-group> <!-- 滑块组 --> <v-group :config="Config.moveGroup" ref="moveGroup" @mouseover="moveGroupMouseOver" @mouseout="moveGroupMouseOut" @mousedown="moveGroupMouseDown" @mouseup="moveGroupStop"> <v-rect :config="Config.moveRect" ref="moveRect"></v-rect> <!-- 验证成功组 --> <v-group :config="Config.group" v-if="success"> <v-circle :config="Config.succCircle" ref="succCircle"></v-circle> <v-line :config="Config.succLine"></v-line> </v-group> <v-group :config="Config.moveGroup_l" v-else> <v-line :config="Config.moveLine1"></v-line> <v-line :config="Config.moveLine2"></v-line> </v-group> </v-group> </v-layer> </v-stage> </template> <script> /* * captchaConfig // 属性 {width:330, height: 36} 组件的宽高 * eventCaptcha // 验证成功的回调 */ let _$mouseDown = false; // 鼠标是否在滑块组中按下,因为和html没有绑定,所以没有放在data中,并以_$开头 export default { props: { captchaConfig: { type: Object, default: () => ({ width: 330, // 宽度 height: 36, // 高度 }), }, }, data() { const { width, height } = this.captchaConfig; let Config = { stage: { width: width, height: height, }, group: { x: 0, y: 0, }, rect: { width: width, height: height, fill: '#e8e8e8', }, text: { x: 0, y: 0, width: width, height: height, text: '请按住滑块,拖动到最右边', fontSize: 14, fontFamily: '微软雅黑', align: 'center', lineHeight: parseFloat(height / 14), }, //滑块组 moveGroup: { draggable: true, }, moveRect: { x: 0.5, y: 0.5, width: height - 1, height: height - 1, fill: '#fff', stroke: '#8d92a1', strokeWidth: 1, }, moveGroup_l: { x: height / 3, y: height / 3, }, moveLine1: { x: 0, y: 0, points: [0, 0, height / 6, height / 6, 0, height / 3], stroke: '#8d92a1', strokeWidth: 1, lineCap: 'round', lineJoin: 'round', }, moveLine2: { x: height / 6, y: 0, points: [0, 0, height / 6, height / 6, 0, height / 3], stroke: '#8d92a1', strokeWidth: 1, lineCap: 'round', lineJoin: 'round', }, //创建遮罩层组 coverRect: { width: height / 2, height: height, fill: '#8d92a1', opacity: 0.8, }, coverText: { x: 0, y: 0, width: width - height, height: height, align: 'center', text: '验证成功', fontSize: 14, fontFamily: '微软雅黑', fontStyle: 'bold', fill: '#fff', lineHeight: parseFloat(height / 14), }, //验证成功组 succCircle: { x: height / 2, y: height / 2, radius: height / 4, fill: '#8d92a1', }, succLine: { points: [height / 2 - height / 4 / 2, height / 2, height / 2 - height / 4 / 8, height / 2 + height / 4 / 2, height / 2 + height / 4 / 2, height / 2 - height / 4 / 2], stroke: '#fff', strokeWidth: 1, lineCap: 'round', lineJoin: 'round', }, }; return { Config, success: 0, // 标记是否验证成功 0 失败 1 成功 }; }, mounted() { // 给document绑定鼠标抬起事件 document.addEventListener('mouseup', this.moveGroupStop); // 在组件注销的时候取消绑定 this.$once('hook:beforeDestroy', () => { document.removeEventListener('mouseup', this.moveGroupStop); }); // 给滑块组绑定拖拽监听 this.$refs.moveGroup.getNode().dragBoundFunc((pos) => { const { width, height } = this.captchaConfig; let moveGroup = this.$refs.moveGroup.getNode(); let moveRect = this.$refs.moveRect.getNode(); let coverRect = this.$refs.coverRect.getNode(); let moveX = moveGroup.getAttrs().x "text-align: center">简单的滑块验证功能实现,可直接在vue页面中引入使用。konva库:https://konvajs.org/
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月15日
2024年11月15日
- 文章.2004-被遗忘的时光【华博音乐】【WAV+CUE】
- 群星《青葱韶歌》原力计划·毕业季企划合辑[FLAC+分轨][661M]
- 群星《抖烧 DSD》抖音神曲 [WAV分轨][992M]
- 庾澄庆《哈林天堂》索尼音乐[WAV+CUE][1G]
- 英雄联盟全球总决赛多久打一次 全球总决赛举办频率介绍
- 第二届老头杯什么时候开始选人 第二届老头杯选人时间介绍
- 英雄联盟第二届老头杯什么时候开始 老头杯s2赛程时间队伍名单汇总
- AI赋能卓越显示技术共筑数字未来:三星显示器产品矩阵亮相2024进博会
- 技术剖析:天玑9400如何打造移动最强GPU和游戏体验?
- 顶级装备 实力登顶:三星显示器双十一焕新升级最后冲刺
- 陈影《绝色靓声》WAV+CUE
- 龚玥《禅是一枝花(6N纯银SQCD)》原抓WAV+CUE
- 刘德丽《寂寞在唱歌HQCD+A2HD5》[WAV+CUE]
- 萧亚轩《钻石糖》金牌大风[WAV+CUE][989M]
- 王菲《王菲精选-菲卖品》环球唱片SHM-SACD[ISO][1.9G]