vue 滑动验证码,vue 滑块验证

  vue 滑动验证码,vue 滑块验证

  这篇文章主要为大家详细介绍了某视频剪辑软件实现图片滑动验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  本文实例为大家分享了某视频剪辑软件实现图片滑动验证的具体代码,供大家参考,具体内容如下

  效果图:

  1、引用自定义组件

  从导入img0./资产/img。jpg ;

  从导入img1./assets/img 1。jpg ;

  从导入img2./assets/img 2。jpg ;

  从导入img3./assets/img 3。jpg ;

  从导入img4./assets/im G4。jpg ;

  从导入img5./assets/im G5。jpg ;

  从导入实体./components/PHP toslide

  组件:{

  索力得

  },

  2、使用

  solid ref= slide block @ success= on success @ again= on again @ fulfilled= on fulfilled

  @ fail= on fail @ refresh= on refresh :slider-text= text :imgs= imgs :accuracy= accuracy

  /solide

  data () {

  返回{

  消息: ,

  文本: 向右滑动-,

  毕业生

  img0,

  img1,

  img2,

  img3,

  img4,

  img5,

  ],

  loginBtn: false,

  精度:1,//精确度小,可允许的误差范围小;为一时,则表示滑块要与凹槽完全重叠,才能验证成功。默认值为5

  formLabelAlign: {},

  }

  }

  方法:{

  成功次数{

  //console.log(验证通过);

  this.loginBtn=true

  this.msg=`登录成功,耗时${(次/1000)。到固定的年代`;

  },

  onFail () {

  //console.log(验证不通过);

  this.msg=

  },

  onRefresh () {

  //console.log(点击了刷新小图标);

  this.msg=

  },

  未完成(){

  //console.log(刷新成功啦!);

  },

  onAgain () {

  //console.log(检测到非人为操作的哦!);

  this.msg=再试一次;

  //刷新

  这个。句柄click();

  },

  handleClick () {

  这个参考文献。滑块。reset();

  this.msg=

  },

  }

  3、自定义组件文件

  模板

  div class= slide-verify :style= { width:w px } id= slide verify onselectstart=返回false

  !-图片加载遮蔽罩-

  div:class= { slider-verify-loading :load block } /div

  画布:width=“w”:height=“h”ref=“canvas”/canvas

  div v-if= show @ click= refresh class= slide-verify-refresh-icon /div

  画布:width= w :height= h ref= block class= slide-verify-block /画布

  !集装箱

   div class= slide-verify-slider :class= { container-active :容器活动, container-success :容器成功, container-fail: containerFail}

  div class= slide-verify-slider-mask :style= { width:slider mask width }

  !-滑块-

  div @ mousedown= slider down @ touch start= touchStartEvent @ touch move= touchMoveEvent @ touch end= touchEndEvent class= slide-verify-slider-mask-item :style= { left:slider left }

  div class= slide-verify-slider-mask-item-icon /div

  /div

  /div

  span class= slide-verify-slider-text“{ slider text } }/span

  /div

  /div

  /模板

  脚本

  常数PI=数学;

  函数sum (x,y) {

  返回x y

  }

  功能方块(十){

  返回x * x

  }

  导出默认值{

  名称:“SlideVerify”,

  道具:{

  //块长度

  我:{

  类型:数量,

  默认值:30,

  },

  //块半径

  r: {

  类型:数量,

  默认值:6,

  },

  //画布宽度

  女:{

  类型:数量,

  默认值:270,

  },

  //画布高度

  h: {

  类型:数量,

  默认值:90,

  },

  sliderText: {

  类型:字符串,

  默认:"幻灯片填充右侧",

  },

  准确度:{

  类型:数量,

  默认值:5,//若为-1 则不进行机器判断

  },

  显示:{

  类型:布尔型,

  默认值:真的,

  },

  imgs: {

  类型:数组,

  默认值:()=[],

  },

  },

  data () {

  返回{

  containerActive: false,//容器活动类

  容器成功:false,//容器成功类

  containerFail: false,//容器失败类

  canvasCtx: null,

  blockCtx: null,

  块:空,

  块x:未定义,//容器随机位置

  区块y:未定义,

  L: this.l this.r * 2 3,//块实长

  img:未定义,

  originX:未定义,

  来源:未定义

  isMouseDown:假,

  线索:[],

  sliderLeft: 0,//块右偏移

  slidermaskwidth:0,//掩码宽度,

  成功:假,//错误修复修复了验证成功后还能滑动

  loadBlock: true,//特性图片加载提示,防止图片没加载完就开始验证

  时间戳:空,

  }

  },

  已安装(){

  this.init()

  },

  方法:{

  init () {

  this.initDom()

  this.initImg()

  this.bindEvents()

  },

  initDom () {

  这个. block=这个.$ refs.block

  this.canvasCtx=this .$refs.canvas.getContext(2d )

  这个。阻止CTX=这个。阻止。获取上下文(“2d”)

  },

  initmg(){

  const img=this.createImg(()={

  //图片加载完关闭遮蔽罩

  this.loadBlock=false

  this.drawBlock()

  this.canvasCtx.drawImage(img,0,0,this.w,this.h)

  this.blockCtx.drawImage(img,0,0,this.w,this.h)

  让{

  块x: x

  block_y: y,

  r,

  L

  }=这个

  让y=y - r * 2 - 1

  设ImageData=this。阻止CTX。getimagedata(x,_y,L,L);

  这个。阻止。宽度=L;

  这个。阻止CTX。putimagedata(ImageData,0,_y)

  });

  this.img=img

  },

  拉伸块(){

  这个。block _ x=这个。getrandomnumberbyrange(this .L 10,这个。w -(这个L 10))

  这个。block _ y=这个。getrandomnumberbyrange(10 this。r * 2,这个. h -(这个.L 10))

  this.draw(this.canvasCtx,this.block_x,this.block_y, fill )

  this.draw(this.blockCtx,this.block_x,this.block_y, clip )

  },

  绘制(ctx,x,y,操作){

  让{

  我,

  r

  }=这个;

  ctx.beginPath()

  ctx.moveTo(x,y)

  ctx.arc(x l/2,y-r ^ 2,r,0.72 * PI,2.26 * PI)

  ctx.lineTo(x l,y)

  ctx.arc(x l r - 2,y l/2,r,1.21 * PI,2.78 * PI)

  ctx.lineTo(x l,y l)

  ctx.lineTo(x,y l)

  ctx.arc(x r - 2,y l/2,r 0.4,2.76 * PI,1.24 * PI,true)

  ctx.lineTo(x,y)

  ctx.lineWidth=2

  ctx.fillStyle=rgba(255,255,255,0.7)

  ctx.strokeStyle=rgba(255,255,255,0.7)

  ctx.stroke()

  CTX[操作]()

  //错误修复修复了火狐和工程师协会显示问题

  CTX。globalcompositeoperation= destination-over

  },

  创建(加载){

  const img=文档。createelement(“img”);

  img.crossOrigin=匿名

  img.onload=onload

  img.onerror=()={

  img。src=这个。getrandommg()

  }

  img。src=这个。getrandommg()

  返回图片

  },

  //随机生成图形文件名

  getrandommg(){

  //return require(./资产/img。jpg’)

  const len=this。imgs。长度;

  返回len 0?

  这个。imgs【这个。getrandomnumberbyrange(0,len)]:

  https://picsum.photos/300/150/?image=这个。getrandomnumberbyrange(0,1084);

  },

  getRandomNumberByRange (start,end) {

  返回数学。圆(数学。random()*(结束-开始)开始)

  },

  刷新(){

  this.reset()

  这个$emit(刷新)

  },

  sliderDown(事件){

  如果(this.success)返回;

  这个。originx=事件。clientx

  这个。originy=事件。客户关系;

  this.isMouseDown=true

  这个。时间戳=新日期();

  },

  touchStartEvent (e) {

  如果(this.success)返回;

  这个。originx=e .更改的触摸次数[0].pageX

  这个。originy=e .更改的触摸次数[0].佩吉;

  this.isMouseDown=true

  这个。时间戳=新日期();

  },

  bindEvents () {

  文档。addevent侦听器( mousemove ,(e)={

  如果(!this.isMouseDown)返回错误的

  const moveX=e . clientx-this。originx

  const moveY=e . clienty-thisoriginy

  if (moveX 0 moveX 38=this.w)返回错误的

  this.sliderLeft=moveX px

  设左挡=(这个。w-40-20)/(这个。w-40)* moveX;

  这个。阻止。风格。left=块左‘px’;

  this.containerActive=true//添加活动

  这个。滑块掩码宽度=moveX px

  这个。踪迹。推(moveY);

  });

  文档。addevent侦听器( mouseup ,(e)={

  如果(!this.isMouseDown)返回错误的

  this.isMouseDown=false

  if (e.clientX===this.originX)返回错误的

  this.containerActive=false//移除活动

  这个。时间戳=新日期()-这个。时间戳;

  常数{

  拼接,

  TuringTest测试测试

  }=这个。verify();

  如果(拼接){

  if (this.accuracy===-1) {

  this.containerSuccess=true

  成功=真

  这个$emit(成功,这个。时间戳);

  返回;

  }

  if (TuringTest) {

  //成功

  this.containerSuccess=true

  成功=真

  这个emit(success ,this.timestamp)

  }否则{

  this.containerFail=true

  这个$emit(再次)

  }

  }否则{

  this.containerFail=true

  这个发出(失败)

  setTimeout(()={

  this.reset()

  }, 1000)

  }

  })

  },

  touchMoveEvent (e) {

  如果(!this.isMouseDown)返回错误的

  const moveX=e.changedTouches[0].pageX-这个。originx

  const moveY=e.changedTouches[0].佩吉-这个。originy

  if (moveX 0 moveX 38=this.w)返回错误的

  this.sliderLeft=moveX px

  设左挡=(这个。w-40-20)/(这个。w-40)* moveX;

  这个。阻止。风格。left=块左‘px’;

  this.containerActive=true

  这个。滑块掩码宽度=moveX px

  这个。踪迹。推(moveY);

  },

  触摸事件(e) {

  如果(!this.isMouseDown)返回错误的

  this.isMouseDown=false

  if (e.changedTouches[0]).pageX===this.originX)返回错误的

  this.containerActive=false

  这个。时间戳=新日期()-这个。时间戳;

  常数{

  拼接,

  TuringTest测试测试

  }=这个。verify();

  如果(拼接){

  if (this.accuracy===-1) {

  this.containerSuccess=true

  成功=真

  这个$emit(成功,这个。时间戳);

  返回;

  }

  if (TuringTest) {

  //成功

  this.containerSuccess=true

  成功=真

  这个emit(success ,this.timestamp)

  }否则{

  this.containerFail=true

  这个$emit(再次)

  }

  }否则{

  this.containerFail=true

  这个发出(失败)

  setTimeout(()={

  this.reset()

  }, 1000)

  }

  },

  verify () {

  const arr=this.trail //拖动y移动距离

  常数平均值=arr。减少(总和)/减少长度//平均值

  常数偏差=arr。map(x=x平均值)//偏差数组

  常数标准偏差=数学。偏差。地图(正方形).减少(总和)/数组长度)//标准差

  const left=parse int(this。阻止。风格。左)

  常数精度=this.accuracy=1?1:这个。精度10?10:本。精确度;

  返回{

  拼接:math . ABS(left-this . block _ x)=1精度,

  转向测试:一般!==stddev,//equal=非操作人员

  }

  },

  重置(){

  this.success=false

  this.containerActive=false

  this.containerSuccess=false

  this.containerFail=false

  这个。向左滑动=0;

  这个。阻止。风格。左=0;

  这个。滑块遮罩宽度=0;

  //画布

  让{

  w,

  h

  }=这个;

  this.canvasCtx.clearRect(0,0,w,h)

  this.blockCtx.clearRect(0,0,w,h)

  这个。块宽度=w

  //生成图片

  这个。img。src=这个。getrandommg();

  这个$emit(已履行)

  },

  }

  }

  /脚本

  样式范围。幻灯片-验证{

  位置:相对;

  }

  /* 图片加载样式*/。滑块-验证-加载{

  位置:绝对;

  top:0;

  右:0;

  左:0;

  底部:0;

  背景:rgba(255,255,255,0.9);

  z指数:999;

  动画:加载1.5秒无限;

  }

  @关键帧载入{

  0% {

  不透明度:0.7;

  }

  100% {

  不透明度:9;

  }

  }。幻灯片-验证-阻止{

  位置:绝对;

  左:0;

  top:0;

  }。幻灯片-验证-刷新-图标{

  位置:绝对;

  右:0;

  top:0;

  宽度:34px

  高度:34px

  光标:指针;

  背景:url(./资产/icon _ light。png’)0-437 px;

  背景-尺寸:34px 471px

  }。滑动-验证-滑动条{

  位置:相对;

  文本对齐:居中;

  宽度:100%;

  高度:40px

  行高:40px

  /*边距-顶部:15px*/

  背景:# f7f 9 fa

  颜色:# 45494c

  边框:1px实心# e4e 7 EB

  }。幻灯片-验证-滑块-遮罩{

  位置:绝对;

  左:0;

  top:0;

  高度:40px

  边框:0实心# 1991fa

  背景:# D1 e9 Fe;

  }。幻灯片-验证-滑块-遮罩-项目{

  位置:绝对;

  top:0;

  左:0;

  宽度:40px

  高度:40px

  背景:# fff

  箱形阴影:0 0 3px rgba(0,0,0,0.3);

  光标:指针;

  过渡:背景0.2秒线性;

  }。滑动-验证-滑块-遮罩-项目:悬停{

  背景:# 1991fa

  }。滑动-验证-滑块-遮罩-项目:悬停。幻灯片-验证-滑块-遮罩-项目-图标{

  背景-位置:0-13px;

  }。幻灯片-验证-滑块-遮罩-项目-图标{

  位置:绝对;

  top:15px;

  左:13px

  宽度:14px

  高度:12px

  背景:url(./资产/icon _ light。png’)0-26px;

  背景-尺寸:34px 471px

  }。集装箱-活动。幻灯片-验证-滑块-遮罩-项目{

  高度:38px

  top:-1px;

  边框:1px纯色# 1991fa

  }。集装箱-活动。幻灯片-验证-滑块-遮罩{

  高度:38px

  边框宽度:1px

  }。集装箱-成功。幻灯片-验证-滑块-遮罩-项目{

  高度:38px

  top:-1px;

  边框:1px纯色# 52ccba

  背景色:#52ccba!重要;

  }。集装箱-成功。幻灯片-验证-滑块-遮罩{

  高度:38px

  边框:1px纯色# 52ccba

  背景色:# d2f 4 ef

  }。集装箱-成功。幻灯片-验证-滑块-遮罩-项目-图标{

  背景-位置:0 0!重要;

  }。容器-失败。幻灯片-验证-滑块-遮罩-项目{

  高度:38px

  top:-1px;

  边框:1px纯色# f57a7a

  背景色:#f57a7a!重要;

  }。容器-失败。幻灯片-验证-滑块-遮罩{

  高度:38px

  边框:1px纯色# f57a7a

  背景色:# fce1e1

  }。容器-失败。幻灯片-验证-滑块-遮罩-项目-图标{

  top:14px;

  背景-位置:0 -82px!重要;

  }。集装箱-活动。幻灯片-验证-滑块-文本,集装箱-成功。幻灯片-验证-滑块-文本,容器-失败。幻灯片-验证-滑块-文本{

  显示:无;

  }

  /风格

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • qq短信验证码发送失败怎么回事,qq验证码失败是怎么回事
  • ,,使用阿里大于(大鱼)平台进行发送手机验证码的流程
  • ,,SpringSceurity实现短信验证码登陆
  • android读取短信验证码,
  • android读取短信验证码,,Android使用MobSDK短信验证
  • android自动获取短信验证码功能在哪,安卓自动获取短信验证码
  • android自动获取短信验证码功能在哪,android自动获取短信验证码功能失效,Android自动获取短信验证码功能
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现,Android实现短信验证码自动填写功能
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码,Android如何通过手机自动获取短信验证码
  • ,,python网络爬虫实现发送短信验证码的方法
  • ,,Python实现滑块拼图验证码详解
  • ,,python3 破解 geetest(极验)的滑块验证码功能
  • 发验证码不在桌面显示,验证码能收到桌面上不显示怎么回事
  • 留言与评论(共有 条评论)
       
    验证码: