图片旋转验证原来这么简单

简介: 图片旋转验证原来这么简单

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>
目录
相关文章
|
前端开发 算法 安全
轻松愉悦的验证方式:实现图片旋转验证功能
轻松愉悦的验证方式:实现图片旋转验证功能
409 0
|
网络协议 安全 网络安全
Windows下配置OpenSSL(傻瓜式教程,一看就会)
Windows下配置OpenSSL(傻瓜式教程,一看就会)
3424 0
|
Swift iOS开发 开发者
iOS 应用上架流程详解
iOS 应用上架流程详解
|
存储 编译器 C++
关于“VS2022无法打开头文件<graphics.h>” 以及编译时 “没有与参数列表匹配的重载函数实例”俩个问题的解决思路
关于“VS2022无法打开头文件<graphics.h>” 以及编译时 “没有与参数列表匹配的重载函数实例”俩个问题的解决思路
4317 0
|
3月前
|
JavaScript 开发工具 虚拟化
配置DevEco Studio的开发环境时,需要注意什么?
配置DevEco Studio的开发环境时,需要注意什么?
|
缓存 关系型数据库 MySQL
MySQL数据库优化:提升性能和扩展性的关键技巧
MySQL数据库优化:提升性能和扩展性的关键技巧
365 2
|
存储 SQL JSON
一些MaxCompute日常优化案例分享
MaxCompute优化是一个多样而又重要的过程,优化过程需要能够深入理解ODPS的工作原理和内部机制,本文总结了以下几个日常优化案例,最终优化手段可能非常简单,但其中的分析过程较为重要,希望对大家有所启发。
|
Web App开发 JSON 中间件
express学习 - (3)express 路由
express学习 - (3)express 路由
341 1
|
缓存 NoSQL Java
Guava Cache 异步刷新技巧,你值得拥有!
Guava Cache是一款非常优秀的本地缓存框架,提供非常简洁易用的 API 供开发者使用。 这篇文章,我们聊聊如何使用 Guava Cache **异步刷新技巧**带飞系统性能 。
Guava Cache 异步刷新技巧,你值得拥有!
|
算法 Java 数据安全/隐私保护
App逆向百例|06|某App mfsig分析
App逆向百例|06|某App mfsig分析
1394 0