You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测<body>标签内的触摸或点击事件?解决移动端触摸不触发问题

解决移动端触摸触发侧边栏关闭的问题

我来帮你搞定这个移动端触摸不生效的问题~ 你原来的脚本只监听了桌面端的click事件,而移动端的触摸操作需要专门监听触摸类事件,同时还要注意避免事件冲突和延迟。

问题分析

移动端的触摸操作不会触发原生的click事件(或者会有300ms延迟),所以直接绑定click事件在移动端无法正常响应。我们需要同时监听触摸事件(比如touchend)和click事件,来覆盖桌面和移动端的场景。另外你原来的侧边栏选择器$('mySidenav')应该是漏了符号,需要补全成#mySidenav(如果是id)或者.mySidenav(如果是类),否则无法选中元素哦。

修改后的代码

// 同时绑定click和touchend事件,兼容桌面和移动端
$(window).on('click touchend', function() {
  closeSideBar();
});

// 注意补全选择器,这里假设侧边栏的id是mySidenav
$('#mySidenav').on('click touchend', function(event) {
  // 阻止事件冒泡,避免触摸/点击侧边栏时关闭它
  event.stopPropagation();
  // 可选:阻止触摸事件的默认行为,消除移动端300ms点击延迟,避免重复触发
  event.preventDefault();
});

关键说明

  • 使用on()方法绑定多个事件:这样不管是桌面端的鼠标点击,还是移动端的触摸抬起操作,都能触发closeSideBar()函数
  • 侧边栏也要同时监听两个事件:确保触摸侧边栏时同样能阻止事件冒泡,不会误触发关闭逻辑
  • 加上event.preventDefault():可以取消触摸事件的默认行为,避免移动端的300ms延迟,也防止同一操作同时触发touchend和click两次事件

如果你的侧边栏是类选择器,记得把#mySidenav改成.mySidenav就好啦~

内容的提问来源于stack exchange,提问作者2523454

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:06:51