click和touch事件觸發順序 糊里糊涂解決的奇怪bug

問題詳情

在嵌入式硬件設備里,測試 “點擊input密碼框,彈出第三方自帶鍵盤,點擊密碼框旁的小眼睛,切換輸入內容加密狀態,鍵盤收起/彈出狀態不變” 的功能邏輯;實際情況卻是 “點擊鍵盤或input框之外的任何地方,鍵盤都會收起” 。

 <div class="w-440 h-90 items-center"><text class="fs-24 fw-500 mr-20">密碼/text><input id="input" type="{{type}}" value="{{inputvalue}}" class="w-232 h-90 fs-24 bg-cardBg items-center input-style"style="keyboard: {{ keyboardStyle }}; width: {{ inputwidth }}px;" placeholder="{{placeholder}}"onclick="handleClick" /></div><div onclick="changeType" class="w-98 h-90 absolute" style="top: -2px; right: -2px;"><image if="{{showPassword}}" src="{{'/common/images/eye.png'}}" class="absolute top-25 right-24 w-41 h-41"></image><image else src="{{'/common/images/eye-close.png'}}" class="absolute top-25 right-24 w-41 h-41"></image></div>/////changeType(event) {this.showPassword = !this.showPassword;event.stopPropagation(); // 阻止冒泡},

在這里插入圖片描述
(頁面編寫基于Vela JS框架)

問題分析

由于是第三方鍵盤,暫時看不到其底層處理方式,初步判斷出兩個邏輯,一是鍵盤的彈出和input框的focus事件相關,二是鍵盤彈出時,會默認在整屏生成蒙層,用戶點擊時觸發蒙層綁定的交互事件,判斷如果是非input框范圍,則收起鍵盤(大眾邏輯)

解決思路

思路1:不去考慮第三方鍵盤的底層處理方式,在用戶點擊小眼睛時,強制觸發input框的focus事件

 changeType(event) {this.showPassword = !this.showPassword;if (this.focus) {this.$element("input").focus({focus: true})}event.stopPropagation(); // 阻止冒泡},

結果導致,點擊小眼睛時鍵盤閃爍?外加需要點擊兩次小眼睛才會切換小眼睛的狀態,就像是生成了兩個蒙層,點兩次才能點到小眼睛(看不到源代碼,咱也是瞎猜)

思路2:如果蒙層上綁定的是onclick事件(大眾邏輯),我們可以在小眼睛上綁定一個比onclick事件更快響應的事件,并在事件處理函數內,阻止事件冒泡/穿透到蒙層

這里就涉及到,click和touch事件的觸發順序了

事件觸發順序:touchstart → touchmove → touchend → click
click與touchstart觸發時間差約300ms,因需區分雙擊和單擊

我們雖然無法確認蒙層是位于小眼睛的上層還是下層,但只要小眼睛上事件能觸發,我們就可以將小眼睛上綁定的事件改為最快響應的touchstart,并阻止事件冒泡/穿透

 <div ontouchstart="changeType" class="w-98 h-90 absolute" style="top: -2px; right: -2px;">...</div>/// changeType(event) {this.showPassword = !this.showPassword;if (this.focus) {this.$element("input").focus({focus: true})}event.stopPropagation(); // 阻止冒泡event.preventDefault(); // 阻止默認事件},

問題解決了!鍵盤不閃了,小眼睛也能正常點擊

但是又想到小眼睛的點擊沒有默認事件需要阻止,就把event.preventDefault();刪了,測試無影響;又想到event.stopPropagation();生效的前提是,蒙層是小眼睛的祖先元素,為了確認又把event.stopPropagation();刪了,發現也沒有影響…

奇怪啊,所以解決這個問題的關鍵,僅僅只是將click改為了touchstart?難道小眼睛的閃爍是click的300ms延遲導致的?想不明白了…

結果就這么簡單解決了…

 <div ontouchstart="changeType" class="w-98 h-90 absolute" style="top: -2px; right: -2px;">...</div>/// changeType(event) {this.showPassword = !this.showPassword;if (this.focus) {this.$element("input").focus({focus: true})}},

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917075.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917075.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917075.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【0基礎PS】Photoshop (PS) 理論知識

目錄前言一、Photoshop 核心概念與定位?二、圖像基礎理論?三、圖層理論&#xff1a;PS 的核心工作機制?四、選區與蒙版?五、調色核心理論?六、常用文件格式?學習建議?總結前言 在數字圖像編輯領域&#xff0c;Photoshop&#xff08;簡稱 PS&#xff09;無疑是行業標桿級…

數據庫 設計 pdm comment列表顯示和生成建表sql

按如下步驟 生成見建表語句 comment非空使用comment 生成字段注釋&#xff0c; 空的時候使用name 生成字段注釋 sql腳本模板編輯 參考 PowerDesigner生成mysql字段comment 注釋-騰訊云開發者社區-騰訊云 版本不同這邊的設置不同 這個勾打上

嵌入式基礎知識復習(C語言)

知識擴展7.28 嵌入式產品特點、開發環境、計算機組成、Linux終端初識1、嵌入式產品。特點&#xff1a;低功耗、根據用戶需求定制。硬件&#xff1a;arm處理器。軟件&#xff1a;Linux操作系統arm架構&#xff1a;精簡指令集、低功耗&#xff08;移動/嵌入式&#xff09;。 …

LeetCode Hot 100 尋找兩個正序數組的中位數

給定兩個大小分別為 m 和 n 的正序&#xff08;從小到大&#xff09;數組 nums1 和 nums2。請你找出并返回這兩個正序數組的 中位數 。算法的時間復雜度應該為 O(log (mn)) 。示例 1&#xff1a;輸入&#xff1a;nums1 [1,3], nums2 [2] 輸出&#xff1a;2.00000 解釋&#x…

監控場景視頻質量異常修復:陌訊動態增強算法實戰解析

原創聲明&#xff1a;本文為原創技術解析&#xff0c;核心技術參數與架構引用自《陌訊技術白皮書》&#xff0c;禁止未經授權轉載。一、行業痛點&#xff1a;視頻質量異常的連鎖難題在安防監控、智慧交通等場景中&#xff0c;視頻質量異常已成為 AI 分析的主要瓶頸。據行業報告…

一個簡單的mvvm示例與數據雙向綁定

這就是一個簡單的數據雙向綁定的demo&#xff0c;參考即可&#xff08;cmakelist我沒按他的寫&#xff0c;但是大差不差&#xff09; 目錄 1.示例demo File: CMakeLists.txt File: main.cpp File: model/physiologymodel.cpp File: viewmodel/physiologyviewmodel.h Fil…

哈希的概念及其應用

哈希的概念及其應用哈希概念常見的哈希其他哈希字符串哈希&#xff08;算法競賽常用&#xff09;字符串哈希OJP3370 【模板】字符串哈希 - 洛谷P10468 兔子與兔子 - 洛谷哈希沖突哈希函數設計原則哈希沖突解決方法—閉散列閉散列的線性探測閉散列的二次探測哈希沖突解決方法—開…

【分布式的個人博客部署】

綜合項目-搭建個人博客一、運行環境二、基礎配置三、業務需求第一步&#xff1a;準備工作1、配置靜態IP2、修改hosts映射3、開啟防火墻4、時間同步5、配置免密ssh登錄第二步&#xff1a;環境搭建1、Server-web端安裝LNMP環境軟件2、Server-NFS-DNS端上傳博客軟件3、Server-NFS-…

藍橋杯----DS18B20溫度傳感器

&#xff08;二&#xff09;、溫度傳感器1、One-Wire總線One-Wire總線利用一根線實現雙向通信。因此其協議對時序的要求較嚴格&#xff0c;如應答等時序都有明確的時間要求。基本的時序包括復位及應答時序、寫一位時序讀一位時序。單總線即只有一根數據線&#xff0c;系統中的數…

科技賦能成長 腦力啟迪未來

——西安臻昊科技與秦嶺云數智共筑腦科學教育新生態 2025年6月26日&#xff0c;西安臻昊科技&#xff08;集團&#xff09;有限責任公司與秦嶺云數智&#xff08;陜西&#xff09;科技有限公司正式簽署腦象評測技術戰略合作協議&#xff0c;雙方將依托技術互補與資源協同&#…

Docker部署的PostgreSQL慢查詢日志配置指南

目錄 1. 核心步驟 1.1 修改配置文件 1.2 動態加載配置&#xff08;無需重啟容器&#xff09; 1.3 驗證配置生效 1.3.1 查看參數 1.3.2 執行測試慢查詢 2. 高級用法 2.1 使用分析工具 2.2 啟用擴展 3. 注意事項 3.1 日志目錄權限 3.2 性能影響 配置Docker部署的Pos…

C# 入門教程(四)委托詳解

文章目錄1、什么是委托2、委托的聲明&#xff08;自定義委托&#xff09;3、委托的使用3.1 實例:把方法當作參數傳給另一個方法3.2 注意:難精通易使用功能強大東西&#xff0c;一旦被濫用則后果非常嚴重4、委托的高級使用4.1 多播&#xff08;multicast&#xff09;委托4.2隱式…

React的基本語法和原理

3. React條件渲染某些情況下&#xff0c;姐妹的內容會根據不同的情況顯示不同的內容&#xff0c;或者決定是否渲染某部分內容&#xff1a; 在React中&#xff0c;所有的條件判斷和普通的JavaScript代碼一致&#xff1b;常見的條件渲染的方式有哪些&#xff1f;方式一&#xff1…

如何在 Gradle 項目中添加依賴?(以添加 AndroidX 版本的 RecyclerView 為例)

1. 確保項目已啟用 AndroidX RecyclerView 的現代版本屬于 AndroidX 庫&#xff0c;需確保項目已啟用 AndroidX&#xff1a; 在 gradle.properties 中應有以下配置&#xff08;通常新建項目默認開啟&#xff09;&#xff1a;android.useAndroidXtrue android.enableJetifiert…

深度學習與圖像處理 | 基于PaddlePaddle的梯度下降算法實現(線性回歸投資預測)

演示基于PaddlePaddle自動求導技術實現梯度下降&#xff0c;簡化求解過程。01、梯度下降法梯度下降法是機器學習領域非常重要和具有代表性的算法&#xff0c;它通過迭代計算來逐步尋找目標函數極小值。既然是一種迭代計算方法&#xff0c;那么最重要的就是往哪個方向迭代&#…

負載均衡集群HAproxy

HAProxy 簡介HAProxy 是一款高性能的負載均衡器和代理服務器&#xff0c;支持 TCP 和 HTTP 應用。廣泛用于高可用性集群&#xff0c;能夠有效分發流量到多個后端服務器&#xff0c;確保服務的穩定性和可擴展性。HAProxy 核心功能負載均衡&#xff1a;支持輪詢&#xff08;round…

重生之我在10天內卷贏C++ - DAY 1

坐穩了&#xff0c;我們的C重生之旅現在正式發車&#xff01;請系好安全帶&#xff0c;前方高能&#xff0c;但絕對有趣&#xff01;&#x1f680; 重生之我在10天內卷贏C - DAY 1導師寄語&#xff1a;嘿&#xff0c;未來的編程大神&#xff01;歡迎來到C的世界。我知道&#x…

[mind-elixir]Mind-Elixir 的交互增強:單擊、雙擊與鼠標 Hover 功能實現

[mind-elixir]Mind-Elixir 的交互增強&#xff1a;單擊、雙擊與鼠標 Hover 功能實現 功能簡述 通過防抖&#xff0c;實現單擊雙擊區分通過mousemove事件&#xff0c;實現hover效果 實現思路 &#xff08;一&#xff09;單擊與雙擊事件 功能描述 單擊節點時&#xff0c;可以觸發…

c++-迭代器類別仿函數常用算法函數

C常用算法函數 1. 前置知識 1.1 迭代器的類別 C中&#xff0c;迭代器是 STL 容器庫的核心組件之一&#xff0c;具有舉足輕重的作用&#xff0c;它提供了一種 統一的方式來訪問和遍歷容器&#xff0c;而無需關心底層數據結構的具體實現。迭代器類似指針&#xff0c;但比指針更通…

Python深度學習框架TensorFlow與Keras的實踐探索

基礎概念與安裝配置 TensorFlow核心架構解析 TensorFlow是由Google Brain團隊開發的開源深度學習框架&#xff0c;其核心架構包含數據流圖&#xff08;Data Flow Graph&#xff09;和張量計算系統。數據流圖通過節點表示運算操作&#xff08;如卷積、激活函數&#xff09;&…