|
本帖最后由 pidtfork 于 2020-12-7 16:06 编辑
UBAINS编辑器软件包含了KP面板模板
基本功能直接使用面板的模板程序就可以满足要求,近期有客户反馈需要防误触控,例如要长按或者双击这样的功能
虽然这些功能内部都使用过但是以前做的比较逻辑比较复杂,
所以重新写一了一个方法来简化一下操作
面板的配置可以参考面板说明,里面包含了ID设置/面板模式配置/背光指示灯控制
setWpTouch 和 setWpRelease 方法为模板程序中的方法,返回按钮按下弹起事件
将事件传入 KPxEvent 对象 的回调函数返回 点击/双击/长按事件
- /*********************************按钮面板***********************************
- setBusOpen();为打开面板控制功能。
- function setWpTouch(vAddress,vButtonNum)为面板按键按下去的触发事件
- function setWpRelease(vAddress,vButtonNum)为面板按键松开时的触发事件
- vAddress为面板地址,可识别不同地址面板。
- vButtonNum为面板触发的第几个按键。
- doBusButtonAction('sWpPanelPush1');为调用页面按钮为sWpPanelPush1的事件。
- sWpPanelPush1为按钮的Name,更改Name需对应更改代码。
- 事件可填到对应的按键事件里面,也可以直接写在下面的语句。
- setWpLedOn(vAddress,vButtonNum);为控制地址面板,第几个按键的灯亮。
- setWpLedOff(vAddress,vButtonNum);为控制地址面板,第几个按键的灯灭。
- setWpLedOne(vAddress,vButtonNum);为控制地址面板,第几个按键的灯亮,其它灯全灭。
- 如:setWpLedOn(2,1);把地址为2的面板,按键1的灯打开。
- 注:
- 多个面板直接在触发事件中判断vAddress地址,实现不同面板功能,不可导入多个模版
- 一个完程序的程序,setWpTouch,setWpRelease方法只能出现一次
- *****************************************************************************/
- setBusOpen();
- function setWpTouch(vAddress,vButtonNum)
- {
- kp6.touch(vButtonNum);
- switch(vButtonNum)
- {
- case 1:
-
- break;
- case 2:
-
- break;
- case 3:
-
- break;
- case 4:
-
- break;
- case 5:
-
- break;
- case 6:
-
- break;
- }
- setWpLedOne(vAddress,vButtonNum);
-
-
- }
- function setWpRelease(vAddress,vButtonNum)
- {
- kp6.release(vButtonNum);
- switch(vButtonNum)
- {
- case 1:
- doBusButtonAction('sWpPanelRelease1');
- break;
- case 2:
- doBusButtonAction('sWpPanelRelease2');
- break;
- case 3:
- doBusButtonAction('sWpPanelRelease3');
- break;
- case 4:
- doBusButtonAction('sWpPanelRelease4');
- break;
- case 5:
- doBusButtonAction('sWpPanelRelease5');
- break;
- case 6:
- doBusButtonAction('sWpPanelRelease6');
- break;
- }
- }
- function KPxEvent(callback) {
- this.callback = callback;
- this.clickTime = 1000; //1s
- this.doubleClickTime = 1200; //1.2s
- this.list = [];
- this.record = function(value) {
- this.list.push(value);
- if (this.list.length > 32) {
- this.list.shift();
- }
- }
- this.getRecord = function(keyNum,type,index){
- var last;
- if (index == undefined) {
- last = this.list.length - 1;
- }else{
- last = index;
- }
- for (var i = last; i >= 0; i--){
- if (this.list[i].id == keyNum && this.list[i].type == type) {
- return {
- id:this.list[i].id,
- type:this.list[i].type,
- time:this.list[i].time,
- index:i
- };
- }
- }
- return -1;
- }
- this.touch = function(keyNum) {
- this.record({
- id:keyNum,
- type:"touch",
- time:new Date().getTime(),
- });
- }
- this.release = function(keyNum) {
- this.record({
- id:keyNum,
- type:"release",
- time:new Date().getTime(),
- });
- this.check(keyNum);
- }
- this.check = function(keyNum){
- var find = this.clickCheck(keyNum);
- if (find) {
- if (find.click) {
- this.callback("click",keyNum,find.times);
- this.doubleCheck(keyNum,find);
- }
- if (find.hold) {
- this.callback("hold",keyNum,find.times);
- }
- }
- }
- this.clickCheck = function(keyNum,index) {
- var last;
- if (index == undefined) {
- last = this.list.length - 1;
- }else{
- last = index;
- }
- var release = this.getRecord(keyNum,"release",last);
- if (release) {
- var touch = this.getRecord(keyNum,"touch",release.index);
- if (typeof release == typeof touch) {
- var times = release.time - touch.time;
- var clickEnable = times < this.clickTime ? true:false;
- var holdEnable = times > this.clickTime ? true:false;
- return {
- click:clickEnable,
- hold:holdEnable,
- times : times,
- id : keyNum,
- touchTime : touch.time,
- releaseTime : release.time,
- touchIndex : touch.index,
- releaseIndex : release.index,
- }
- }
- }
- return -1;
- }
- this.doubleCheck = function(keyNum,lastInfo){
- var index = lastInfo.touchIndex;
- var prev = this.clickCheck(keyNum,index);
- if (prev) {
- if (prev.click) {
- var times = lastInfo.releaseTime - prev.touchTime;
- if (times < this.doubleClickTime) {
- this.callback("doubleClick",keyNum,times);
- }
- }
- }
- }
- }
- var kp6 = new KPxEvent(function(event,id,times) {
- setButtonText("AAAAA",event + " : " + id + " : " + times);
- // event 取值为 click doubleClick hold 分别表示单击 双击 长按
- // id 表示按键值
- // times 表示此次事件持续时间 不同时间长度的长按事件可以根据此值进一步判断
- });
- //下面两个参数为默认值 可根据需求更改 单位为ms
- //kp6.clickTime = 1000; //设置点击事件为1s 短于1s为点击 长于1s为长按
- //kp6.doubleClickTime = 1200; //设定双击事件时间,两次点击事件总时间少于1.2s为双击事件
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|