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 相关文章推荐
js中获取事件对象的方法小结
Mar 13 Javascript
JS图片根据鼠标滚动延时加载的实例代码
Jul 13 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
Jun 07 Javascript
JS对象是否拥有某属性如何判断
Feb 03 Javascript
ES5学习教程之Array对象
Apr 01 Javascript
提高Node.js性能的应用技巧分享
Aug 10 Javascript
React.Js添加与删除onScroll事件的方法详解
Nov 03 Javascript
vue.js自定义组件directives的实例代码
Nov 09 Javascript
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 Javascript
对layui中的onevent 和event的使用详解
Sep 06 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 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
PHP 面向对象实现代码
2009/11/11 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
vue构建动态表单的方法示例
2018/09/22 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
python发送HTTP请求的方法小结
2015/07/08 Python
python距离测量的方法
2018/03/06 Python
django_orm查询性能优化方法
2018/08/20 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Python实战购物车项目的实现参考
2019/02/20 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
学校春季防火方案
2014/06/08 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
大学生实习证明
2015/06/16 职场文书
九年级历史教学反思
2016/02/19 职场文书
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android
分享几个简单MySQL优化小妙招
2022/03/31 MySQL