移动端长按事件针对华为机型失效的原因

需求背景:

原生应用嵌套h5页面,需要前端做一个自定义的长按事件,原生js封装touch事件,代码如下 :

let timer = 0;
const touchStart = function (event, callback, data = {}) {
  // const eve = window.event || event;
  // eve.preventDefault ? eve.preventDefault() : (eve.returnValue = false);
  timer = setTimeout(() => {
    callback(event, data);
  }, 500);
  return false;
};

const touchEnd = function () {
  clearTimeout(timer);
  return false;
};

const touchMove = function () {
  // 使用ontouchmove调用 移动即清除
  clearTimeout(timer);
  timer = 0;
};

export { touchStart, touchMove, touchEnd };

此代码中,以下两行代码可以在其他手机浏览器中正常唤起自定义的菜单,唯独华为手机不行,不限制机型,因为本人目前没有华为手机,尚不明白鸿蒙系统webview的机制,希望有知道的大佬帮忙解惑,十分感谢。

另外这个阻止默认事件会有导致其他的问题,会当前页面滑动失效,经过多处查阅资料,发现可以通过css来解决,代码如下

* {
  -webkit-touch-callout: none !important;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

可以通过touch-callout 与user-select搭配实现禁用默认长按菜单的效果,可满足大部分场景需求 ,这个可以解决华为手机自定义长按事件失效的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值