手搓图片滑动验证码_JavaScript进阶

news2025/5/24 12:24:31

手搓图片滑动验证码

  • 背景
  • 代码
  • 效果图
  • 展示网站

背景

在做前端项目开发的时候,少不了登录注册部分,既然有登录注册就少不了机器人验证,验证的方法有很多种,比如短信验证码、邮箱验证码、图片滑动、图片验证码等。

由于鄙人在开发中涉及到图片滑动验证,找来找去,找不到满意的轮子,同时组件库里也没有,于是一怒之下自己手搓了一个。各种功能实现的也还可以,够用。

请添加图片描述

组件用vue3写的,如果是原生的话需要自行转换一下。

代码

代码写的有一段时间了,由于鄙人英语撇脚,所以先奉上结构说明图便于理解HTML结构
在这里插入图片描述

<template>
  <div class="outer">
    <div class="img-out">
      <img :src="imgurll" alt="" />
      <p class="quekuai"><img :src="imgurll" alt="" /></p>
      <p class="kongkuai"></p>
    </div>
    <div class="huadongtiao">
      <p class="huadongkuai" ref="hdk"></p>
    </div>
  </div>
</template>
  
<script>
import axios from "axios";
import { reactive, ref, onMounted } from "vue";
export default {
  name: "SliderShou",
  emits: ["success"],
  setup(props, context) {
    var imgurll = ref("");
    getUrl().then((val) => {
      imgurll.value = val;
    });
    onMounted(function () {
      var hdk = document.querySelector(".huadongkuai"); //下方的滑块
      var qk = document.querySelector(".quekuai"); //滑动的缺失块
      var qkimg = qk.children[0]; //缺失块里面的imDOM
      var kk = document.querySelector(".kongkuai"); //空白半透明的块
      var kleft = Math.floor(Math.random() * (210 - 100 + 1)) + 100; //空的方块的位置随机数
      kk.style.left = kleft + "px"; //初始化空块的位置
      qkimg.style.left = -kleft + "px"; //初始化滑动块的图片位置
      //console.log('##',imgurll.value);
      //鼠标拖动滑块的事件
      hdk.onmousedown = function (e) {
        e = window.e || e;
        hdk.style.transition = "0s";
        qk.style.transition = "0s";
        var yleft = e.clientX;
        document.body.onmousemove = function (e) {
          e = window.e || e;
          hdk.style.left = e.clientX - yleft + "px";
          qk.style.left = e.clientX - yleft + "px";

          if (e.clientX - yleft < 0 || e.clientX - yleft > 250) {
            hdk.style.transition = "0.4s";
            qk.style.transition = "0.4s";
            hdk.style.left = "0px";
            qk.style.left = "0px";
            document.body.onmousemove = null;
          }
        };
      };
      // 在其他位置抬起鼠标依旧判断
      document.body.onmouseup = function () {
        if (
          kleft - parseFloat(qk.style.left) < 10 &&
          kleft - parseFloat(qk.style.left) > -10
        ) {
          context.emit("success");
          getUrl().then((val) => {
            imgurll.value = val;
          });
        } else {
          hdk.style.left = "0px";
          qk.style.left = "0px";
        }
        document.body.onmousemove = null;
      };
      //鼠标滑动完成鼠标抬起之后的位置判断
      hdk.onmouseup = function () {
        if (
          kleft - parseFloat(qk.style.left) < 10 &&
          kleft - parseFloat(qk.style.left) > -10
        ) {
          context.emit("success");
          getUrl().then((val) => {
            imgurll.value = val;
          });
        } else {
          hdk.style.left = "0px";
          qk.style.left = "0px";
        }
        document.body.onmousemove = null;
      };
    });
    //获取图片,图片接口的话这里你们可以去网上找免费的,
    async function getUrl() {
      let imgurl = "";
      await axios({
        method: "get",
        // headers:{
        //   ContentType: "application/json",
        //   "Access-Control-Allow-Origin": "*",
        // },
        ContentType: "application/x-www-form-urlencoded;charset-utf-8",
        url: "图片接口",
      }).then((res) => {
        imgurl = "https://www.asongaishuijiao.com" + res.data.image_url;
      });
      return imgurl;
    }
    function callback(e, yjl) {
      e = window.e || e;
      var hdk = document.querySelector(".huadongkuai");
    }
    return {
      callback,
      imgurll,
    };
  },
};
</script>
  <style scoped>
.outer {
  width: 300px;
  margin: 0px auto;
  height: 100%;
  padding-top: 200px;
}
.img-out {
  width: 300px;
  height: 200px;
  background-color: rgb(202, 202, 202);
  position: relative;
  border: 2px solid rgb(211, 211, 211);
  box-shadow: 0 0 2px 0 rgb(198, 198, 198);
}
.img-out > img {
  height: 100%;
  width: 100%;
}
.img-out .quekuai {
  position: absolute;
  width: 50px;
  height: 50px;
  background: url() 100px -50px/300px 200px;
  top: 50px;
  z-index: 100;
  overflow: hidden;
}
.img-out .kongkuai {
  width: 50px;
  height: 50px;
  position: absolute;
  background-color: rgba(255, 255, 255, 0.5);
  top: 50px;
  left: 200px;
  z-index: 90;
}
.quekuai img {
  width: 300px;
  height: 200px;
  position: absolute;
  top: -50px;
}
.huadongtiao {
  height: 50px;
  width: 300px;
  background-color: rgb(239, 239, 239);
  margin-top: 30px;
}
.huadongtiao .huadongkuai {
  width: 50px;
  height: 50px;
  background: rgb(193, 193, 193) url(../assets/分类.png) no-repeat 8px 10px/30px;
  position: relative;
}
</style>
  

效果图

在这里插入图片描述
在这里插入图片描述

展示网站

上面的组件代码是我开发的一个网站使用的,网站主要也是给IT程序员使用的,内容主打一个项目流程,如果你想找一个项目的开发流程或者说想发布自己项目的开发流程都可以去网站上看看,另外网站还可以附带项目代码。

👉网站链接奉上: xinxincode

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1295762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker安装与详细配置redis

docker安装redis 连接虚拟机 vagrant up //启动虚拟机 vagrant ssh //连接虚拟机进入root用户 su root输入密码&#xff1a;和账户名一样 vagrant 下载redis 直接下载redis镜像,下载redis最新镜像 docker pull redis下载的都是DockerHub中默认的官方镜像 创建文件目…

golang slice 数组针对某个字段进行排序

这里主要用到golang的sort.Sort方法&#xff0c;先看这个函数的简介&#xff1a; 介绍链接&#xff1a;https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter03/03.1.html 如何实现&#xff1a; import "sort"// UserInfo 用户信息结构…

Bionorica成功完成SAP S/4HANA升级 提升医药制造业务效率

企业如何成功地将其现有的ERP ECC系统转换升级到SAP S/4HANA&#xff0c; 并挖掘相关潜力来推动其数字化战略&#xff1f;Bionorica应用SNP软件实施了实时ERP套件&#xff0c;为进一步的增长和未来的创新奠定了基础。 草药市场的领导者&#xff1a;Bionorica Bionorica是世界领…

.NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能

前言 前段时间有同学在微信群里提问&#xff0c;要使用.NET开发一个简单的爬虫功能但是没有做过无从下手。今天给大家推荐一个轻量、灵活、高性能、跨平台的分布式网络爬虫框架&#xff08;可以帮助 .NET 工程师快速的完成爬虫的开发&#xff09;&#xff1a;DotnetSpider。 注…

Java实现屏幕截图程序(一)

在Java中&#xff0c;可以使用Robot类来实现屏幕截图程序。Robot类提供了一组用于生成输入事件和控制鼠标和键盘的方法。 Java实现屏幕截图的步骤如下&#xff1a; 导入Robot类 import java.awt.Robot;创建Robot对象 Robot robot new Robot();获取屏幕分辨率信息 Dimensi…

力扣面试题 08.12. 八皇后(java回溯解法)

Problem: 面试题 08.12. 八皇后 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 八皇后问题的性质可以利用回溯来解决&#xff0c;将大问题具体分解成如下待解决问题&#xff1a; 1.以棋盘的每一行为回溯的决策阶段&#xff0c;判断当前棋盘位置能否放置棋子 2.如何判…

JavaScript <关于逆向RSA非对称加密算法的案例(代码剖析篇)>--案例(五点一)

引用上文: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/134857857 剖析: var bitsPerDigit16; // 每个数组元素可以表示的二进制位数// 数组复制函数&#xff0c;将源数组部分复制到目标数组的指定位置 function arrayCopy(src, srcStart, dest, destStart, n) {var m…

OpenVINS学习1——数据集配置与运行

前言 OpenVINS是基于MSCKF的开源VIO算法&#xff0c;有非常详细的官网文档可以学习使用&#xff0c;将来一段时间的主要实践工作&#xff0c;就是深度掌握这份开源代码。 https://docs.openvins.com/ 一、环境配置与Euroc数据集运行 我的环境是Ubuntu20.04&#xff0c;ROS1&a…

EasyX图形化学习

1.EasyX是什么&#xff1f; 是基于Windows的图形编程&#xff0c;给用户提供函数接口&#xff0c;最终函数调用会由Windows的API实现。 注&#xff1a;EasyX只适配 c 。 2.头文件&#xff1a; <easyx.h>---只包含最新的函数 <graphics.h>---包含<easyx.h&g…

前程无忧接口分析

前程无忧接口分析 所需用到的工具URL解析通过抓包软件或者开发者选项抓取数据包对代码中的参数解析分析对acw_sc__v2进行分析对acw_sc__v2进行转换代码生成生成outPutList数组生成arg2参数生成arg3参数最终的效果 对详情页面的分析对timestamp__1258的生成分析 所需用到的工具 …

一些系统日常运维命令和语句

一、前言 记录一些日常系统运维的命令和语句 二、linux命令与语句 1、linux查看各目录使用磁盘情况 du -h /home home为目录 du -h /home 2.查看内存使用情况 free -h 3、查看进程和CPU使用情况 top top 三、数据库语句 1、统计mysql数据库表数量 SELECT COUNT(*) A…

【爬取二手车并将数据保存在数据库中】

爬取二手车并将数据保存在数据库中 查看网页结构分析爬取步骤解密加密信息将密文解密代码&#xff1a; 进行爬取&#xff1a;爬取函数写入解密文件函数和获取城市函数解密文件&#xff0c;返回正确字符串函数保存到数据库 运行结果 查看网页结构分析爬取步骤 可以看出网页使用…

新版本AndroidStudio删除无用资源

第一步&#xff1a; 第二步&#xff1a; 第三步&#xff0c;等加载完&#xff0c;自己选择要删除的文件。 注意&#xff01;&#xff01;&#xff01; 可能会遇到没有显示无用资源&#xff0c;这时把项目运行在真机上就出来了。

学习pytorch19 pytorch使用GPU训练

pytorch使用GPU进行训练 1. 数据 模型 损失函数调用cuda()2. 使用谷歌免费GPU gogle colab 需要创建谷歌账号登录使用, 网络能访问谷歌3. 执行4. 代码 B站土堆学习视频&#xff1a; https://www.bilibili.com/video/BV1hE411t7RN/?p30&spm_id_frompageDriver&vd_sourc…

Python Authlib库:构建安全可靠的身份验证系统

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在现代应用程序中&#xff0c;安全性是至关重要的&#xff0c;特别是在处理用户身份验证时。Authlib库为Python开发者提供了一套强大的工具&#xff0c;用于简化和增强身份验证和授权流程。本文将深入探讨Authli…

js/jQuery常见操作 之各种语法例子(包括jQuery中常见的与索引相关的选择器)

js/jQuery常见操作 之各种语法例子&#xff08;包括jQuery中常见的与索引相关的选择器&#xff09; 1. 操作table常见的1.1 动态给table添加title&#xff08;指定td&#xff09;1.1.1 给td动态添加title&#xff08;含&#xff1a;获取tr的第几个td&#xff09;1.1.2 动态加工…

elasticsearch聚合、自动补全、数据同步

目录 一、数据聚合1.1 聚合的种类1.2 DSL实现聚合1.2.1 Bucket聚合语法1.2.2 聚合结果排序1.2.3 限定聚合范围1.2.4 Metric聚合语法 1.3 RestAPI实现聚合 二、自动补全2.1 拼音分词器2.2 自定义分词器2.3 自动补全查询2.4 RestAPI实现自动补全 三、数据同步3.1 思路分析3.1.1 同…

Java来实现二叉树算法,将一个二叉树左右倒置(左右孩子节点互换)

文章目录 二叉树算法二叉树左右变换数据 今天来和大家谈谈常用的二叉树算法 二叉树算法 二叉树左右变换数据 举个例子&#xff1a; Java来实现二叉树算法&#xff0c;将一个二叉树左右倒置&#xff08;左右孩子节点互换&#xff09;如下图所示 实现的代码如下&#xff1a;以…

CMake ‘3.10.2‘ was not found in PATH or by cmake.dir property.

在部署Yolov5到安卓端的过程中出现&#xff1a;CMake ‘3.10.2’ was not found in PATH or by cmake.dir property. 原因&#xff1a; cmake版本太高&#xff0c;需要安装低版本的cmake 最开始下载的是默认最高版本的cmake,默认是3.22.1&#xff0c;解决方案是&#xff0c;下载…

AIGC创作系统ChatGPT网站源码,Midjourney绘画,GPT联网提问/即将支持TSS语音对话功能

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…