vue 登录滑动验证实现代码
作者:前端小白16 发布时间:2024-04-28 10:55:04
标签:vue,登录滑动验证
在没给大家讲解实现代码之前,先给大家分享效果图:
之前别人都是用jq写的,自己整理了一下开始使用
<el-form-item label="验证">
<div class="form-inline-input">
<div class="code-box" id="code-box">
<input type="text" name="code" class="code-input" />
<p></p>
<span>>>></span>
</div>
</div>
</el-form-item>
vue代码
//获取元素距离页面边缘的距离
getOffset(box,direction){
var setDirection = (direction == 'top') ? 'offsetTop' : 'offsetLeft' ;
var offset = box[setDirection];
var parentBox = box.offsetParent;
while(parentBox){
offset+=parentBox[setDirection];
parentBox = parentBox.offsetParent;
}
parentBox = null;
return parseInt(offset);
},
moveCode(code,_this){
var fn = {codeVluae : code};
var box = document.querySelector("#code-box"),
progress = box.querySelector("p"),
codeInput = box.querySelector('.code-input'),
evenBox = box.querySelector("span");
//默认事件
var boxEven = ['mousedown','mousemove','mouseup'];
//改变手机端与pc事件类型
if(typeof document.ontouchstart == 'object'){
boxEven = ['touchstart','touchmove','touchend'];
}
var goX,offsetLeft,deviation,evenWidth,endX;
function moveFn(e){
e.preventDefault();
e = (boxEven['0'] == 'touchstart') ? e.touches[0] : e || window.event;
endX = e.clientX - goX;
endX = (endX > 0) ? (endX > evenWidth) ? evenWidth : endX : 0;
if(endX > evenWidth * 0.7){
progress.innerText = '松开验证';
progress.style.backgroundColor = "#66CC66";
}else{
progress.innerText = '';
progress.style.backgroundColor = "#FFFF99";
}
progress.style.width = endX+deviation+'px';
evenBox.style.left = endX+'px';
}
function removeFn() {
document.removeEventListener(boxEven['2'],removeFn,false);
document.removeEventListener(boxEven['1'],moveFn,false);
if(endX > evenWidth * 0.7){
progress.innerText = '验证成功';
progress.style.width = evenWidth+deviation+'px';
evenBox.style.left = evenWidth+'px'
codeInput.value = fn.codeVluae;
evenBox.onmousedown = null;
_this.ruleForm.verification = true;
}else{
progress.style.width = '0px';
evenBox.style.left = '0px';
}
};
function getOffset(box,direction){
var setDirection = (direction == 'top') ? 'offsetTop' : 'offsetLeft' ;
var offset = box[setDirection];
var parentBox = box.offsetParent;
while(parentBox){
offset+=parentBox[setDirection];
parentBox = parentBox.offsetParent;
}
parentBox = null;
return parseInt(offset);
};
evenBox.addEventListener(boxEven['0'], function(e) {
e = (boxEven['0'] == 'touchstart') ? e.touches[0] : e || window.event;
goX = e.clientX,
offsetLeft = getOffset(box,'left'),
deviation = this.clientWidth,
evenWidth = box.clientWidth - deviation,
endX;
document.addEventListener(boxEven['1'],moveFn,false);
document.addEventListener(boxEven['2'],removeFn,false);
},false);
fn.setCode = function(code){
if(code)
fn.codeVluae = code;
}
fn.getCode = function(){
return fn.codeVluae;
}
fn.resetCode = function(){
evenBox.removeAttribute('style');
progress.removeAttribute('style');
codeInput.value = '';
};
return fn;
}
调用
mounted(){
var _this = this;
// window.addEventListener('load',function(){
//code是后台传入的验证字符串
var code = "jsaidaisd656",
codeFn = new _this.moveCode(code,_this);
// });
}
验证样式
.form-inline-input{
border:1px solid #dadada;
border-radius:5px;
}
.form-inline-input input,
.code-box{
padding: 0 3px;
width: 298px;
height: 40px;
color: #fff;
text-shadow: 1px 1px 1px black;
background: #efefef;
border: 0;
border-radius: 5px;
outline: none;
}
.code-box{
position: relative;
}
.code-box p,
.code-box span{
display:block;
position: absolute;
left: 0;
height: 40px;
text-align: center;
line-height: 40px;
border-radius: 5px;
padding:0;
margin:0;
}
.code-box span{
width: 40px;
background-color:#fff;
font-size: 16px;
cursor: pointer;
margin-right:1px;
}
.code-box p{
width: 0;
background-color: #FFFF99;
overflow: hidden;
text-indent: -20px;
transition: background 1s ease-in;
}
.code-box .code-input{
display: none;
}
.code-box .code-input{
display: none;
}
.form-inline-input{
border:1px solid #dadada;
border-radius:5px;
}
.form-inline-input input,
.code-box{
padding: 0 3px;
width: 298px;
height: 40px;
color: #fff;
text-shadow: 1px 1px 1px black;
background: #efefef;
border: 0;
border-radius: 5px;
outline: none;
}
.code-box{
position: relative;
}
.code-box p,
.code-box span{
display:block;
position: absolute;
left: 0;
height: 40px;
text-align: center;
line-height: 40px;
border-radius: 5px;
padding:0;
margin:0;
}
.code-box span{
width: 40px;
background-color:#fff;
font-size: 16px;
cursor: pointer;
margin-right:1px;
}
.code-box p{
width: 0;
background-color: #FFFF99;
overflow: hidden;
text-indent: -20px;
transition: background 1s ease-in;
}
.code-box .code-input{
display: none;
}
.code-box .code-input{
display: none;
}
总结
以上所述是小编给大家介绍的vue 登录滑动验证实现代码网站的支持!
来源:https://blog.csdn.net/baidu_38305286/article/details/80054288
0
投稿
猜你喜欢
- 自带验证器1、UniqueValidator用于验证(唯一)unique=True的字段,常用参数:queryset: required,用
- 在计算机软件领域,缓存(Cache)指的是将部分数据存储在内存中,以便下次能够更快地访问这些数据,这也是一个典型的用空间换时间的例子。一般用
- console 打印乱码1.File Encoding设置项目编码为GBK2.文件模板设定python脚本为# -*- coding: ut
- 对衍射最经典的解释是Huygens-Fresnel原理,Huygens认为波阵面上每一点都会成为新的波源,这些子波源的相互干涉就形成了衍射。
- 具体不多说,直接上代码。欢迎一起交流和学习。创建一个按月创建表的存储过程,SQL语句如下:DELIMITER // DROP PROCEDU
- CategoricalDtype自定义排序当我们的透视表生成完毕后,有很多情况下需要我们对某列或某行值进行排序。排序有很多种方法。例如sor
- DateTimeField日期+时间。与python里的 datetime.datetime 实例同。比如,数据库字段内容为2018-08-
- 利用MySQLfs这个工具,我么可以在MySQL关系数据库中存储文件系统。MySQLfs将文件系统中文件的字节内容分解成数据库中的元组,而数
- python现在的版本,主要是python2和python3两个大版本,这两个版本有很大的不同。当我们在自己电脑上同时安装了python2.
- 系统环境centos7python2.7先在操作系统安装expect[root@V71 python]# vi 3s.py#!/usr/bi
- 一、前言构建命令行程序很酷:命令行可以按照我们的设定完成相应的工作,相比 GUI 界面程序,无需花费大量时间设计 GUI 界面。但要使命令行
- 问题最近在工作中发现了一个问题,Python代码一直用着免费的Google翻译API插件googletrans,这两天突然就报错了:Trac
- 以下摘录自 oreilly.JavaScript.The.Definitive.Guide.5th.Edition.Aug.200
- 本文实例讲述了JS实现在线统计一个页面内鼠标点击次数的方法。分享给大家供大家参考。具体实现方法如下:<!DOCTYPE html PU
- 这些天,我需要全文搜索。这个区块中最酷的孩子们是Elastic Search和Sorl:他们快速,灵活,资源消耗沉重并且需要Java,这几乎
- JavaScript中没有Trim函数,VBScript语言中才有这个函数,就是去掉字符串头和尾的空格。您可以访问这篇文章:《增加 java
- 本文主要参考:http://element.eleme.io/#/zh-CN/component/menu在使用elementUI的时候发现
- 目录JS 函数的 call、apply 及 bind 方法一、call() 方法1、call()方法的模拟实现二、apply() 方法1、a
- 基本简介dot函数为numpy库下的一个函数,主要用于矩阵的乘法运算,其中包括:向量内积、多维矩阵乘法和矩阵与向量的乘法。1. 向量内积向量
- 在Python中可以存储很大的值,如下面的Python示例程序:x = 1000000000000000000000000000000000