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

下面是详细的“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日

相关文章

  • 遍历js中对象的属性和值的实例

    遍历JS对象的属性和值,通常采用两种方式:for…in循环和Object.keys()方法。 for…in循环 for循环可以遍历对象中所有可枚举的属性,并且对每一项执行指定的操作。 const obj = { name: "Tom", age: 18, gender: "male" }; for (let k…

    JavaScript 2023年5月27日
    00
  • JS数组的赋值介绍

    JS数组是一种常见的数据类型,其可以存储多个数据,也支持元素的增、删、查、改等常用操作。在JS中,数组的赋值有多种方法,包括直接定义、赋空数组、批量赋值等方式。下面将详细讲解JS数组的赋值介绍。 直接定义数组 直接定义数组是一种常见的赋值方式,类型如下: let arr = [1, 2, 3, 4]; 上述代码定义了一个名为arr的数组,其中包含了4个元素,…

    JavaScript 2023年5月27日
    00
  • JS逻辑运算符短路操作实例分析

    JS逻辑运算符短路操作是指在使用逻辑运算符 && 和 || 时,如果第一个条件可以决定整个表达式的结果,则不再执行后续的条件判断,直接返回结果。这样就可以通过少写一些代码和避免一些不必要的计算,提高代码的运行效率。 下面分别给出 && 和 || 的两个具体实例来说明: 逻辑运算符 && 的短路操作实例分析 le…

    JavaScript 2023年5月28日
    00
  • Javascript的表单验证-提交表单

    Javascript表单验证是Web开发中的重要环节,可以提升用户体验和网站安全性。以下是通过JS实现表单验证和提交的攻略。 步骤1:HTML表单 首先,在HTML中定义表单元素,包括输入框、单选框、多选框、下拉框等。在表单中设置提交按钮,并添加JS函数来验证表单数据是否符合需要。示例代码如下: <form action="submit.ph…

    JavaScript 2023年6月10日
    00
  • JavaScript parseInt0.0000005打印5原理解析

    JavaScript的parseInt函数用来将一个字符串转换成一个整数。 在JavaScript中,当parseInt接收的参数是字符串时,它会从字符串的开头开始遍历,直到遇见第一个不合法的字符为止,并截取这个字符之前的所有数字字符。如果字符串中不包含数字字符,则返回NaN。parseInt也可以接收第二个参数(radix),表示使用的进制数,如2表示二进…

    JavaScript 2023年5月28日
    00
  • js的window.showModalDialog及window.open用法实例分析

    JS的window.showModalDialog及window.open用法实例分析 在网页开发中,我们经常需要弹出新的窗口来进行交互或展示信息。其中,window.showModalDialog() 和 window.open() 方法可以用来实现窗口的打开功能。这篇文章将分析这两个方法的使用方法以及给出相应的实例。 window.showModalDi…

    JavaScript 2023年6月11日
    00
  • Android 手机浏览器调试使用Chrome进行调试实例详解

    Android 手机浏览器调试使用Chrome进行调试实例详解 介绍 开发者通常需要在本地环境中对其网页进行调试,以确保其能够在不同设备和浏览器中正确运行。Android 手机作为一个复杂和多样化的设备,需要特定的工具和方法来进行调试。 Chrome浏览器提供了一个方便的方式来调试Android手机上的网页。本文将详细介绍如何使用Chrome浏览器来进行调试…

    JavaScript 2023年6月10日
    00
  • Electron vue的使用教程图文详解

    Electron Vue的使用教程图文详解 Electron Vue是一款基于Electron和Vue的框架,可以用于快速构建桌面应用。本文将详细讲解如何使用Electron Vue构建桌面应用程序。 前置条件 在开始使用Electron Vue之前,需要具备以下技能和工具: 基本的HTML、CSS和JavaScript技能 Vue.js的基础知识 Node…

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