[JAVA] Java实现滑动验证码(前端部分)

1727 0
Honkers 2022-11-9 09:11:47 | 显示全部楼层 |阅读模式
目录

    实现思路实现代码实现结果


实现思路

1、请求后端获得背景图、滑块、x、y、误差范围bound
2、将滑块设置到对应的位置:top = y
3、添加鼠标滑动事件

实现代码

后端请求(Controller)
SliderVerifyController
  1. /**
  2. * @author: Yang
  3. * @create: 2022-10-25
  4. * @Description: 滑动验证
  5. */
  6. @RestController
  7. @RequestMapping("/sliderVerify")
  8. public class SliderVerifyController {
  9.     @Resource
  10.     private SliderVerifyService sliderVerifyService;
  11.     @GetMapping
  12.     public ResponseResult generateSliderVerify() {
  13.         return sliderVerifyService.generateSliderVerify();
  14.     }
  15. }
复制代码
SliderVerifyServiceImpl
  1. /**
  2. * @author: Yang
  3. * @create: 2022-10-25
  4. * @Description:
  5. */
  6. @Service
  7. public class SliderVerifyServiceImpl implements SliderVerifyService {
  8.     @Value("${my.staticPath}")
  9.     private String path;
  10.     @Override
  11.     public ResponseResult generateSliderVerify() {
  12.         int index = new Random().nextInt(5) + 1;
  13.         ImageSlideVerify slideVerify = ImageSlideVerifyUtil.cutting(
  14.                 new File(System.getProperty("user.dir") + "/web_component/src/main/resources/static/sliderVerify/" + index + ".png"));
  15.         return new ResponseResult<>(200, slideVerify);
  16.     }
  17. }
复制代码
HTML代码
  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4.         <meta charset="UTF-8">
  5.         <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.         <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.         <title>滑动验证码</title>
  8. </head>
  9. <body>
  10.         <div id="box">
  11.                 <div id="content">
  12.                         <img id="bg" src="bg.png" />
  13.                         <img id="block" src="b.png"/>
  14.                 </div>
  15.                 <!-- 滑块 -->
  16.                 <div id="slider">
  17.                         <div id="slider-block">
  18.                         </div>
  19.                 </div>
  20.         </div>
  21. </body>
  22. <script>
  23.         let blockImg = document.querySelector("#block");// 滑块
  24.         let bgImg = document.querySelector("#bg");// 背景
  25.         let sliderBlock = document.querySelector("#slider-block");// 滑动栏的滑块
  26.         function sliderVerify(callback){
  27.                 // 获取验证码信息
  28.                 const xhr = new XMLHttpRequest();
  29.                 xhr.open("get", "http://localhost:8080/sliderVerify", true);
  30.                 xhr.send();
  31.                 xhr.onreadystatechange = function(){
  32.                         if(this.readyState == 4 && this.status == 200){
  33.                                 let data = JSON.parse(this.response).data;
  34.                                 blockImg.src = data.blockImg;
  35.                                 bgImg.src = data.bgImg;
  36.                                 blockImg.style.top = data.y + 80 + "px";
  37.                                 callback && callback(data); // 回调函数
  38.                         }
  39.                 }
  40.         }
  41.         // 执行
  42.         sliderVerify(function (data) {
  43.                 // 添加鼠标事件
  44.                 sliderBlock.addEventListener("mousedown", (e1) => {
  45.                         const x = e1.x;
  46.                         window.onmousemove = function(e) {
  47.                                 let left = e.x - x;
  48.                                 // 设置边界,因为我的图片大小都是固定425,所以我直接固定
  49.                                 if(e1.target.offsetLeft >= 425){
  50.                                         sliderBlock.style.left = 425 + "px";
  51.                                         blockImg.style.left = 425 - 20 + "px";
  52.                                         return;
  53.                                 }
  54.                                 // 移动
  55.                                 sliderBlock.style.left = left + "px";
  56.                                 blockImg.style.left = left - 20 + "px";
  57.                         }
  58.                         // 鼠标释放
  59.                         window.onmouseup = function(e){
  60.                                 // 获取滑动到的位置
  61.                                 let left = sliderBlock.style.left.split("px")[0];
  62.                                 // 减去80内边距并转成数字
  63.                                 left = Number(left) - 80;
  64.                                 // 清空鼠标滑动事件
  65.                                 window.onmousemove = null;
  66.                                 // 回到初始位置
  67.                                 sliderBlock.style.left = 0 + "px";
  68.                                 blockImg.style.left = 0 - 20 + "px";
  69.                                 // 判断是否在范围内
  70.                                 if(left >= data.x - data.bound && left <= data.x + data.bound){
  71.                                         alert("验证成功");
  72.                                 } else {
  73.                                         alert("验证错误")
  74.                                         window.location.reload()
  75.                                 }
  76.                         }
  77.                 })
  78.         });
  79. </script>
  80. <style>
  81.         #content{
  82.                 user-select: none;
  83.                 position: relative;
  84.                 padding: 80px;
  85.                 padding-bottom: 0;
  86.         }
  87.         #block{
  88.                 position: absolute;
  89.                 /* top: 169px; */
  90.                 left: -20px;
  91.         }
  92.         #slider{
  93.                 position: relative;
  94.                 display: flex;
  95.                 align-items: center;
  96.                 box-sizing: border-box;
  97.                 width: 505px;
  98.                 height: 50px;
  99.                 padding: 0 2px;
  100.                 border: 3px groove ;
  101.         }
  102.         #slider-block{
  103.                 position: relative;
  104.                 width: 70px;
  105.                 height: 40px;
  106.                 background-color: antiquewhite;
  107.         }
  108. </style>
  109. </html>
复制代码
实现结果



Java后端代码
到此这篇关于Java实现滑动验证码(前端部分)的文章就介绍到这了,更多相关Java滑动验证码内容请搜索中国红客联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持中国红客联盟!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4004
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行