HarmonyOS鸿蒙Next中onTouch事件在点击的时候,一直会触发TouchType的Move状态
HarmonyOS鸿蒙Next中onTouch事件在点击的时候,一直会触发TouchType的Move状态
.onTouch((event) => {
switch (event.type) {
case TouchType.Down:
console.log('按下')
break
case TouchType.Move:
console.log('移动' + event.touches[0].x + ',' + event.touches[0].y)
break
}
})
在按下去的瞬间,Down状态被触发后Move状态也接着被触发,即使手指不移动也会一直触发Move状态,Move连续打印出来的x、y值一模一样。
在模拟器上,TouchType的表现正常,不移动不触发,在真机上只要点击就会触发。
所以这是鸿蒙的“特性”?
更多关于HarmonyOS鸿蒙Next中onTouch事件在点击的时候,一直会触发TouchType的Move状态的实战教程也可以访问 https://www.itying.com/category-93-b0.html
ios、android也是这样的
更多关于HarmonyOS鸿蒙Next中onTouch事件在点击的时候,一直会触发TouchType的Move状态的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我这边试了,也是这样的,点一下触发好几个 Move, 而且只要一直按着就会一直触发 Move,即使你没有移动你的手指它也会一直触发。
建议增加防抖/节流限制触发频率
throttleMove: boolean = false
// ...
if (!this.throttleMove) {
this.throttleMove = true;
setTimeout(() => {
switch (event.type) {
case TouchType.Down:
console.log('按下');
break;
case TouchType.Move:
console.log('移动' + event.touches[0].x + ',' + event.touches[0].y);
break;
}
this.throttleMove = false;
}, 300); // 节流间隔时间设为300毫秒
}
在HarmonyOS鸿蒙Next中,onTouch事件频繁触发TouchType.Move状态是正常行为。触摸屏的高灵敏度会导致微小移动就被识别为Move事件。系统采样精度高,即使手指轻微抖动也会触发Move。若需区分点击和滑动,可通过判断移动距离阈值实现。官方API设计中,Move事件会持续上报坐标变化。
这是HarmonyOS Next中触控事件处理的正常行为。在真机环境下,即使用户手指没有明显移动,系统也会持续上报微小的坐标变化(即使x/y值相同),因此会触发Move事件。这种设计主要是为了:
- 更精确地处理触控操作,捕捉细微移动
- 保持与Android/iOS触控事件处理机制的一致性
- 为需要高精度触控的应用(如绘图类)提供更流畅的体验
建议解决方案:
- 如果需要区分真实移动和静止状态,可以记录上一次坐标并与当前坐标比较:
let lastX = 0, lastY = 0;
.onTouch((event) => {
if(event.type === TouchType.Move) {
if(event.touches[0].x !== lastX || event.touches[0].y !== lastY) {
console.log('真实移动');
lastX = event.touches[0].x;
lastY = event.touches[0].y;
}
}
})
- 或者添加一个移动阈值判断:
const MOVE_THRESHOLD = 2; // 像素阈值
let startX = 0, startY = 0;
.onTouch((event) => {
switch(event.type) {
case TouchType.Down:
startX = event.touches[0].x;
startY = event.touches[0].y;
break;
case TouchType.Move:
if(Math.abs(event.touches[0].x - startX) > MOVE_THRESHOLD ||
Math.abs(event.touches[0].y - startY) > MOVE_THRESHOLD) {
console.log('有效移动');
}
break;
}
})