news 2026/8/24 15:12:22

阿里验证码Web和H5客户端V3架构接入鼠标拖拽滑块离开对话框释放鼠标时一直处于验证中问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
阿里验证码Web和H5客户端V3架构接入鼠标拖拽滑块离开对话框释放鼠标时一直处于验证中问题

Web和H5客户端V3架构接入:

现象:鼠标拖拽滑块离开对话框释放鼠标时一直处于验证中,没有触发验证。

分析:V3版本问题,V2无该问题。初步定位是因为V3滑块离开滑块弹框范围时释放鼠标,没有触发mouseup事件,导致插件没有回调验证函数;

解决思路:尝试拖拽在滑块框外面时,手动触发校验,分析getInstance方法返回实列没有对外提供方法触发校验;

思考:手动触发滑块按钮事件,看是不能触发插件的校验回调,通过JS获取滑块dom节点,研究mousedown,mosemove,mouseup, click事件,发现调用滑块的click事件可用触发插件校验回调函数(返回账号密码等信息),效果满足。

结合react工程代码整理如下:

// 获取验证码实例 const getInstance = useCallback( (instance: ICaptchaInstance) => { // 验证码弹窗Dom const sliderElement = document.getElementById('aliyunCaptcha-sliding-slider'); // 滑块按钮Dom const modalElement = document.getElementById('vnnox-care-captcha-modal'); // 先清理上一次注册的事件,避免重复绑定 if (dragCleanupRef.current) { dragCleanupRef.current(); dragCleanupRef.current = null; } if (sliderElement && modalElement) { const handleMouseDown = () => { isDraggingRef.current = true; }; const handleMouseMove = () => { // 仅用于标记拖拽过程,不在此处触发点击 if (!isDraggingRef.current) return; }; const handleMouseUp = (event: MouseEvent) => { if (!isDraggingRef.current) return; isDraggingRef.current = false; const rect = modalElement.getBoundingClientRect(); const { clientX, clientY } = event; const isInside = clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom; // 当拖拽结束(mouseup)时,如果鼠标位置已滑出父元素区域,则触发一次点击 if (!isInside) { // 添加到setTimeout中调用click,解决因调用click验证码弹框消失问题 setTimeout(()=>{ sliderElement.click(); }); } }; sliderElement.addEventListener('mousedown', handleMouseDown); window.addEventListener('mousemove', handleMouseMove); window.addEventListener('mouseup', handleMouseUp); dragCleanupRef.current = () => { sliderElement.removeEventListener('mousedown', handleMouseDown); window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mouseup', handleMouseUp); }; } . . . }, [getErrorMessage, handleErrorWithDebounce] );
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 13:22:48

解密VS Code终端快捷键冲突

在日常编程工作中,我们经常需要在集成开发环境(IDE)与终端之间来回切换,以便于进行文件操作、编译和调试等任务。Visual Studio Code(简称VS Code)作为一款备受欢迎的IDE,提供了丰富的快捷键支持。然而,有时我们会遇到一些快捷键在终端中的冲突问题。本文将结合一个具体…

作者头像 李华
网站建设 2026/8/24 11:56:27

Vue 3 动态模板加载与自定义元素的探索

在现代Web开发中,Vue.js凭借其灵活性和强大功能赢得了众多开发者的青睐。今天我们将探讨如何在Vue 3中使用动态模板加载,并将其注册为自定义元素。通过这个过程,我们不仅可以增强应用的模块化,还能提高代码的复用性和可维护性。 动态模板加载 首先,让我们来看看如何动态…

作者头像 李华
网站建设 2026/8/24 3:33:10

深入探索ElasticSearch:正则表达式与索引优化

在使用ElasticSearch(或其变种OpenSearch)时,构造高效的查询是开发者常常遇到的问题。今天我们通过一个实际案例来深入探讨ElasticSearch中正则表达式的使用以及如何优化索引以提高查询效率。 问题背景 假设我们正在开发一个系统,其中包含多个handler_id字段,我们需要筛…

作者头像 李华
网站建设 2026/8/24 3:31:59

深入探讨Java Scanner类中的nextLine()方法

在编写Java程序时,经常会遇到一些看似简单却让人困惑的问题。今天我们来深入探讨一下Java中Scanner类的nextLine()方法在使用next()或nextFoo()之后的跳过现象。 问题描述 假设我们有一个简单的账户管理系统,用户需要输入账户号码、账户持有者名称以及是否需要初始存款。代…

作者头像 李华
网站建设 2026/8/23 17:06:37

用户手册本地化翻译:LobeChat支持数十种语言

LobeChat 的多语言革命&#xff1a;让全球用户无缝对话 AI 在智能聊天应用飞速发展的今天&#xff0c;一个常被忽视却至关重要的问题浮出水面——语言壁垒。即便最强大的大模型能理解上百种语言&#xff0c;如果界面只对英语用户友好&#xff0c;那它的“智能”便只属于少数人。…

作者头像 李华
网站建设 2026/8/24 8:44:37

二通道数显控制器:工业测控的“双管家”,视觉检测中的隐形助力

在工业自动化的精密测控体系中&#xff0c;数显控制器是不可或缺的“感知与指挥核心”。而随着生产场景对多参数同步监控需求的提升&#xff0c;二通道数显控制器凭借其独特的双回路测控能力&#xff0c;逐渐成为诸多复杂生产环节的“标配”。尤其在视觉检测这一对环境与参数要…

作者头像 李华