uni-app ios15出现放大镜问题
uni-app ios15出现放大镜问题
| 信息类别 | 详细信息 |
|---|---|
| 产品分类 | uniapp/H5 |
| PC开发环境 | Windows |
| 版本号 | 19042.1288 |
| HBuilderX | 正式 |
| 版本号 | 3.2.12 |
| 浏览器平台 | 微信内置浏览器 |
| 版本号 | 2.9.0.112 |
| 项目创建方式 | HBuilderX |
操作步骤:
uniapp转h5,内置微信公众号,语音功能,点击录音按钮,出现放大镜,与长按事件造成冲突
预期结果:
uniapp转h5,内置微信公众号,语音功能,点击录音按钮,不出现放大镜
实际结果:
uniapp转h5,内置微信公众号,语音功能,点击录音按钮,出现放大镜,与长按事件造成冲突
bug描述:
uniapp转h5,内置微信公众号,ios15放大镜无法禁用与长按事件冲突
更多关于uni-app ios15出现放大镜问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app ios15出现放大镜问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
都无解决方法,-webkit-user-select: none;e.preventDefault();都不生效
请问解决了吗?遇到同样问题了
在 iOS 15 的微信内置浏览器中,点击或长按元素时,系统默认会触发文本选择放大镜(text selection loupe),这确实会与 touchstart、touchmove、touchend 等手势事件产生冲突,尤其是在实现录音按钮的长按录音功能时。
这个问题并非 uni-app 的 bug,而是 iOS 15 Safari 内核(微信浏览器使用此内核)的默认行为。核心原因是:当用户长按一个可交互元素(如按钮)时,系统会先触发文本选择机制,之后才触发自定义的长按事件,导致事件响应延迟、中断或不准确。
要解决此问题,你需要通过 CSS 和事件处理来禁用该元素的文本选择行为,并阻止默认的触摸动作。
解决方案如下:
-
在按钮的样式(CSS)中,添加以下规则:
.your-record-button-class { -webkit-touch-callout: none; /* 禁用长按菜单 */ -webkit-user-select: none; /* 禁用文本选择 */ user-select: none; touch-action: manipulation; /* 优化触摸响应,避免双击缩放等 */ }将
.your-record-button-class替换为你录音按钮的实际类名。你可以在页面的style部分或 App.vue 的全局样式中设置。 -
在按钮的事件处理函数中,阻止默认行为: 在你的录音按钮的
@touchstart或@mousedown事件处理函数中,显式调用event.preventDefault()。这可以阻止系统默认的文本选择/放大镜行为。<template> <button class="record-btn" @touchstart="handleTouchStart" @touchend="handleTouchEnd" @touchcancel="handleTouchCancel" > 按住录音 </button> </template> <script> export default { methods: { handleTouchStart(event) { // 关键:阻止默认行为,禁用放大镜 event.preventDefault(); // 开始你的录音逻辑 console.log('开始录音'); // 例如,开始计时或调用录音API }, handleTouchEnd(event) { // 结束录音逻辑 console.log('结束录音'); }, handleTouchCancel(event) { // 处理触摸取消(如来电打断) console.log('录音取消'); } } } </script> <style scoped> .record-btn { -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; touch-action: manipulation; /* 其他样式 */ } </style>

