HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

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

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 ,这里不仅有丰富的技术文章,还有活跃的开发者社区,助力你在技术道路上不断前行!

继续阅读 »

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 ,这里不仅有丰富的技术文章,还有活跃的开发者社区,助力你在技术道路上不断前行!

收起阅读 »

华为mate60 rs 鸿蒙next系统在hbuilder4.6.1中打包到鸿蒙连接不上的问题

鸿蒙next

问题:

华为mate60 rs 鸿蒙next系统在hbuilder4.6.1中打包到鸿蒙连接不上的问题

解决方式:

连接手机弹出USB连接方式的时候,选择仅充电,别选传输文件或者传输图片,希望能帮到碰到此问题的小伙伴。

问题:

华为mate60 rs 鸿蒙next系统在hbuilder4.6.1中打包到鸿蒙连接不上的问题

解决方式:

连接手机弹出USB连接方式的时候,选择仅充电,别选传输文件或者传输图片,希望能帮到碰到此问题的小伙伴。

uniCloud.importObject引入云对象,非自定义loading请求的时候加载能否添加遮罩

通过uniCloud.importObject引入云对象,如果不配置{custom:true}的话,请求云对象的时候会自动有加载loading,但是没有mask遮罩,自定义使用的时候uni.showLoading({mask:true})可以这样配置,这样用户不会误触,那么引入云对象该如何配置?

继续阅读 »

通过uniCloud.importObject引入云对象,如果不配置{custom:true}的话,请求云对象的时候会自动有加载loading,但是没有mask遮罩,自定义使用的时候uni.showLoading({mask:true})可以这样配置,这样用户不会误触,那么引入云对象该如何配置?

收起阅读 »

vue3.5+electron35+deepseek-v3+arco搭建桌面版AI模板

2025最新跨平台AI落地实战:基于Vue3.5+Electron35+DeepSeek+Vite6+ArcoDesign从0-1打造一款高性能桌面AI流式对话模板。

前段时间有分享两个vue3+deepseek实战mobile版和PC版智能ai对话模板。
Vue3-DeepSeek-Chat流式AI对话|vite6+vant4+deepseek智能ai聊天助手
vue3-webseek网页版AI问答|Vite6+DeepSeek+Arco流式ai聊天打字效果

使用技术

  • 编码工具:VScode
  • 技术框架:vite^6.2.0+vue^3.5.13+vue-router^4.5.0
  • 大模型ai框架:DeepSeek-V3-0324 + OpenAI
  • 跨平台框架:electron^35.1.2
  • 组件库:arco-design^2.57.0 (字节桌面端组件库)
  • 状态插件:pinia^3.0.1
  • 会话缓存:pinia-plugin-persistedstate^4.2.0
  • 高亮插件:highlight.js^11.11.1
  • markdown解析:markdown-it

项目结构框架

electron-deepseek客户端AI系统已经发布到我的原创作品集,感谢支持!
electron35+deepseek+vite6桌面端AI流式聊天对话

整个项目使用最新跨平台框架Electron35和Vite6构建项目模板,接入最新DeepSeek-v3聊天大模型框架。

目前该项目已经正式完结,想要了解更多技术实现细节,可以看看下面这篇分享文章。

Electron35-DeepSeek桌面端AI系统|vue3.5+electron+arco客户端ai模板

作者:xiaoyan2017
链接: https://segmentfault.com/a/1190000046461214
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

继续阅读 »

2025最新跨平台AI落地实战:基于Vue3.5+Electron35+DeepSeek+Vite6+ArcoDesign从0-1打造一款高性能桌面AI流式对话模板。

前段时间有分享两个vue3+deepseek实战mobile版和PC版智能ai对话模板。
Vue3-DeepSeek-Chat流式AI对话|vite6+vant4+deepseek智能ai聊天助手
vue3-webseek网页版AI问答|Vite6+DeepSeek+Arco流式ai聊天打字效果

使用技术

  • 编码工具:VScode
  • 技术框架:vite^6.2.0+vue^3.5.13+vue-router^4.5.0
  • 大模型ai框架:DeepSeek-V3-0324 + OpenAI
  • 跨平台框架:electron^35.1.2
  • 组件库:arco-design^2.57.0 (字节桌面端组件库)
  • 状态插件:pinia^3.0.1
  • 会话缓存:pinia-plugin-persistedstate^4.2.0
  • 高亮插件:highlight.js^11.11.1
  • markdown解析:markdown-it

项目结构框架

electron-deepseek客户端AI系统已经发布到我的原创作品集,感谢支持!
electron35+deepseek+vite6桌面端AI流式聊天对话

整个项目使用最新跨平台框架Electron35和Vite6构建项目模板,接入最新DeepSeek-v3聊天大模型框架。

目前该项目已经正式完结,想要了解更多技术实现细节,可以看看下面这篇分享文章。

Electron35-DeepSeek桌面端AI系统|vue3.5+electron+arco客户端ai模板

作者:xiaoyan2017
链接: https://segmentfault.com/a/1190000046461214
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收起阅读 »

什么时候能支持设置网络访问代理功能?

Hbuilder X什么时候能支持设置网络访问代理功能?让我们这些内网开发者也能丝滑使用起来?

Hbuilder X什么时候能支持设置网络访问代理功能?让我们这些内网开发者也能丝滑使用起来?

关于uniapp vue2项目 使用地图和定位模块踩的坑和解决方案

高德地图 百度地图 uniapp

在写uniapp vue2项目时需要写考勤相关的功能,在定位和地图踩了很多坑,在此记录分享一下踩坑记录和解决方案

一、关于我使用下来 百度、高德、腾讯 踩的坑

系统定位不在我的选择范围内,此处没有讨论,有经验的可以在评论区补充。

  1. 百度
    HBuilder X(4.28.2024092502) 这个版本前我一直使用百度地图 百度定位,其中会有偶发的定位偏移问题,这个问题有人在社群反馈但一直未解决【百度地图定位偏移问题(可点击)】。HBuilder X(4.28.2024092502) 移除了百度地图和百度定位,加上定位偏移问题很突出,决定更换运营商。

  1. 高德
    更换成高德地图和定位后,地图显示正常,定位在ios端使用uni.getLocation获取慢(大概要用10s),这个问题我在社群反馈单一直为解决【高德定位ios端获取慢问题(可点击)】。最近(2025.4.15)重新尝试发现高德定位在安卓端连address都不能返回详细地址了,不满足需求,所以决定再次更换运营商。

  2. 腾讯
    更换成腾讯地图和定位后,弹出问题:打包时未添加maps模块,这个问题有人在社群反馈已找到原因(maps仅支持vue3项目)但未解决【腾讯地图报错未添加maps模块(可点击)】。大bug,不满足需求。

二、我的解决方案

首先我得到的结论:

  1. 百度地图未来版本已不支持,所以排除百度地图和百度定位。
  2. 高德地图好用,但高德定位获取地址有问题。
  3. 腾讯定位好用,但腾讯地图报错。

思考后尝试用高德地图 腾讯定位,在HBuilder X(4.57)下打包后地图可以正常显示,定位可以正常获取地址。此问题暂时解决。

继续阅读 »

在写uniapp vue2项目时需要写考勤相关的功能,在定位和地图踩了很多坑,在此记录分享一下踩坑记录和解决方案

一、关于我使用下来 百度、高德、腾讯 踩的坑

系统定位不在我的选择范围内,此处没有讨论,有经验的可以在评论区补充。

  1. 百度
    HBuilder X(4.28.2024092502) 这个版本前我一直使用百度地图 百度定位,其中会有偶发的定位偏移问题,这个问题有人在社群反馈但一直未解决【百度地图定位偏移问题(可点击)】。HBuilder X(4.28.2024092502) 移除了百度地图和百度定位,加上定位偏移问题很突出,决定更换运营商。

  1. 高德
    更换成高德地图和定位后,地图显示正常,定位在ios端使用uni.getLocation获取慢(大概要用10s),这个问题我在社群反馈单一直为解决【高德定位ios端获取慢问题(可点击)】。最近(2025.4.15)重新尝试发现高德定位在安卓端连address都不能返回详细地址了,不满足需求,所以决定再次更换运营商。

  2. 腾讯
    更换成腾讯地图和定位后,弹出问题:打包时未添加maps模块,这个问题有人在社群反馈已找到原因(maps仅支持vue3项目)但未解决【腾讯地图报错未添加maps模块(可点击)】。大bug,不满足需求。

二、我的解决方案

首先我得到的结论:

  1. 百度地图未来版本已不支持,所以排除百度地图和百度定位。
  2. 高德地图好用,但高德定位获取地址有问题。
  3. 腾讯定位好用,但腾讯地图报错。

思考后尝试用高德地图 腾讯定位,在HBuilder X(4.57)下打包后地图可以正常显示,定位可以正常获取地址。此问题暂时解决。

收起阅读 »

IM 即时通讯SDK 包括支持uniappx

即时通信 IM

全栈自研的云IM SDK 包括支持uniappx,w+18515882406

全栈自研的云IM SDK 包括支持uniappx,w+18515882406

uniapp x开发用uni.request发送请求一直报602001 "errMsg": "request system error" js端可运行 【已解决】

bug反馈

如果是全栈的兄弟们,就是本地环境的接口是会报这个错的,换成公网的接口就行了,不知道是bug还是什么,对于集成本地环境的兄弟不太友好

如果是全栈的兄弟们,就是本地环境的接口是会报这个错的,换成公网的接口就行了,不知道是bug还是什么,对于集成本地环境的兄弟不太友好

文档优化 - 示例图先行

uniapp 教程 文档

作为一个初次接触 uniapp 的用户,看了 uniapp 组件以及 api 的文档,发现有一个迫切需要优化的地方。

我建议应该优先列出组件或者 api 的示例图片或动图,使得用户第一时间直观的看出其效果。各种属性的作用,也最好使用图片来解释。至于具体的属性参数等,应该在最后列出。

总之,建议示例图片先行,这一点对于新用户非常重要。

继续阅读 »

作为一个初次接触 uniapp 的用户,看了 uniapp 组件以及 api 的文档,发现有一个迫切需要优化的地方。

我建议应该优先列出组件或者 api 的示例图片或动图,使得用户第一时间直观的看出其效果。各种属性的作用,也最好使用图片来解释。至于具体的属性参数等,应该在最后列出。

总之,建议示例图片先行,这一点对于新用户非常重要。

收起阅读 »

uniCloud阿里云服务空间数据库系统架构升级通知

uniCloud

尊敬的uniCloud开发者,您好!

uniCloud阿里云服务空间于2025年4月12日对数据库进行系统架构升级,升级期间影响新建服务空间的数据表创建,其他功能不受影响,预计4月12日下午14点恢复,感谢您的支持与理解。

尊敬的uniCloud开发者,您好!

uniCloud阿里云服务空间于2025年4月12日对数据库进行系统架构升级,升级期间影响新建服务空间的数据表创建,其他功能不受影响,预计4月12日下午14点恢复,感谢您的支持与理解。