vue 登录滑动验证实现代码


Posted in Javascript onAugust 24, 2018

在没给大家讲解实现代码之前,先给大家分享效果图:

vue 登录滑动验证实现代码

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 登录滑动验证实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 按回车键相应按钮提交事件
Nov 02 Javascript
javascript 词法作用域和闭包分析说明
Aug 12 Javascript
Js-$.extend扩展方法使方法参数更灵活
Jan 15 Javascript
用unescape反编码得出汉字示例
Apr 24 Javascript
js实现在同一窗口浏览图片
Sep 17 Javascript
javascript文本模板用法实例
Jul 31 Javascript
JS获取当前脚本文件的绝对路径
Mar 02 Javascript
js中的闭包学习心得
Feb 06 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
Mar 06 Javascript
配置eslint规范项目代码风格
Mar 11 Javascript
vue如何截取字符串
May 06 Javascript
JS实现横向跑马灯效果代码
Apr 20 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
Aug 24 #Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
Aug 24 #Javascript
element-ui表格数据转换的示例代码
Aug 24 #Javascript
element-ui表格列金额显示两位小数的方法
Aug 24 #Javascript
vuejs 动态添加input框的实例讲解
Aug 24 #Javascript
vue.js input框之间赋值方法
Aug 24 #Javascript
react build 后打包发布总结
Aug 24 #Javascript
You might like
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
PHP之header函数详解
2021/03/02 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python模块restful使用方法实例
2013/12/10 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
python机器学习之神经网络(二)
2017/12/20 Python
Python中装饰器学习总结
2018/02/10 Python
在双python下设置python3为默认的方法
2018/10/31 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
详解Python 最短匹配模式
2020/07/29 Python
前处理组长岗位职责
2014/03/01 职场文书
软件测试专业推荐信
2014/09/18 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
银行转正自我鉴定
2014/09/29 职场文书
交通事故代理词范文
2015/05/23 职场文书
用JS创建一个录屏功能
2021/11/11 Javascript