js登录滑动验证的实现(不滑动无法登陆)

yizhihongxing

下面是详细的“js登录滑动验证的实现(不滑动无法登陆)”攻略,包含以下几部分:

  1. 实现思路
  2. 代码示例1:基于jQuery的实现
  3. 代码示例2:基于原生JS的实现

实现思路

滑动验证的实现思路,大概可以分为以下几个步骤:

  1. 在页面中添加一个滑块和一个滑块背景;
  2. 通过JS监听滑块的拖动事件,并根据滑块的位置计算出滑块背景的“滑过”的距离;
  3. 根据计算得到的距离,判断滑块是否已经滑到了规定的位置(例如,滑块需要滑到背景的最右侧才算通过验证);
  4. 如果滑块已经滑到了规定位置,则允许用户进行登陆操作;否则,提示用户滑动滑块以通过验证。

在具体实现过程中,可能需要注意一些细节问题,例如处理滑块的边界情况、处理滑块的复位问题等。

代码示例1:基于jQuery的实现

下面是一个基于jQuery的滑动验证示例:

HTML代码:

<div id="slider">
  <div class="slider-bg"></div>
  <div class="slider-handler"></div>
</div>

CSS代码:

#slider {
  position: relative;
  width: 300px;
  height: 40px;
  border: 1px solid #ccc;
  border-radius: 20px;
  overflow: hidden;
}

#slider .slider-bg {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: #eee;
}

#slider .slider-handler {
  position: absolute;
  top: 0;
  left: 0;
  width: 40px;
  height: 40px;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 20px;
  cursor: pointer;
}

JS代码:

$(function() {
  var slider = $('#slider');
  var handler = slider.find('.slider-handler');
  var bg = slider.find('.slider-bg');
  var success = false;
  var distance = 0;

  handler.on('mousedown', function(evt) {
    evt.preventDefault();
    var startX = evt.clientX;
    var startY = evt.clientY;

    $(document).on('mousemove.slider', function(evt) {
      var offsetX = evt.clientX - startX;
      var offsetY = evt.clientY - startY;
      var position = handler.position();
      var left = position.left + offsetX;

      if (left < 0) {
        left = 0;
      } else if (left > slider.width() - handler.width()) {
        left = slider.width() - handler.width();
      }

      handler.css('left', left);
      bg.css('background-position', -left + 'px 0');

      distance = left / (slider.width() - handler.width()) * 100;
    });

    $(document).on('mouseup.slider', function(evt) {
      $(document).off('mousemove.slider');
      $(document).off('mouseup.slider');

      if (distance >= 100) {
        success = true;
        handler.css('left', slider.width() - handler.width());
        bg.css('background-position', '-' + (slider.width() - handler.width()) + 'px 0');
        slider.addClass('success');
      } else {
        handler.animate({ left: 0 }, 200);
        bg.animate({ backgroundPosition: '0 0' }, 200);
      }
    });
  });

  $('#submit').on('click', function(evt) {
    if (success) {
      alert('登陆成功!');
    } else {
      alert('请先通过滑动验证!');
    }
  });
});

注意:本示例依赖于jQuery库,需要引入jQuery才能正常工作。另外,示例中用到的CSS代码中包含了一些基本的样式定义,可以根据实际需求进行修改。

代码示例2:基于原生JS的实现

下面是一个基于原生JS的滑动验证示例:

HTML代码:

<div id="slider">
  <div class="slider-bg"></div>
  <div class="slider-handler"></div>
</div>

CSS代码:

#slider {
  position: relative;
  width: 300px;
  height: 40px;
  border: 1px solid #ccc;
  border-radius: 20px;
  overflow: hidden;
}

#slider .slider-bg {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: #eee;
}

#slider .slider-handler {
  position: absolute;
  top: 0;
  left: 0;
  width: 40px;
  height: 40px;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 20px;
  cursor: pointer;
}

JS代码:

var slider = document.getElementById('slider');
var handler = slider.querySelector('.slider-handler');
var bg = slider.querySelector('.slider-bg');
var success = false;
var distance = 0;

handler.addEventListener('mousedown', function(evt) {
  evt.preventDefault();
  var startX = evt.clientX;
  var startY = evt.clientY;

  document.addEventListener('mousemove', onMousemove);
  document.addEventListener('mouseup', onMouseup);

  function onMousemove(evt) {
    var offsetX = evt.clientX - startX;
    var offsetY = evt.clientY - startY;
    var position = getComputedStyle(handler).getPropertyValue('left').replace('px', '');
    var left = parseInt(position) + offsetX;

    if (left < 0) {
      left = 0;
    } else if (left > slider.offsetWidth - handler.offsetWidth) {
      left = slider.offsetWidth - handler.offsetWidth;
    }

    handler.style.left = left + 'px';
    bg.style.backgroundPosition = -left + 'px 0';

    distance = left / (slider.offsetWidth - handler.offsetWidth) * 100;
  }

  function onMouseup(evt) {
    document.removeEventListener('mousemove', onMousemove);
    document.removeEventListener('mouseup', onMouseup);

    if (distance >= 100) {
      success = true;
      handler.style.left = slider.offsetWidth - handler.offsetWidth + 'px';
      bg.style.backgroundPosition = '-' + (slider.offsetWidth - handler.offsetWidth) + 'px 0';
      slider.classList.add('success');
    } else {
      handler.animate({ left: 0 }, 200);
      bg.animate({ backgroundPosition: '0 0' }, 200);
    }
  }
});

document.getElementById('submit').addEventListener('click', function(evt) {
  if (success) {
    alert('登陆成功!');
  } else {
    alert('请先通过滑动验证!');
  }
});

注意:本示例是基于原生JS实现的,不需要任何第三方库,可以直接在页面中使用。另外,示例中用到的CSS代码中包含了一些基本的样式定义,可以根据实际需求进行修改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js登录滑动验证的实现(不滑动无法登陆) - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • jQuery实现批量判断表单中文本框非空的方法(2种方法)

    下面是详细的攻略: 一、背景说明 在Web开发中,经常需要对表单信息进行数据验证,比如判断某些必填项是否为空。本文将介绍两种使用jQuery实现批量判断表单中文本框非空的方法。 二、方法一 方法一利用each方法遍历表单中的文本框,然后判断每个文本框是否为空。示例代码如下: var flag = true; // 表单验证flag $(":text…

    JavaScript 2023年6月10日
    00
  • 详解JS 比较两个Json对象的值是否相等的实例

    下面是“详解JS 比较两个Json对象的值是否相等的实例”的完整攻略: 实现方法概述 在JavaScript中,我们可以通过遍历两个json对象的每一个属性,比较它们的值是否相等来判断它们是否相等。如果两个json对象的每一个属性都相等,那么它们就相等。下面,我们详细介绍如何实现这个功能。 步骤1:遍历两个json对象的所有属性。 步骤2:判断它们的值是否相…

    JavaScript 2023年5月27日
    00
  • 原生JavaScript实现拖动校验功能

    这里是原生JavaScript实现拖动校验功能的完整攻略。 1. 准备工作 在实现拖动校验功能之前,需要准备以下几项工作。 1.1 HTML结构 首先,需要在HTML中创建一个<ul>列表,每条列表项包含一个可拖动的元素,如下所示: <ul id="drag-items"> <li class="d…

    JavaScript 2023年6月10日
    00
  • 纯js实现动态时间显示

    以下是详细讲解“纯JS实现动态时间显示”的完整攻略。 一、准备工作 首先我们需要一个HTML页面,并在页面中添加一个用于显示时间的容器,例如: <!DOCTYPE html> <html> <head> <title>动态时间显示</title> </head> <body>…

    JavaScript 2023年5月27日
    00
  • 在vs2010中调试javascript代码方法

    在VS2010中调试JavaScript代码,需要注意以下几个步骤: 1. 确认浏览器设置 在VS2010中调试JavaScript代码,需要使用Internet Explorer浏览器。因此,需要先确认IE浏览器的设置是否正确。 打开IE浏览器,选择菜单栏-工具-Internet选项。 在Internet选项窗口中,点击“高级”选项卡。 确认“禁用脚本调试…

    JavaScript 2023年6月11日
    00
  • 如何在现代JavaScript中编写异步任务

    当我们需要执行一些长时间运行的任务时(如发送网络请求或读取文件),为了避免阻塞浏览器进程,我们可以使用异步编程模型。现代JavaScript提供了多个解决方案来处理异步任务,本篇文章将介绍其中几种常用的方法。 1. 回调函数 回调函数是JavaScript中最早也是最常用的异步编程方式。通过传递回调函数作为参数,我们可以在异步任务完成时调用它,以实现在任务完…

    JavaScript 2023年5月28日
    00
  • js实现年月日表单三级联动

    下面是JS实现年月日表单三级联动的完整攻略: 1. 确定三个下拉框的HTML结构 三个下拉框分别表示年、月、日,因此需要在HTML文件中编写三个select元素的结构。可以给它们添加类名或者id方便后续的CSS和JS操作。 <select class="year"></select> <select clas…

    JavaScript 2023年6月10日
    00
  • 如何让每个Http请求都自动带上token

    要让每个HTTP请求都自动携带token,我们可以使用拦截器来实现。拦截器是一个可以在请求和响应之间进行干预的组件,我们可以在它的回调方法中加入我们需要的逻辑,比如带上token。下面是一个完整的攻略: 步骤一:添加拦截器 首先,我们要添加一个拦截器,代码如下: public class TokenInterceptor implements Interce…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部