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

手搓图片滑动验证码

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

背景

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

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

请添加图片描述

组件用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.mfbz.cn/a/216267.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“团团活力圈”—“玩转柔力球 青春展风采”青少年柔力球体验活动

柔力球项目是中华优秀传统文化创造性转化、创新性发展的成功典范&#xff0c;它融合了传统太极运动方式与现代竞技双重特征于一体&#xff0c;强调内外双修&#xff0c;是一项集健身性、竞技性、表演性为一体的极富中华民族特色的体育运动。 为进一步促进柔力球运动在青少年人…

RK3588 Yolov5 部署进行目标识别

一、环境说明&#xff1a; 1、上位机 主机配置&#xff1a;win10&#xff08;强制要求win 10&#xff09;OS专业版 22H2 虚拟化软件&#xff1a;VMware pro 17.0.2&#xff1b; 虚拟机系统&#xff1a;Ubuntu20.04.1&#xff08;要求>18.0&#xff09;&#xff1b;x86-64位…

【软考S01计算机系统知识】E01 中央处理单元

E01 中央处理单元 计算机系统硬件基本组成中央处理单元组成功能 多核 CPU 计算机系统硬件基本组成 计算机系统由硬件和软件组成&#xff0c;基本硬件系统由 运算器、控制器、存储器、输入设备 和 输出设备 5大部件组成&#xff1b; 中央处理单元&#xff1a; 运算器、控制器等…

低代码简化开发流程,强大的开发利器

目录 一、与传统IT开发相比&#xff0c;低代码开发的优势 二、低代码是时代发展的产物 三、善用低代码 四、总结 软件开发已经成为企业发展不可或缺的一环。然而&#xff0c;传统的软件开发模式常常面临着繁琐冗长的工作流程、高昂的开发成本以及难以跟进快速变化的市场需求的挑…

微服务调用组件Feign

JAVA 项目中如何实现接口调用&#xff1f; 1&#xff09;Httpclient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富 的支持 Http 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传…

Spring Boot 3 整合 Spring Cache 与 Redis 缓存实战

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

服务器托管与服务器租用的详细比较

​  在当今数字化时代&#xff0c;服务器托管和服务器租用成为了许多企业和个人选择的两种常见方式。它们都提供了一种将服务器放置在专业机房中的解决方案&#xff0c;但在具体实施和使用过程中存在一些差异。下面将详细比较这两种方式的优势和劣势。 1. 服务器托管 服务器托…

Wnmp本地搭建结合内网穿透实现远程访问本地Wnmp服务

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&a…

拒绝废话,直接开画!Python零基础教程之画图

引文 很多教程&#xff0c;开始教python&#xff0c;就是语法呀&#xff0c;字符类型这些基础的&#xff0c;虽说是基础&#xff0c;你也不能说没用。 但是&#xff0c;对于前期要快速成长的我们来说&#xff0c;属实不够看。 我们是新手&#xff0c;我们是菜鸟&#xff0c;但…

2、Linux_远程操作

远程操作 1.配置ifconfig 1.1输入 ifconfig 查看 ip 的命令( ifconfig ) 1.2搜索 ifconfig 命令&#xff08;yum search ifconfig&#xff09; 1.3配置网卡 进入如下目录配置网卡 cd /etc/syscofig/network-scripts编辑 ifcfg-ens33 vi ifcfg-ens33按 i 键进入编辑模式 按 …

好大夫数据爬取

好大夫数据爬取 问诊数据评论数据医生数据科普号数据医患交流数据 可按照疾病进行所有医生的数据&#xff0c;也可以抓所有问诊数据、评论数据 突破限制&#xff0c;快速交付

UI咨询公司-蓝蓝设计:顶级秘籍:提升UI设计吸引力的3大绝招

想要让你的UI设计在海量应用中脱颖而出&#xff0c;吸引用户眼球吗&#xff1f;如果你正在寻找提升UI设计吸引力的绝妙方法&#xff0c;那么你绝对不能错过本文&#xff01;我们将为你揭示顶级UI设计师都不会告诉你的3大绝招&#xff0c;让你轻松掌握提升UI设计吸引力的关键技巧…

光纤和光模块的那点事儿

你们好&#xff0c;我的网工朋友。 应该不少朋友在工作中会遇到光纤传输布线的活吧&#xff0c;不得不说&#xff0c;会遇上的问题还挺多&#xff0c;比如说…… 光纤收发器怎么接上不亮&#xff1f; 光纤收发器和交换机插光模块能不能搭配使用&#xff1f; 带光口的球机可…

润和软件HopeStage与深信服终端安全管理系统完成产品兼容性互认证

近日&#xff0c;江苏润和软件股份有限公司&#xff08;以下简称“润和软件”&#xff09;HopeStage 操作系统与深信服科技股份有限公司&#xff08;以下简称“深信服”&#xff09;终端安全管理系统完成产品兼容性测试。 测试结果表明&#xff0c;企业级通用操作系统HopeStage…

一起学docker系列之十六使用Docker Compose简化容器编排

目录 1 前言2 Docker Compose是什么&#xff1f;3 Docker Compose安装步骤3.1 **下载Compose**3.2 **设置权限**3.3 **创建符号链接&#xff08;可选但建议以便使用&#xff09;** 4 Docker Compose的核心概念4.1 **YAML文件&#xff08;docker-compose.yml&#xff09;**4.2 *…

【Spring Cloud Alibaba】1.4 Nacos服务注册流程和原理解析

文章目录 1.前言2. 服务注册的基本流程3. 服务注册的核心代码分析3.1. NacosNamingServiceNamingProxy 服务端通信的核心类NamingClientProxy nacos 2.x 版本服务端通信核心接口 3.2 NamingGrpcClientProxy 详解RpcClient类RpcClient类核心方法 start 3.3 NamingHttpClientProx…

电子书制作神器!错过等十年

众所周知&#xff0c;随着科技的飞速发展&#xff0c;电子书已成为越来越多人的首选阅读方式。但制作电子书并不费力&#xff0c;一个制作电子书的神器就能解决这些问题。 那这款神器究竟有何魅力&#xff1f;它能帮助我们制作出怎样的电子书&#xff1f; 首先&#xff0c;这款…

PyQt6 QFontComboBox字体组合框控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计35条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…

Spring 声明式事务

Spring 声明式事务 1.Spring 事务管理概述1.1 事务管理的重要性1.2 Spring事务管理的两种方式1.2.1 编程式事务管理1.2.2 声明式事务管理 1.3 为什么选择声明式事务管理 2. 声明式事务管理2.1 基本用法2.2 常用属性2.2.1 propagation&#xff08;传播行为&#xff09;2.2.2 iso…

Python代码编译并生成Docker镜像

Python代码编译并生成Docker镜像 前言 实际python项目交付时往往有针对关键代码进行保护的需求&#xff0c;本文介绍了一种简单可行的方案&#xff1a;1. 在Linux系统上先将 .py 文件编译为 .so 文件&#xff0c;2. 将整个项目打包成Docker镜像&#xff08;解决 .so 文件的环…
最新文章