首先看这篇文章
基本前端代码 直接照搬这位老兄的 这篇文章里说的 captha.vue 组件 作者在github上是改成了 Newcap.vue 组件
login.vue用的是
然后 我们采用的是前后端结合的形式
如果后端返回的那张能滑动的小图 没有轮廓 也可能不是很明显 因此 我找到了另一篇文章 www.csdn.net/tags/MtTaMg… 精华内容第一篇文章 这篇文章里说是使用了开源的一个针对canvas上的图片画轮廓的代码 找到 使用调用MarchingSquaresJS的方法 那部分代码 我根据第一篇文章的验证码组件调整了下代码
function drawOutline(){
let pathPoints = MarchingSquares.getBlobOutlinePoints(this.block);
let points = [];
for(let i = 0;i < pathPoints.length;i += 2){
points.push({
x:pathPoints[i],
y:pathPoints[i + 1],
})
}
this.blockCtx.beginPath();
this.blockCtx.lineWidth = 2;
this.blockCtx.strokeStyle = '#00CCFF';
this.blockCtx.moveTo(points[0].x, points[0].y);
for (let i = 1; i < points.length; i += 1) {
let point = points[i];
this.blockCtx.lineTo(point.x,point.y);
}
this.blockCtx.closePath();
this.blockCtx.stroke();
this.blockCtx.drawImage(this.block,0,0);
}
上面的代码里引用了 MarchingSquares里的getBlobOutlinePoints方法 然后是在这篇文章里打开了作者提供的github上画轮廓的开源代码
opt的那个画的轮廓不太对, 所以我选择的是上图的js文件。在最后加上 export default MarchingSquares 导出函数,然后直接在你的项目里相应的代码处import
github.com/shengbid/vu… 这个是验证码组件 找到以下图片位置
把画轮廓部分的代码插入到以上图片代码位置下面
最后的样子
我展示的是后端返回给我 大图跟小图的样子 以及我也修改了一些代码,样式
整个流程 就跟第一篇文章结尾说的思路差不多
1.小拼图的初始位置y,小拼图的图片,背景图片是从后台获取
2.点击登录按钮 ,调取后台接口获取位置,图片地址 是base64的
3.图片滑动之后把滑动的距离left传过来,调取后台接口验证是否滑动成功
4.如果滑动不成功,自动刷新图片,重置拼图,滑动成功
5.滑动成功,就调用登录接口 且账号密码正确就直接跳转到首页