平板收银系统、国产系统,鸿蒙系统,小键盘的封装与应用—仙盟创梦IDE

数字小键盘封装

数组小键盘封装是指将与数组小键盘相关的功能、操作、数据等进行整合,形成一个独立的、可复用的模块。封装数组小键盘具有以下几方面重要意义:

提高代码可维护性

  • 降低复杂度:数组小键盘在实际应用中,可能涉及到按键事件处理、按键状态管理、输入数据验证等一系列操作。若不进行封装,这些代码会分散在整个项目中,导致代码结构混乱,难以理解和维护。而封装后,这些代码被集中在一个模块里,代码结构变得清晰,维护起来更加容易。
  • 便于修改:当小键盘的功能需要调整时,比如修改按键布局、添加新的按键功能,只需在封装模块内部进行修改,不会对项目的其他部分产生影响。例如,原本小键盘只能输入数字,现在要添加小数点输入功能,在封装模块里添加相应的按键处理逻辑即可。

增强代码复用性

  • 跨项目使用:封装好的数组小键盘模块可以在多个项目中重复使用。比如,在开发多个需要数字输入的移动应用时,只需将封装好的小键盘模块引入到不同项目中,就可以快速实现小键盘功能,避免了重复编写相同代码的工作,提高了开发效率。
  • 项目内复用:在同一个项目中,不同的界面可能都需要用到数组小键盘,如登录界面输入验证码、设置界面输入密码等。通过封装,只需在需要的地方调用这个模块,就可以轻松实现小键盘功能,减少了代码冗余。

提升代码安全性

  • 隐藏内部实现细节:封装可以将小键盘的内部实现细节隐藏起来,只对外提供必要的接口。外部代码只能通过这些接口与小键盘模块进行交互,这样可以防止外部代码对小键盘内部数据和逻辑的非法访问和修改,提高了代码的安全性。
  • 数据验证和过滤:在封装模块内部可以对用户输入的数据进行验证和过滤,防止非法数据进入系统。例如,在小键盘输入密码时,可以在模块内部验证密码长度、字符类型等,确保输入的密码符合安全要求。

便于团队协作

  • 分工明确:封装后的数组小键盘模块可以由专门的开发人员负责开发和维护,其他开发人员只需按照接口文档使用该模块即可。这样可以实现开发任务的分工,提高团队开发效率。
  • 减少冲突:不同开发人员在开发项目时,可能会对同一部分代码进行修改,从而产生冲突。封装后的模块可以减少这种冲突的发生,因为其他开发人员不需要了解模块内部的具体实现,只需要关注接口的使用。

 数字小键盘匿名关联事件优点

  • 减少命名冲突:匿名函数无需命名,这能避免因函数命名引发的冲突问题。在一个大型项目中,代码里会存在大量的函数和变量,若为每个事件处理函数都赋予一个唯一的名称,不但耗费时间,还可能出现命名重复的状况。采用匿名关联事件,就无需操心命名的问题,降低了命名冲突的可能性。
  • 代码紧凑:匿名关联事件可以直接在事件绑定的地方定义事件处理逻辑,让代码更加紧凑。以 JavaScript 为示例,在绑定数字小键盘按键点击事件时,使用匿名函数可以让代码看起来更加简洁

代码 

/*
仙盟 创梦 数字键盘
2024-5-8
*/// 检查页面中是否存在 CyberWin_Dialog 对象if (typeof window.CyberWin_Dialog === 'undefined') {// 如果不存在,创建一个空的 CyberWin_Dialog 对象window.CyberWin_Dialog = {};} else {/*// 如果存在,为其添加一个类属性if (!CyberWin_Dialog.仙盟创梦_小键盘) {CyberWin_Dialog.仙盟创梦_小键盘 = {play: function (灵体obj) {console.log("灵体obj"); console.log(灵体obj); },contains: function (className) {return !!this[className];}};}*/// CyberWin_Dialog.classList.add('new-class');}// 如果存在,为其添加一个类属性if (!CyberWin_Dialog.仙盟创梦_小键盘) {CyberWin_Dialog.仙盟创梦_小键盘 = {add: function (className) {if (!this[className]) {this[className] = true;}},// this.仙盟创梦_数字键盘_灵体obj=null,constructor() {this.仙盟创梦_cpu=this},仙盟创梦_cpu:this,仙盟创梦_数字键盘_灵体_指针obj:null,仙盟创梦_数字键盘_灵体_指针id:null,getStyle:function(){const 仙盟样式 =`<style>.仙盟创梦_数字键盘对话框dlg{    z-index: 999999;border:0px;flex-direction:column;margin:0 !important;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);max-height:calc(100% - 30px);max-width:calc(100% - 30px)}.仙盟创梦_数字键盘容器{width:300px;border:1px solid #ccc;border-radius:10px;overflow:hidden}.keypad-header{background-color:#4CAF50;color:white;padding:10px;display:flex;justify-content:space-between;align-items:center}.keypad-header span{font-size:18px}.close-btn{background:none;border:none;color:white;font-size:20px;cursor:pointer}.input-display{display:flex;justify-content:space-between;align-items:center;padding:5px 10px;background-color:#f2f2f2}.input-display input{width:80%;padding:5px;border:1px solid #ccc;border-radius:3px}.keypad-body{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:5px;padding:10px}.仙盟创梦-keypad{color: #000;padding:10px;font-size:18px;border:none;border-radius:5px;background-color:#f2f2f2;cursor:pointer}.仙盟创梦_样式_键盘{padding:10px;font-size:18px;border:none;border-radius:5px;background-color:#f2f2f2;cursor:pointer}.仙盟创梦_小键盘_关闭,.仙盟创梦_小键盘_退格,.输入确定{background-color:#e0e0e0}</style>`;return 仙盟样式;},getBody:function(){const 仙盟数据 = ` <dialog id="仙盟创梦_数字键盘对话框dlg" class="仙盟创梦_数字键盘对话框dlg"><div class="仙盟创梦_数字键盘容器"><div class="keypad-header"><span>请输入数量</span><button class="仙盟创梦_小键盘_关闭">×</button></div><div class="input-display"><input type="text" id="仙盟创梦_数字键盘_输入数字" readonly></div><div class="keypad-body"><button class="仙盟创梦-keypad" data-value="7">7</button><button class="仙盟创梦-keypad" data-value="8">8</button><button class="仙盟创梦-keypad" data-value="9">9</button><button class="仙盟创梦_样式_键盘 仙盟创梦_小键盘_退格" data-value="backspace">退格</button><button class="仙盟创梦-keypad" data-value="4">4</button><button class="仙盟创梦-keypad" data-value="5">5</button><button class="仙盟创梦-keypad" data-value="6">6</button><button class="仙盟创梦_样式_键盘  仙盟创梦_小键盘_清空">清空</button><button class="仙盟创梦-keypad" data-value="1">1</button><button class="仙盟创梦-keypad" data-value="2">2</button><button class="仙盟创梦-keypad" data-value="3">3</button><button class="仙盟创梦_样式_键盘 输入确定 "   >确认</button><button class="仙盟创梦-keypad" data-value="00">00</button><button class="仙盟创梦-keypad" data-value="0">0</button><button class="仙盟创梦-keypad" data-value=".">.</button></div></div></dialog>`;return 仙盟数据;},init: function (灵体obj) {console.log("灵体obj"); console.log(灵体obj); var 仙盟数据 = this.getBody();var 仙盟样式 = this.getStyle();//document.write(仙盟样式);const 仙盟键盘容器 = document.getElementById('仙盟创梦_小键盘block');仙盟键盘容器.innerHTML=仙盟样式+仙盟数据;this.loadeventcommon();//const dialog = new Dialog(仙盟数据);},play: function (灵体obj,灵体id) {console.log("灵体obj"); // console.log(灵体obj); console.log("仙盟创梦_cpu==仙盟创梦_cpu"); console.log(this.仙盟创梦_cpu); this.仙盟创梦_数字键盘_灵体_指针obj=灵体obj;this.仙盟创梦_数字键盘_灵体_指针id =灵体id;console.log('关闭小键盘2');console.log(this.仙盟创梦_数字键盘_灵体obj);var 仙盟数据 = this.getBody();// console.log(仙盟数据); var p = document.createElement('dialog');p.innerHTML =仙盟数据;element.classList.add("newClass");element.setAttribute("id", "newID");document.body.append(p);p.show();this.loadevent(灵体obj,灵体id);仙盟创梦_数字键盘对话框dlg.show();var 仙盟创梦_数字键盘_输入数字 = document.getElementById('仙盟创梦_数字键盘_输入数字')仙盟创梦_数字键盘_输入数字.value=全局仙盟创梦_数字键盘_灵体obj.value;//const dialog = new Dialog(仙盟数据);},loadeventcommon: function () {var buttons = document.querySelectorAll('.仙盟创梦-keypad');buttons.forEach(button => {button.addEventListener('click', function () {const value = this.dataset.value;if (value === 'backspace') {仙盟创梦_数字键盘_输入数字.value = 仙盟创梦_数字键盘_输入数字.value.slice(0, -1);} else if (value === 'cancel') {仙盟创梦_数字键盘_输入数字.value = '';} else if (value === 'confirm') {// 这里可以添加确认后的处理逻辑,比如提交数据等console.log('确认输入的数字:', 仙盟创梦_数字键盘_输入数字.value);} else {仙盟创梦_数字键盘_输入数字.value += value;}});});},loadevent: function () {console.log("灵体obj"); console.log('关闭小键盘2loadevent');var 仙盟创梦_cpu = this.仙盟创梦_cpu;var 仙盟创梦_数字键盘_灵体id=this.仙盟创梦_数字键盘_灵体_指针id;var 仙盟创梦_数字键盘_灵体obj = this.仙盟创梦_数字键盘_灵体_指针obj;//灵体obj;var 仙盟创梦_数字键盘对话框 = document.getElementById('仙盟创梦_数字键盘对话框dlg');var 仙盟创梦_数字键盘_输入数字 = document.getElementById('仙盟创梦_数字键盘_输入数字');var 仙盟创梦_小键盘_关闭 = document.querySelector('.仙盟创梦_小键盘_关闭');var 仙盟创梦_小键盘_清空 = document.querySelector('.仙盟创梦_小键盘_清空');var 输入确定 = document.querySelector('.输入确定');var 仙盟创梦_小键盘_退格 = document.querySelector('.仙盟创梦_小键盘_退格');仙盟创梦_数字键盘_输入数字.value = 全局仙盟创梦_数字键盘_灵体obj.value;console.log("仙盟创梦_数字键盘_灵体obj",仙盟创梦_数字键盘_灵体obj);输入确定.innerHTML = 输入确定.innerHTML;console.log('事件监听器已清空');输入确定.addEventListener('click', function () {// 这里可以添加关闭小键盘的逻辑,比如隐藏元素等console.log('关闭小键盘');全局仙盟创梦_数字键盘_灵体obj.value =仙盟创梦_数字键盘_输入数字.value;//仙盟创梦_数字键盘_输入数字.value = '';仙盟创梦_数字键盘对话框dlg.close();console.log('关闭小键盘2');});仙盟创梦_小键盘_清空.addEventListener('click', function () {仙盟创梦_数字键盘_输入数字.value = '';console.log('关闭小键盘');});仙盟创梦_小键盘_关闭.addEventListener('click', function () {仙盟创梦_数字键盘_输入数字.value = '';仙盟创梦_数字键盘对话框dlg.close();console.log('关闭小键盘');});仙盟创梦_小键盘_退格.addEventListener('click', function () {var  text = 仙盟创梦_数字键盘_输入数字.value;//$('#'+cwpd_current_sel_id).val();if (text == "0" || text == "") {//$(this).parents('.counter').find('.text').val('');仙盟创梦_数字键盘_输入数字.value = '';} else {var last_value = text.substr(-2, 1);if (last_value == '.') {仙盟创梦_数字键盘_输入数字.value = text.substr(0, text.length - 2);} else {仙盟创梦_数字键盘_输入数字.value = text.substr(0, text.length - 1);}}//$('#'+cwpd_current_sel_id).focus();
});//const dialog = new Dialog(仙盟数据);},contains: function (className) {return !!this[className];}};}

调用

	var 仙盟创梦_小键盘new = CyberWin_Dialog.仙盟创梦_小键盘;//CyberWin_Dialog.仙盟创梦_小键盘.init();仙盟创梦_小键盘new.init();
function 仙盟创梦_数字键盘_打开(灵体obj){全局仙盟创梦_数字键盘_灵体obj=灵体obj;仙盟创梦_小键盘new.play(灵体obj,"");// 仙盟创梦_数字键盘对话框.show();}

平板网页移动收银

onclick="仙盟创梦_数字键盘_打开(this);"

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

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

相关文章

网工实验——OSPF配置

网络拓扑图 配置 1.为每个路由器配置接口&#xff08;略&#xff09;&#xff08;详细见RIP实验&#xff09; 2.配置OSPF AR1 [AR1]ospf [AR1-ospf-1]area 1 [AR1-ospf-1-area-0.0.0.1]network 172.16.1.1 0.0.0.0 #精确配置网络&#xff0c;也可以像下面那条命令那样配置 …

Kubernetes client-go 客户端类型与初始化指南

Kubernetes client-go 客户端类型与初始化指南 在 Kubernetes 的 client-go 库中&#xff0c;存在多种客户端用于与 API 服务器交互。以下介绍主要客户端类型&#xff0c;包括用途、初始化方式及 Demo。 1. RESTClient 用途 RESTClient 是底层 REST 客户端&#xff0c;直接…

java加强 -泛型

概念 定义类、接口、方法时&#xff0c;同时声明了一个或多个类型变量&#xff08;如<E>&#xff09;&#xff0c;称为泛型类、泛型接口、泛型方法、它们统称为泛型。 语法 public class ArrayList<E>{} E可以接收不同类型的数据&#xff0c;可以是字符串&…

C++ 项目 -- 高并发内存池

目录 项目介绍 内存池概念 池化技术 内存池 内存池主要解决的问题 malloc 定长内存池 申请内存 释放内存 整体框架设计 thread cache 申请内存 释放内存 central cache 申请内存 释放内存 page cache 申请内存 释放内存 大块内存申请实现 定长内存…

高效C/C++之九:Coverity修复问题:关于数组操作 和 内存操作

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 高效C/C之九&#xff1a;Coverity修复问题&#xff1a;关于数组操作 和 内存操作 目录 【关注我&#xff0c;后…

vfrom表单设计器使用事件机制控制字段显示隐藏

1. 使用表单设计器进行debug调试 依据 vform3.0开发者文档 https://www.ganweicloud.com/docs/6.1.0/pages/d3e6d9/ 对switch组件设置事件逻辑 调试中

iPhone 和 Android 在日期格式方面的区别

整篇文章由iPhone 和 Android 在日期格式方面有所不同引起,大致介绍了,两种时间标准,以及在 JavaScript 下的格式转换方法。 Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 iPhone 和 Android 在日期格式方面有所不同。其中,iPhone(iOS)使…

985高校查重率“隐性阈值”:低于5%可能被重点审查!

你是不是也以为&#xff1a; “查重率越低越好&#xff0c;最好压到1%、0%&#xff0c;导师看了都感动哭&#x1f979;” 但是你不知道的是——在985/211等重点高校&#xff0c;查重率太低反而可能引起导师和学术办公室的“特别关注”&#xff01; 今天就来扒一扒这个查重圈“…

【NLP】33. Pinecone + OpenAI :构建自定义语义搜索系统

Pinecone OpenAI 中文教学教程&#xff1a;构建自定义语义搜索系统 一、背景介绍 当下 AI 问答系统、矩阵检索、短文本分类等场景中&#xff0c;都需要很好地实现 “根据输入进行相似给点搜索”。这种算法基础称为 “向量搜索”&#xff0c;它的核心是将文本转换为向量后&am…

【Mybatis-plus常用语法】

MyBatis-Plus 是 MyBatis 的增强工具&#xff0c;提供了很多便捷的功能来简化开发。以下是一些 MyBatis-Plus 的常见语法&#xff1a; 实体类注解&#xff1a;使用 TableName 注解来指定实体类和数据库表的映射关系。 TableName("user") public class User {privat…

Logback官方文档翻译章节目录

Logback官方文档翻译章节目录 第一章 Logback简介 第二章 Logback的架构&#xff08;一&#xff09; Logback的架构&#xff08;二&#xff09; Logback的架构&#xff08;三&#xff09; 持续更新中…

Python变量作用域

变量作用域是Python编程中非常重要的基础概念&#xff0c;理解它可以帮助你避免很多常见的错误。本文将用简单易懂的方式&#xff0c;带你全面掌握Python变量作用域的所有细节。 一、什么是变量作用域&#xff1f; 变量作用域&#xff08;Scope&#xff09;指的是变量在程序中…

初学者的AI智能体课程:构建AI智能体的十堂课

初学者的AI智能体课程:构建AI智能体的十堂课 在人工智能(AI)领域,AI智能体正在逐渐发挥其不容忽视的作用。自动化的智能体不仅仅在理论上广泛讨论,更加在实际应用中开辟了一片新的天地。那么如何动手开发属于自己的AI智能体呢?Microsoft提供的AI智能体入门课正是为此而设…

【并发编程】MySQL锁及单机锁实现

目录 一、MySQL锁机制 1.1 按锁粒度划分 1.2 按锁功能划分 1.3 InnoDB锁实现机制 (1)记录锁(Record Lock) (2) 间隙锁(Gap Lock) (3) 临键锁(Next-Key Lock) (4) 插入意向锁(Insert Intention Lock) 二、基于 JVM 本地锁实现,保证线程安全 2.1 线程不安全的分析 2.1…

能耗优化新引擎:EIOT平台助力企业降本增效

安科瑞顾强 数字化转型的背景下&#xff0c;能源管理正加速向智能化、远程化方向演进。安科瑞电气推出的EIOT托管平台及ADW300系列4G无线计量仪表&#xff0c;通过云端技术与无线通信的深度融合&#xff0c;为用户打造了高效、便捷的远程能源监测与管理体系&#xff0c;助力企…

(14)Element Plus项目综合案例

本系列教程目录&#xff1a;Vue3Element Plus全套学习笔记-目录大纲 文章目录 第3章 综合案例3.1 搭建项目3.1.1 创建Vite工程3.1.2 配置路由 3.2 登录模块页面3.2.1 注册页面3.2.2 登录页面3.2.3 忘记密码页面 3.3 导航设置3.3.1 头部3.3.2 侧边栏与底部1&#xff09;头像部分…

Webug4.0靶场通关笔记22- 第27关文件包含

目录 一、文件包含 1、原理分析 2、文件包含函数 &#xff08;1&#xff09;include( ) &#xff08;2&#xff09;include_once( ) &#xff08;3&#xff09;require( ) &#xff08;4&#xff09;require_once( ) 二、第27关渗透实战 1、打开靶场 2、源码分析 3、…

〖 Linux 〗解决 VS Code 远程连接服务器的常见问题

文章目录 解决 VS Code 远程连接服务器的断开问题VS Code Remote-SSH一直弹出输入密码的问题VsCode C 语法检测失效不标红色波浪线 解决办法卸载扩展方式&#xff1a; 解决vscode C智能提示缓慢 解决 VS Code 远程连接服务器的断开问题 解决 vscode 卡顿&#xff0c;卡死&…

ERC-20与ERC-721:区块链代币标准的双星解析

一、代币标准的诞生背景 在以太坊生态中&#xff0c;代币标准是构建去中心化应用&#xff08;DApps&#xff09;的基石。ERC-20与ERC-721分别代表同质化与非同质化代币的两大核心标准&#xff0c;前者支撑着90%以上的加密资产流通&#xff0c;后者则开启了数字资产唯一性的新时…

C++入门小馆 :多态

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…