轻松愉悦的验证方式:实现图片旋转验证功能

简介: 轻松愉悦的验证方式:实现图片旋转验证功能

说在前面

在当今互联网时代,随着技术的不断进步,传统的验证码验证方式已经无法满足对安全性和用户体验的需求。为了应对日益狡猾的机器人和恶意攻击,许多网站和应用程序开始引入图形验证码,其中一种备受欢迎的形式就是图片旋转验证功能。这项技术通过利用用户交互、视觉识别和动态效果,为用户提供了一种全新、有趣且高效的验证方式。本文将深入探讨如何实现这一引人注目的图片旋转验证功能,让您轻松保护网站安全,同时提升用户体验。

效果展示

1、搭建页面元素(图片+滚动条)

<body>
  <div>
    <img  src="https://c-ssl.duitang.com/uploads/item/201506/24/20150624231809_CQvds.thumb.1000_0.jpeg" />
      <div class="scroll" id="scroll">
      <div class="bar" id="bar">
     
      </div>
      <div class="mask" id="mask"></div>
      </div>
      <span></span>
  </div>
</body>

2、给它们加一点点样式

<style>
    *{
      margin: 0;
      padding: 0;
    }
  body{
    width: 100%;
    height: 100%;
    text-align: center;
  }
    .scroll{
      margin:100px auto;
      width: 500px;
      height: 5px;
      background: #ccc;
      position: relative;
    }
    .bar{
      width: 20px;
      height: 20px;
      background: #369;
      position: absolute;
      top: -7px;
      left: 0;
      cursor: pointer;
    border-radius: 50% 50%;
    }
    .mask{
      position: absolute;
      left: 0;
      top: 0;
      background: #369;
      width: 0;
      height: 5px;
    }
  span{
    font-size: large;
    display: none;
  }
  img{
    margin-top: 100px;
    width: 200px;
    height: 200px;
    overflow: hidden;
    object-fit: cover;
    border-radius: 50% 50%;
    /* transform: rotate(30deg); */
  }
  button{
    width: 80px;
    height: 40px;
  }
</style>

3、关键的js代码

<script>  
    var scroll = document.getElementById('scroll');
    var bar = document.getElementById('bar');
    var mask = document.getElementById('mask');
    var ptxt = document.getElementsByTagName('span')[0];
    var img = document.getElementsByTagName('img')[0];
    var barleft = 0;
  var angle = Math.random()*360;
    bar.onmousedown = function(event){
      var event = event || window.event;
      var leftVal = event.clientX - this.offsetLeft;
      var that = this;
       // 拖动一定写到 down 里面才可以
      document.onmousemove = function(event){
        var event = event || window.event;
        barleft = event.clientX - leftVal;     
        if(barleft < 0)
          barleft = 0;
        else if(barleft > scroll.offsetWidth - bar.offsetWidth)
          barleft = scroll.offsetWidth - bar.offsetWidth;
        mask.style.width = barleft +'px' ;
        that.style.left = barleft + "px";
    newangle = angle;
    newangle = parseInt(barleft/(scroll.offsetWidth-bar.offsetWidth) * 360) + newangle;
    newangle %= 360;
    img.style.transform = 'rotate('+newangle+'deg)';
    console.log(newangle);
        //防止选择内容--当拖动鼠标过快时候,弹起鼠标,bar也会移动,修复bug
        window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
      }
    document.onmouseup = function(){
          document.onmousemove = null; //弹起鼠标不做任何操作
          let nowangle = img.style.transform;
          console.log(nowangle);
          nowangle = nowangle.substr(7,6);
          //判定成功的角度误差,可以根据自己的需求来修改
          if(nowangle > 350 || nowangle < 10){
          alert("验证通过");
          }else{
          alert("验证失败!!!!!!!!!!!!!!!!");
          }
          window.location.reload();
        }
    }
    
  function check(){
    let nowangle = img.style.transform;
    console.log(nowangle);
    nowangle = nowangle.substr(7,6);
    if(nowangle > 350 || nowangle < 10){
      alert("验证通过");
    }else{
      alert("验证失败");
    }
  }
  //随机图片初始旋转角度
  while(angle < 20 || angle > 350){
    angle = Math.random()*360;
  }
  img.style.transform = 'rotate('+angle+'deg)';
  </script>

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
7月前
|
机器学习/深度学习 并行计算 小程序
DeepSeek-V3.2-Exp 发布,训练推理提效,API 同步降价
今天,我们正式发布 DeepSeek-V3.2-Exp 模型,这是一个实验性( Experimental)的版本。作为迈向新一代架构的中间步骤,V3.2-Exp 在 V3.1-Terminus 的基础上引入了 DeepSeek Sparse Attention(一种稀疏注意力机制…
853 0
DeepSeek-V3.2-Exp 发布,训练推理提效,API 同步降价
|
关系型数据库 MySQL Linux
centos7安装mysql5.6
centos7安装mysql5.6
|
人工智能 开发框架 算法
Qwen-Agent:阿里通义开源 AI Agent 应用开发框架,支持构建多智能体,具备自动记忆上下文等能力
Qwen-Agent 是阿里通义开源的一个基于 Qwen 模型的 Agent 应用开发框架,支持指令遵循、工具使用、规划和记忆能力,适用于构建复杂的智能代理应用。
10483 13
Qwen-Agent:阿里通义开源 AI Agent 应用开发框架,支持构建多智能体,具备自动记忆上下文等能力
|
人工智能 数据可视化 Java
打造动态数据可视化:JavaScript与AI的完美结合
在快速发展的技术世界中,Java作为广泛应用的编程语言,持续占据重要地位。本文探讨如何将AI技术,如DeepSeek,融入Java高级应用开发,实现智能代码生成、优化与自动化测试,提升开发效率和代码质量。AI通过分析大量代码库,自动生成高质量代码片段,减少重复劳动,并提出优化建议,帮助开发者编写更高效、安全的代码。未来,AI将进一步推动Java开发智能化,降低开发门槛,助力创新。
|
SQL 存储 关系型数据库
如何查看数据库中的表及其在SQL中的实现
引言:在数据库管理和数据分析的过程中,我们经常需要查看数据库中的表以获取相关信息。表是数据库中存储数据的主要结构,通过查看这些表,我们可以了解数据库的结构和内容。本文将详细介绍如何使用SQL查询来查看数据库中的表,包括各种相关操作和命令的使用。一、了解数据库和表的基本概念在讨论如何查看数据库中的表之
996 2
|
数据采集 人工智能 算法
你要牢记的四个常用AI提示词框架:ICIO、CRISPE、BROKE、RASCEF,有助于获取更加稳定和高质量的内容
你要牢记的四个常用AI提示词框架:ICIO、CRISPE、BROKE、RASCEF,有助于获取更加稳定和高质量的内容
|
Web App开发
【视频点播】阿里云视频点播如何获取视频播放的URL
展示如何使用阿里云视频点播服务获取播放地址.
35588 0
【视频点播】阿里云视频点播如何获取视频播放的URL
|
存储 关系型数据库 MySQL
Python导入Excel数据到MySQL数据库
Python导入Excel数据到MySQL数据库
1195 1
|
SQL Java 关系型数据库
Hibernate - 对象关系映射文件(*.hbm.xml)详解
Hibernate - 对象关系映射文件(*.hbm.xml)详解
643 1
|
Web App开发 JavaScript 安全
Cordova页面加载外网图片失败,Refused to load the image
原文:Cordova页面加载外网图片失败,Refused to load the image 1.使用Cordova页面加载外网图片失败,抛出异常 Refused to load the image 'http://xxx.
4786 0