vue3.2+ 滑动验证组件,pc/手机通用,即插即用

  • 一、前言
  • 二、成果展示
  • 三、组件使用
  • 四、vue3.2+ 滑动验证组件 源码
  • 五、最后,点个赞

一、前言

vue已经更新到3.2+,使用了script的setup属性语法,支持typescript,但是网上已有的大部分滑动验证组件都是旧版本,还不支持触摸,所以决定写一个:

  • 支持vue3.2+语法
  • 支持typescript
  • 支持pc/手机(自动适配)
  • 即插即用

的滑动验证组件,方便大家。当然,这个只是静态的校验,如果需要动态校验,需要和后端配合。

二、成果展示

三、组件使用

import组件,然后 <dragVerify v-model:value="form.isVerifyPass"></dragVerify>使用即可,其中v-model:value为双向绑定结果
支持属性:

  • successIcon 成功图标{string} 默认值 ‘iconfont icon-status-nor’
  • successText 成功文字string} 默认值 ‘验证成功’
  • startIcon 开始的图标{string} 默认值 ‘iconfont icon-login-slid’
  • startText 开始的文字{string} 默认值 ‘拖动滑块到最右边’
<template><div class="test"><h3>vue3.2+ 滑动验证组件,pc/手机通用</h3><div class="content"><dragVerify v-model:value="form.isVerifyPass"></dragVerify></div><div>校验结果:{{ form.isVerifyPass }}</div></div>
</template><script lang="ts" setup>
import { reactive } from 'vue'
import dragVerify from '@/components/dragVerify.vue'// 提交表单数据
const form = reactive({isVerifyPass: false, // 滑块验证结果
})
</script>

四、vue3.2+ 滑动验证组件 源码


<template><div class="drag-verify"><div class="range" :class="verifyResult ? 'success' : ''"><div class="block" @mousedown="onStart" @touchstart="onStart"><i :class="verifyResult ? successIcon : startIcon"></i></div><span class="text">{{ verifyResult ? successText : startText }}</span></div></div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'const emit = defineEmits(['update:value'])
defineProps({value: {type: Boolean,defalut: false,},// 成功图标successIcon: {type: String,default: 'iconfont icon-status-nor',},// 成功文字successText: {type: String,default: '验证成功',},// 开始的图标startIcon: {type: String,default: 'iconfont icon-login-slid',},// 开始的文字startText: {type: String,default: '拖动滑块到最右边',},
})const verifyResult = ref(false) // 验证结果
const isTouch = 'ontouchstart' in document.documentElement
const moveEvent = isTouch ? 'touchmove' : 'mousemove'
const upEvent = isTouch ? 'touchend' : 'mouseup'// 滑块触摸开始
const onStart = (ev: MouseEvent | TouchEvent) => {let disX = 0 // 滑块移动距离const iconWidth = 40 // 滑动图标宽度const ele = document.querySelector('.drag-verify .block') as HTMLElementconst startX = (ev as MouseEvent).clientX || (ev as TouchEvent).touches[0].pageXconst parentWidth = ele.offsetWidthconst MaxX = parentWidth - iconWidthif (verifyResult.value) {return false}// 滑块触摸移动const onMove = (e: MouseEvent | TouchEvent) => {const endX = (e as MouseEvent).clientX || (e as TouchEvent).touches[0].pageXdisX = endX - startXif (disX <= 0) {disX = 0}if (disX >= MaxX - iconWidth) {disX = MaxX}ele.style.transition = '.1s all'ele.style.transform = `translateX(${disX}px)`}// 滑块触摸结束const onEnd = () => {if (disX !== MaxX) {ele.style.transition = '.5s all'ele.style.transform = 'translateX(0)'} else {// 执行成功verifyResult.value = trueemit('update:value', verifyResult.value)}document.removeEventListener(moveEvent, onMove)document.removeEventListener(upEvent, onEnd)}document.addEventListener(moveEvent, onMove)document.addEventListener(upEvent, onEnd)
}
</script>
<style lang="scss" scoped>
$color-primary: #03c5e5;@mixin flex {display: flex;justify-content: center;align-items: center;
}
.drag-verify {width: 100%;.range {background-color: #ececee;position: relative;border-radius: 4px;transition: 1s all;user-select: none;color: #666;overflow: hidden;@include flex;height: 40px;&.success {background-color: $color-primary;color: #fff;.text {position: relative;z-index: 1;}.block i {color: $color-primary;}}.block {display: block;position: absolute;left: calc(-100% + 40px);width: 100%;height: 100%;background: $color-primary;border-radius: 4px;overflow: hidden;i {position: absolute;right: 0;width: 40px;height: 100%;font-size: 20px;color: #c8c9cc;background-color: #fff;border: 1px solid #e5e5e5;border-radius: 4px;cursor: pointer;@include flex;}}}
}
</style>

五、最后,点个赞

如果帮到你,点个赞再走

vue3.2+ 滑动验证组件,pc/手机通用,即插即用相关推荐

  1. 【Vue3】滑动验证组件 | 滑动验证

    前言 滑块验证不只判断是否滑动到尾部,真正的目的是检测用户行为,检测行为是人为.脚本.还是其它. 防止使用脚本大量注册.请求等 .比如发送请求时,判断用户在某个页面停留了多长时间.登录.注册时是否点击 ...

  2. vue3 滑动验证组件

    vue3拖动滑块进行验证 组件效果展示 源码 <template><div class="slider-verification" ref="slide ...

  3. 滑动验证+短信验证码接入=复制粘贴(Java)

    PC版滑动验证的实现 简介 滑动验证是基于人机识别技术开发的智能验证码产品.用户通过简单的右滑交互,无需思考即可通过验证. 资源引入说明 使用PC版滑动验证码,需要引入以下js资源,为保证服务功能最优 ...

  4. 微信小程序图片验证组件封装

    一.图片滑动验证组件 延迟页面展示或者延缓并发处理.当滑动图片到空缺位置后执行加载或者验证. 二.封装源码 1.wxml <!--遮罩层,弹框图片背景,滑动框图片比例:16:9 1.777777 ...

  5. html+js实现手机浏览器的滑动验证

    前言 前两天发了一篇关于适用于PC浏览器的滑动验证的文章.这两天修改之后,改为了适用于手机浏览器的滑动验证功能. 一.原理 简单介绍一下实现的原理,就是获取一张本地的图片之后,随机截取一个区域,作为需 ...

  6. java web 数据验证_kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件...

    小菜利用工作之余编写了一款Java小插件,主要是用来验证Web请求的数据,是在服务器端进行验证,不是简单的浏览器端验证. 小菜编写的仅仅是一款非常初级的组件而已,但小菜为它写了详细的说明文档. 简单介 ...

  7. PC项目——vue 脚手架中实现阿里云人机滑动验证

    转自๑柯帆๑ 找半天才找到这个可用的 vue 脚手架中实现阿里云人机滑动验证 一.报错问题解决 描述:照官网写的引入方式引入vue报错 AWSC is not define 解决:.html文件引入s ...

  8. 基于vue3的京东nutui组件库的表单校验规则:怎样进行表单验证?怎样只使用指定的某一个规则进行校验呢?

    官网: NutUI - 移动端 Vue2.Vue3.小程序 组件库京东风格的轻量级移动端 Vue.React 组件库https://nutui.jd.com/#/component/form 用法: ...

  9. vue 后台登录滑动验证

    1.引入vue-monoplasty-slide-verify组件到项目里 先使用命令行安装:npm install --save vue-monoplasty-slide-verify 2.在mai ...

最新文章

  1. /bin/bash^M: bad interpreter: 没有那个文件或目录--转载
  2. 微软EPG老大发给员工的mail
  3. 【Android】ContentProvider和Uri详解
  4. xml不利于调试_流利的接口不利于维护
  5. 网管型光纤收发器功能介绍
  6. LINUX 常用命令集合
  7. Github(5)-开源开发-常见错误
  8. python做的游戏可以导出吗_Python视频教程
  9. java日期算前一天_java 根据系统日期获取前一天、后一天时间(根据初始日期推算出期望(向前/向后)日期)...
  10. html表单提交不判断,请问jquery有方法可以判断一个表单提交之后结果是成功或不成功吗?...
  11. [Java] 蓝桥杯ALGO-143 算法训练 字符串变换
  12. 旅行商回溯算法C语言,【算法作业】用回溯法求解旅行商问题
  13. UML教程8:构件图 部署图 附录
  14. BZOJ5336:[TJOI2018]游园会——题解
  15. linux Ubuntu 安装的搜狗双拼输入法只有五笔解决办法附安装教程
  16. iOS Touch ID 简易开发教程
  17. 入手机械键盘PLU ML 87
  18. Modbus编程实践
  19. Mybatis 之 二级缓存
  20. UltraEdit--用法--快捷键/配置/背景色/字体大小

热门文章

  1. 计算机硬件和工作原理,课题计算机硬件和基本工作原理
  2. 2021年中国电商市场的9大趋势预测
  3. MFC com控件类
  4. 回合制html代码,老框架新思路 最新好玩的回合制网页游戏盘点
  5. Unity3D 5 官方教程:粒子系统 How-Tos
  6. 《鱿鱼游戏》的深刻,在于足够肤浅
  7. python 工资条 企业微信_企业微信工资条开发
  8. My97DatePicker日期范围限制
  9. 腾讯云CFS挂载问题
  10. 基于matlab的漏电保护器仿真,基于MATLAB仿真的高压断路器振动信号故障诊断