jquery写组件滑动人机验证组件

jquery组件,虽然 jquery 语法古老,但是写好了用起来真的很爽啊,本文用滑动人机验证给大家做个详细教程(直接复制代码就可以用噢o(* ̄▽ ̄*)ブ)

第一步 先看下组件本身 component.js

(function() {// 滑动组件 验证人机$.fn.slideComponent = function(o) {// 在这里定义组件的实现逻辑console.log('滑动组件参数 o :', o)let div = `    <div class="container huadong"><canvas width="310" height="155" id="canvas"></canvas><canvas width="310" height="155" id="block"></canvas><div class="refreshIcon"></div><div class="bar"><div id="bar-mask"><div class="verSliderBlock" style="background:https://etfinfo.xcf.cn/appletImg/puzzle-right.png !important;backgroundSize:100% !important"></div></div><span id="slide">向右滑动验证</span></div></div>`layer.open({title: false,btn: '取消',closeBtn: 0,skin: 'diy-huadong-layer',content: div,success: function(layero, index) {$('.diy-huadong-layer').prev().attr("style","z-index: 1989101600 !important;background-color: rgb(0, 0, 0);opacity: 0.3;");},});console.log('滑动开始')var canvas = document.getElementById('canvas');console.log('滑动开始 canvas', canvas)var block = document.getElementById('block');var canvas_ctx = canvas.getContext('2d')var block_ctx = block.getContext('2d')var img = document.createElement('img')var refresh = document.querySelector('.refreshIcon')var x = Math.round(Math.random() * 200) + 10,y = Math.round(Math.random() * 100) + 10,w = 42,l = 42,r = 10,PI = Math.PIconsole.log(x, y)//获取图片后面的随机号码function getRandomNumberByRange(start, end) {return Math.round(Math.random() * (end - start) + start)}//初始化图片function initImg() {img.onload = function() {canvas_ctx.drawImage(img, 0, 0, 310, 155)block_ctx.drawImage(img, 0, 0, 310, 155)var blockWidth = w + r * 2var _y = y - r * 2 + 2 // 滑块实际的y坐标var ImageData = block_ctx.getImageData(x, _y, blockWidth, blockWidth)block.width = blockWidthblock_ctx.putImageData(ImageData, 0, _y)};// 随机滑动验证背景图片var imgIndex = Math.round(Math.random() * 13 + 1)let imgUrl = 'https://etfinfo.xcf.cn/appletImg/' + `puzzle-bg${imgIndex}.png`;console.log('imgUrl:', imgUrl)img.crossOrigin = "Anonymous"img.src = imgUrl// img.src = 'https://picsum.photos/300/150/?image=' + getRandomNumberByRange(0, 100)}//清除tupianfunction clean() {x = Math.round(Math.random() * 200) + 10,y = Math.round(Math.random() * 100) + 10,console.log(x, y)canvas_ctx.clearRect(0, 0, 310, 155);block_ctx.clearRect(0, 0, 310, 155)block.width = 310draw(canvas_ctx, 'fill')draw(block_ctx, 'clip')}//绘制方块function draw(ctx, operation) {ctx.beginPath()ctx.moveTo(x, y)ctx.arc(x + l / 2, y - r + 2, r, 0.72 * PI, 2.26 * PI)ctx.lineTo(x + l, y)ctx.arc(x + l + r - 2, y + l / 2, r, 1.21 * PI, 2.78 * PI)ctx.lineTo(x + l, y + l)ctx.lineTo(x, y + l)ctx.arc(x + r - 2, y + l / 2, r + 0.4, 2.76 * PI, 1.24 * PI, true)ctx.lineTo(x, y)ctx.lineWidth = 2ctx.fillStyle = 'rgba(255, 255, 255, 0.7)'ctx.strokeStyle = 'rgba(255, 255, 255, 0.7)'ctx.stroke()ctx[operation]()ctx.globalCompositeOperation = 'overlay'}initImg()draw(canvas_ctx, 'fill')draw(block_ctx, 'clip')//添加移动事件var block_slider = document.querySelector("#block");var slider = document.querySelector(".verSliderBlock");var slider_mark = document.querySelector("#bar-mask");//用于判断当前是否是在按住滑块的情况下var yd = falsevar moveX = 0var downX = 0//鼠标按下slider.onmousedown = function(e) {downX = e.clientX;yd = true}//鼠标移动事件function hadleMousemove(e) {if (yd) {moveX = e.clientX - downX;document.querySelector('#slide').innerHTML = ''if (moveX >= 310) {moveX = 310 - 40}if (moveX > -2) {slider.style.backgroundColor = "#1991FA";slider_mark.style.borderWidth = "1px"slider_mark.style.borderColor = "#1991fa"slider_mark.style.width = moveX + 40 + "px";block_slider.style.left = (310 - 40 - 20) / (310 - 40) * moveX + "px";slider.style.left = moveX + "px";}}}//鼠标抬起事件function hadleMouseup(e) {if (yd) {slider.onmousemove = null;console.log(moveX)block_slider.style.left = (310 - 40 - 20) / (310 - 40) * moveX + "px";if (Math.abs((310 - 40 - 20) / (310 - 40) * moveX - x) < 10) {slider.style.background = "url('https://etfinfo.xcf.cn/appletImg/puzzle-success.png')";slider.style.backgroundSize = '100%'setTimeout(() => {rest();var index = layer.open();layer.close(index);o(); //滑动验证成功后执行的方法}, 1000)} else {slider_mark.style.backgroundColor = "#fce1e1"slider_mark.style.borderWidth = "1px"slider_mark.style.borderColor = "#f57a7a"slider.style.backgroundColor = "#f57a7a";slider.style.background = "url('https://etfinfo.xcf.cn/appletImg/puzzle-error.png')";slider.style.backgroundSize = '100%'setTimeout(() => {rest();}, 1000)}yd = false}}//鼠标在按住滑块下移动slider.onmousemove = function(e) {hadleMousemove(e)}//鼠标在滑块下抬起slider.onmouseup = function(e) {hadleMouseup(e)}//设置全局的移动事件,当鼠标按下滑块后,移动过程中鼠标可能会移出滑块,这是滑块也会监听鼠标的移动进行相应的移动document.addEventListener('mousemove', function(e) {hadleMousemove(e)})document.addEventListener('mouseup', function(e) {hadleMouseup(e)})function rest() {clean()document.querySelector('#slide').innerHTML = '向右滑动验证'slider.style.backgroundColor = "#fff";slider.style.left = "0px"slider.style.background = "url(https://etfinfo.xcf.cn/appletImg/puzzle-right.png)";slider.style.backgroundSize = '100%'block_slider.style.left = "0px"slider_mark.style.width = "0px"slider_mark.style.backgroundColor = "#d1e9fe"slider_mark.style.borderWidth = "0px"slider_mark.style.borderColor = "#d1e9fe"initImg()}//刷新refresh.onclick = function() {rest()}};// $.fn.slideComponent.defaults = {// 	slideSuccess(obj)// };
})();

第二步 具体页面引用

<!-- 滑动验证人机组件 -->
<script type="text/javascript" src="js/component.js"></script> 
// 点击获取验证码  弹出滑动验证码弹框
$("#loginMoudle").slideComponent(function() {successLoad(2);  //此处是滑动验证通过后希望执行的方法
});

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

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

相关文章

Nginx网络服务三-----(三方模块和内置变量)

1.验证模块 需要输入用户名和密码 我们要用htpasswd这个命令&#xff0c;先安装一下httpd 生成文件和用户 修改文件 访问页面 为什么找不到页面&#xff1f; 对应的路径下&#xff0c;没有这个文件 去创建文件 去虚拟机浏览器查看 有的页面不想被别人看到&#xff0c;可以做…

【UI自动化】使用poco框架进行元素唯一定位

直接选择&#xff1a; 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择&#xff1a; 3.poco(text/name).parent().child()[0].click()正则表达式&#xff1a; 4.listpoco(textMatches".*ETF")今天主要想记录下…

centos 系统盘 放到 win pc 中的异常解决

有一块 2.5 480g sata ssd&#xff0c;之前是笔记本电脑的centos系统盘&#xff0c;后来没用了&#xff0c;打算挂到台式机上当下载盘。台式机pc的主板是华硕 h610m-a。 难点一&#xff1a; 因为台式pc上已经挂了两块3.5 hdd&#xff0c;发现sata的电源线都在3.5hdd附近&#…

利用RBI(Remote Browser Isolation)技术访问ChatGPT

系统组网图 #mermaid-svg-Bza2puvd8MudMbqR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Bza2puvd8MudMbqR .error-icon{fill:#552222;}#mermaid-svg-Bza2puvd8MudMbqR .error-text{fill:#552222;stroke:#552222;…

300分钟吃透分布式缓存-10讲:MC是怎么定位key的?

我们在进行 Mc 架构剖析时&#xff0c;除了学习 Mc 的系统架构、网络模型、状态机外&#xff0c;还对 Mc 的 slab 分配、Hashtable、LRU 有了简单的了解。本节课&#xff0c;将进一步深入学习这些知识点。 接下来&#xff0c;进入 Memcached 进阶的学习。会讲解 Mc 是如何进行…

QT应用软件【协议篇】周立功CAN接口卡代码示例

文章目录 USBCAN系列CAN接口卡规格参数资料下载QT引用周立功的库安装sdk代码USBCAN系列CAN接口卡 USBCAN系列CAN接口卡兼容USB2.0全速规范,可支持1/2/4/8路CAN接口。采用该接口卡,PC机可通过USB连入CAN网络,进行CAN总线数据采集和处理,主要具备以下几大优势特点: 支持车载…

正交匹配追踪(Orthogonal Matching Pursuit, OMP)的MATLAB实现

压缩感知&#xff08;Compressed Sensing, CS&#xff09;是一种利用稀疏信号的先验知识&#xff0c;用远少于奈奎斯特采样定理要求的样本数目恢复整个信号的技术。正交匹配追踪&#xff08;Orthogonal Matching Pursuit, OMP&#xff09;是一种常见的贪婪算法&#xff08;Gree…

在苹果电脑MAC上安装Windows10(双系统安装的详细图文步骤教程)

在苹果电脑MAC上安装Windows10&#xff08;双系统安装的详细图文步骤教程&#xff09; 一、准备工作准备项1&#xff1a;U盘作为系统安装盘准备项2&#xff1a;您需要安装的系统镜像 二、启动转换助理步骤1&#xff1a;找到启动转换助理步骤2&#xff1a;启动转换助理步骤3&…

波奇学Linux:进程通信管道

进程通信 管道&#xff1a;基于文件级别的单向通信 创建父子进程&#xff0c;使得进程的struct file*fd_array[]的文件描述符指向同一个struct file文件&#xff0c;这个文件是内存级文件。 父进程关写端&#xff0c;子进程再关闭读端。实现单向通信 子进程写入&#xff0c;父进…

C++ Primer 笔记(总结,摘要,概括)——第3章 字符串、向量和数组

目录 3.1 命名空间的using声明 3.2 标准库类型string 3.2.1 定义和初始化string对象 3.2.2 string对象上的操作 3.2.3 处理string对象中的字符 3.3 标准库类型vector 3.3.1 定义和初始化vector对象 3.3.2 向vector对象中添加元素 3.3.3 其他vector操作 3.4 迭代器介绍 3.4.…

如何使用rocketmq实现分布式事务?

什么是rocketmq事务消息 事务消息是 Apache RocketMQ 提供的一种高级消息类型&#xff0c;支持在分布式场景下保障消息生产和本地事务的最终一致性。 RocketMQ的分布式事务又称为“半消息事务”。 事务消息处理流程 RocketMQ是靠半消息机制实现分布式事务 事务消息&#x…

Spring之AOP源码解析(上)

Aop相关注解 EnableTransactionManagementEnableAspectJAutoProxyEnableAsync... 从注解切入来看看这些注解都干了什么 Import注解作用简述 注入的类一般继承ImportSelector或者ImportBeanDefinitionRegistrar接口 继承ImportSelector接口&#xff1a;selectImports方法返回…

pandas/geopandas 笔记:判断地点在不在路网上 不在路网的点和路网的距离

0 导入库 import osimport pandas as pd pd.set_option(display.max_rows,5)import osmnx as oximport geopandas as gpd from shapely.geometry import Point 1 读取数据 假设我们有 如下的数据&#xff1a; 1.1 新加坡室外基站位置数据 cell_stationpd.read_csv(outdoor…

TSINGSEE青犀AI智能分析网关V4初始配置与算法相关配置介绍

TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常见…

linux下ffmpeg调用GPU硬件解码(VDPAU/VAAPI)保存文件

本文讲解在linux下面&#xff0c;如何通过ffmpeg调用GPU硬件解码&#xff0c;并保存解码完的yuv文件。 其实&#xff0c;ffmpeg自带的例子hw_decode.c这个文件&#xff0c;就已经能满足要求了&#xff0c;因此&#xff0c;本文就尝试讲解以下hw_decode这个例子。hw_decode.c可以…

watchpoint

前言 内存被踩&#xff0c;通过 watchpoint 找到真凶 实例 以 smsc911x 网卡驱动为基体&#xff0c;进行实验&#xff0c;和网卡本身功能无关&#xff0c; 每执行一次 ifconfig eth0 up&#xff0c;就会调用一次 smsc911x_open()&#xff0c;我在这里设计了一段代码&#xf…

数学知识(四)(容斥原理、博弈论)

一、容斥原理 容斥原理公式 一共加或者减的式子个数 &#xff08;一&#xff09;利用容斥原理解决求能被质数整除的数的个数 890计算能被整除的数的个数 因为一共有2^n-1种选法&#xff0c;可以用位运算的方式枚举&#xff0c;对于得到的每一种选法&#xff0c;根据存在的数…

六、回归与聚类算法 - 逻辑回归与二分类

线性回归欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、应用场景 2、原理 2.1 输入 2.2 激活函数 3、损失以及优化 3.1 损失 3.2 优化 4、逻辑回归API 5、分类的评估方法 5.1 精确率和召回率 5.2…

【Spring】IoC容器 控制反转 与 DI依赖注入 配置类实现版本 第四期

文章目录 基于 配置类 方式管理 Bean一、 配置类和扫描注解二、Bean定义组件三、高级特性&#xff1a;Bean注解细节四、高级特性&#xff1a;Import扩展五、基于注解配置类方式整合三层架构组件总结 基于 配置类 方式管理 Bean Spring 完全注解配置&#xff08;Fully Annotatio…

Kotlin学习 6

1.接口 interface Movable {var maxSpeed: Intvar wheels: Intfun move(movable: Movable): String}class Car(var name: String, override var wheels: Int 4, _maxSpeed: Int) : Movable {override var maxSpeed: Int _maxSpeedget() fieldset(value) {field value}overr…