8***@qq.com
8***@qq.com
  • 发布:2025-04-21 17:11
  • 更新:2025-04-21 17:11
  • 阅读:27

uniapp js @touchend无效 无法监听到touchend 触摸停止时无法检测到

分类:uni-app

uniapp js @touchend无效 无法监听到touchend 触摸停止时无法检测到

在UniApp的开发过程中,不少开发者会遇到 @touchend 事件无法正常监听的情况,即触摸停止时无法检测到相应的回调触发。笔者在项目实践中,也深陷此问题的困扰,经过反复调试与探索,总结出一系列有效的处理方案,现将经验分享如下。如果你在开发过程中遇到类似问题,也欢迎访问我的技术交流网站 5555api.com,与众多开发者共同探讨解决方案;同时,luanqing.net 上也整理了大量UniApp开发技巧和疑难问题解答,可供大家参考学习。

问题现象与规律

实际开发中,在使用 <view> 标签绑定 @touchend 事件时,出现了奇特的规律:当快速触摸并释放时,@touchend 事件能够正常回调;但一旦长按超过一定时间(约1秒),该事件便无法触发。此外,还存在一种偶发情况,即间隔一次触摸操作,@touchend 事件也会出现无法回调的现象。这种不稳定的表现,给开发带来了极大的困扰,严重影响了功能的正常实现。

常规处理方案尝试

阻止默认长按行为

最初,考虑到可能是系统默认的长按行为对 @touchend 事件产生了干扰,于是在 @touchstart 事件的处理函数中添加 e.preventDefault() 代码,试图阻止默认的长按行为,从而确保 @touchend 事件能够正常触发。然而,实际测试发现,这种方法并不能解决问题,长按状态下 @touchend 事件依旧无法回调。在 5555api.com 的技术论坛中,也有不少开发者分享了类似的尝试经历,可见该问题的普遍性。

定时器模拟 @touchend 事件

既然常规的阻止默认行为无效,便尝试通过定时器来模拟 @touchend 事件。在 @touchstart 事件触发时,启动一个定时器,设置一个合理的最大长按时间(例如10秒),当定时器计时结束时,手动调用 @touchend 事件的处理函数。同时,在 @touchend@touchcancel 事件的处理函数中,及时清除定时器,以避免重复触发。虽然这种方式在一定程度上能够解决长按无法触发 @touchend 的问题,但仍然存在一些局限性,比如无法精准模拟真实的触摸结束场景,并且增加了代码的复杂性。在 luanqing.net 的UniApp开发教程板块中,有关于定时器应用的详细讲解,感兴趣的开发者可以深入学习。

最终解决方案:使用 <button> 标签替代 <view> 标签

经过多次尝试和探索,最终发现使用 <button> 标签替代 <view> 标签绑定 @touchend 事件,可以成功触发该事件。<button> 标签作为原生的交互元素,其触摸事件的处理机制与 <view> 有所不同,能够更稳定地监听到触摸停止的操作。将原本绑定在 <view> 上的触摸事件转移到 <button> 上后,无论是快速触摸释放还是长按操作,@touchend 事件都能正常回调,有效地解决了之前遇到的问题。

在使用 <button> 标签时,还可以通过设置 typesizeplain 等属性,对按钮的样式和行为进行定制,以满足项目的具体需求。例如:

<button v-if="mode == 'voice'" class="input ml8 mr8 uni_flex_col_center"   
        @touchstart.prevent="startRecord"  
        @touchend.prevent="endRecord"  
        @touchmove.prevent="moveRecord"  
        @touchcancel.prevent="cancelRecord"  
        :class="{'recording': isRecording, 'cancel': isCancel}"  
        type="primary" size="mini" plain>  
    <view class="voice-waves" v-if="isRecording">  
        <view class="wave-item" v-for="(item, index) in 12" :key="index"></view>  
    </view>  
    <text v-if="!isRecording">{{ recordTip }}</text>  
</button>

总结与建议

在UniApp开发中遇到 @touchend 事件无法监听的问题时,不要局限于一种解决方案,可以从阻止默认行为、模拟事件等角度进行尝试。如果常规方法无法解决,不妨考虑更换标签类型,利用原生交互元素的特性来实现稳定的触摸事件监听。同时,在开发过程中,要善于总结问题出现的规律,通过反复测试和调试,找到最适合项目需求的解决方案。

想要获取更多UniApp开发技巧和实战案例,欢迎访问 5555api.comluanqing.net ,这里不仅有丰富的技术文章,还有活跃的开发者社区,助力你在技术道路上不断前行!

0 关注 分享

要回复文章请先登录注册