大家设计按键时,是按下时有效还是按下又松开后有效呢
就是说按键发送是在按下时还是松开后呢? 模拟鼠标的方式,分别有几个事件,按下,短按,长按,弹起 我一般常用的是按下又松开...其他方式偶尔用 用状态机 先检底,再检高,中间还不担误干别的 当然是松开啦,按下有效的话一直按不是出错? 楼上搞笑,按你的逻辑,松开有效的话一直松不是出错? 1#“模拟鼠标的方式,分别有几个事件,按下,短按,长按,弹起”
就是这样。然后想用哪个就用哪个。 唤醒和复位键以电平触发,功能键以边沿触发 其实按键处理的学问非常大,方法很多,不同的环境可能需要的触发方式不同,学好这个东西对今后的实际程序操作非常重要 按下无效,松开有效,用户会认为按键有点失灵的感觉, 楼主买马潮老师的书读一下吧,什么都清楚了. 与楼上同感,我不这样用 按下有效,等待松开后再检下一次按键,怎样? 按键普通有长按键和短按键。当一个按键既要做长按键又要做短按键时,长按键为按下有效,短按键为松开有效。 一般都是按下有效。电脑键盘用多了就习惯了 简单用法是,检测按键=〉确认按下=〉取得键值=〉等待弹起 按下有效,然后要判断按键释放。用状态机做。 一般按键功能的执行分为两种,1、按下后执行, 2、松开后执行,其他非主流按法无视。
如果某个键的功能没有分长按和短按,绝大多数键是这样的,那么推荐使用方法1,因为让人感觉响应灵敏
如果某个键的功能对长按和短按都需要响应,且功能不一样时(执行的内容可能一样,也可能不一样,例如,UP键长按实现连续增加数值和短按一下增加1个数值的功能是一样的,都是增加数值。也可以实现短按执行功能A,长按执行功能B)
这个时候使用松开后再执行就比较好一点,因为如果采用“按下后执行”,则每次按下这个键都会将短按的功能执行一次,再判断是否满足长按的条件,这是某些时候不愿意看到的。如果一使用“松开后执行”,则可以在松开时再判断是长按还是短按,只执行一次需要的功能。
大家继续讨论 如果分长按和短按的话,我是这么处理的:
短按---松开后执行,且按下到松开的时间小于400ms
长按---如果按下去停顿800ms不放,认为是长按,开始执行。松开后则进入下一次按键判断,也就是一直按着的话算一次长按 按下有效。 先不管按下或者放开,只检测IO口的变化情况,再作是按下还是放开判断。
比如:先前记录当关的状态,按下为1,放开为0。对对应的IO口扫描,如果由0--》1或者 1--》0,则判定IO口有变化。然后做消抖。最后:
1--》0 为按键放开
0--》1 为按键按下
记得同时记录当前的状态哦 当然是按下有效了,松开有效或多或少让用户感觉莫名其妙。 利用状态机
按下有效,而且等待松开
若长时间不松开,则判为连击 我客户要求按下,抬起都有效! 按下再抬起有效,这样可以做复合按键。 期待!!!! mark hpdell 发表于 2010-8-31 12:11
期待!!!!
(引用自27楼)
。。。。。。您真是老手 当然是按下有效了,松开有效或多或少让用户感觉莫名其妙,你看看大品牌的仪器按键是咋样就知道了,还有汽车上的按键,还有键盘按键,所有这些都是按下就有效哦。按下再松开才有效的话,做不了长按效果,而且显得反应迟钝。 明显是按下有效,用户体验的问题,按键功能太多没办法才会去判抬起, 正常操作按下去不生效抬起才判断是要多恶心有多恶心。。。 tclg 发表于 2022-7-22 10:57
当然是按下有效了,松开有效或多或少让用户感觉莫名其妙,你看看大品牌的仪器按键是咋样就知道了,还有汽车 ...
(引用自30楼)
貌似解释的非常到位哟 {:smile:} 好像只有鼠标点击是松开时才触发 Click 事件,其他地方 (比如键盘按键) 都是按下时触发
鼠标这么设计是不是可以理解为因为它还可以移动,按下后发现不对还能移开再松开,就不会触发了
对于非常重要的功能涉如及人员生命安全的,可以选择松开后执行,例如核蛋发射、自爆等,反悔的话就一直按着吧。
看应用,需要怎样的功能,就怎样处理。 Press, Release, Double-Click, Triple-Click,... Hold. 短按,长按,双连击,三连击,莫尔斯……都做出来,就好了? 状态机,可以检测按下,松开,还可以设置按的时间越长,数字跳的越快,比如一开始+1,后面改为+3,+10。消抖什么都好处理。
页:
[1]