H5手机端iOS,安卓长按事件的解决方案

本文介绍了解决移动端点击和长按事件冲突的方法,包括使用touchstart和touchend事件代替click事件,并通过CSS禁用默认行为以确保事件正确触发。

之前做手机端游戏的开发,遇到了需要点击事件、长按事件来触发‘上下左右’的场景,由于项目很急(好吧,其实是自己懒),网上直接搜索插件,痛快,不过提交测试悲剧了,ios非常正常,安卓就不行了,赶紧看了源码,我的天,看不懂,压缩的什么鬼(此处不贴图了)。

好吧,还是自己写吧,仔细回想了一下,自己的出发点有问题,点击事件用click事件,长按事件找插件,用类似于longPress之类的api。之后想起来touchstart、touchend

又上网简单查了一下用法,于是写了一个非常简单demo,点击或者长按按钮,数字累加,之后部署测试,发现还是不行,会有一些诡异的表现(其实就是微信浏览器默认行为),多方查找,请教朋友,总结出一些需要禁止的东西:

<style>
  body {
    -webkit-touch-callout: none !important;
    -webkit-overflow-scrolling: touch;
  }
  img,a{
    pointer-events: none;
  }
  .long{
    -webkit-user-select: none;
  }
</style>


body里的东西,不用应该是可以去掉的(我项目需要),这里pointer-events:none;非常重要(因为上下左右肯定会有图的),.long不用多说,是我demo的button按钮,感兴趣的可以深入研究一下这些css,挺有趣的。

说了这么多废话,还是直接上代码吧,新需求来了,我要去搬砖了哭

<!DOCTYPE html>
<html lang="en"><head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
  <title>长按</title>
  <style>
    body {
      -webkit-touch-callout: none !important;
      -webkit-overflow-scrolling: touch;
    }
    img,a{
      pointer-events: none;
    }
    .long{
      -webkit-user-select: none;
    }
  </style>
  <script src="jquery-3.0.0.min.js"></script>  //当然也可以引入绝对路径
<body>
<div style="margin-left: 200px;margin-top: 100px"><button class="long" style="width:100px;height:100px; user-select: none;"></button></div>
<div style="margin-top: 100px;margin-left: 100px"><span id="num" style="font-size: 100px;">5</span></div>
<script>
  <!--阻止默认行为,相当于鼠标右键-->
  window.document.oncontextmenu = function (e) {
    e.preventDefault();
  };
  var $long = $('.long');
  var timer = null;
  $long.on('touchstart', function(){
    plus('#num');
  });
  $long.on('touchend', function(){
    clearTimeout(timer);
  });

  function plus(ele){
    var num = parseInt($(ele).text());
    $(ele).text(++num);
    timer = setTimeout(function(){
      plus(ele);
    }, 200);
  }
</script>
</body>
</html>
总结:做完发现不难,就花了点时间做个记录,自己有时间也需要去深入学习css的一些原始的东西了,也希望有需要的小伙伴能省下一些时间,早点下班


<think>首先,用户的问题是:“我想在H5手机端开发中去除div盒子的边框 请问H5移动端开发 div元素去除边框”。这涉及到在H5移动端开发中移除div元素的边框。 根据系统级指令,我需要: - 使用$...$格式表示行内数学表达式(但这里可能不涉及数学)。 - 独立公式使用$$...$$格式(同样,可能不适用)。 - LaTeX语法正确(在代码块中)。 - 使用中文回答。 - 生成相关问题。 - 在引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用:引用[1]到[5]。 从引用中,我可以提取相关信息: - 引用[1]:提到设置-webkit-tap-highlight-color的alpha值为0去除点击边框。 - 引用[2]:展示了一个使用伪元素和transform去除像素边框的例子。 - 引用[3]:提到-webkit-touch-callout: none; 禁止按菜单栏。 - 引用[4]:关于rem单位。 - 引用[5]:包括输入框字体颜色设置和-webkit-text-size-adjust,以及再次提到去除边框。 用户的问题是关于去除div盒子的边框。边框可能指的是CSS的border属性,或者是点击时出现的边框(如高亮效果)。 关键点: - 如果是正常的CSS边框,使用border: none; 或 border-width: 0;。 - 如果是点击时出现的边框,如引用[1]提到的,使用-webkit-tap-highlight-color: transparent; 或 rgba(0,0,0,0);。 在引用[5]中,明确提到“android系统中元素被点击时产生边框”,并建议设置-webkit-tap-highlight-color。 用户说“div盒子的边框”,可能包括两种: 1. 静态边框(CSS border)。 2. 动态边框(点击时的高亮效果)。 我需要覆盖这两种情况。 回答结构: 1. **理解问题**:解释边框的可能来源。 2. **解决方案**: - 对于CSS边框:使用CSS属性如border: none;。 - 对于点击高亮边框:使用-webkit-tap-highlight-color: transparent;。 3. **提供代码示例**:在代码块中展示如何实现。 4. **注意事项**:提到跨浏览器兼容性。 5. **生成相关问题**:在最后添加相关问题。 参考引用: - 引用[1]:关于去除点击边框。 - 引用[2]:关于像素边框的处理。 - 引用[5]:再次确认去除点击边框的方法。 所以,在回答中,我会自然地引用这些。 最终回答大纲: - 开头:确认问题。 - 步骤1:去除静态边框。 - 步骤2:去除点击高亮边框。 - 代码示例。 - 结尾:总结。 - §§相关问题§§:生成3个相关问题。 相关问题想法: 1. 如何确保边框去除在iOS和Android上一致? 2. 其他移动端H5开发常见问题。 3. 如何优化移动端UI交互? 使用中文。</think>### 去除H5移动端开发中div元素的边框 在H5移动端开发中,去除div盒子的边框通常涉及两种情况:一是移除CSS设置的静态边框(如`border`属性),二是移除用户点击时系统自动生成的高亮边框(如Android或iOS设备上的半透明遮罩)。下面我将逐步解释解决方案,并提供代码示例。所有方法均基于CSS实现,兼容主流移动浏览器(如Chrome、Safari)。 #### 步骤1: 去除静态CSS边框 如果div的边框是由CSS的`border`属性添加的(例如,在代码中设置了`border: 1px solid #000;`),直接通过CSS覆盖即可。使用`border: none;`或`border-width: 0;`来彻底移除边框。 ```css /* 去除div的静态边框 */ div { border: none !important; /* 使用!important确保优先级 */ } ``` - **注意**:如果边框是使用伪元素(如`::after`或`::before`)实现的(常见于细线边框优化),需额外移除伪元素样式[^2]。例如: ```css div::after { content: none !important; /* 禁用伪元素 */ } ``` #### 步骤2: 去除点击时的高亮边框 在移动端,用户点击div时,系统可能自动添加高亮效果(如Android的灰色遮罩或iOS的蓝色边框)。这需要通过CSS的`-webkit-tap-highlight-color`属性处理,将其设置为透明或完全透明。 ```css /* 去除点击高亮边框 */ div { -webkit-tap-highlight-color: transparent; /* 或 rgba(0, 0, 0, 0) */ tap-highlight-color: transparent; /* 标准属性,部分浏览器支持 */ } ``` - **为什么有效**:移动浏览器(如WebKit内核)默认使用`-webkit-tap-highlight-color`来渲染点击反馈,将alpha值设为0(透明)即可禁用此效果[^1][^5]。 - **兼容性建议**: - Android设备:此方法能有效去除大多数厂商的自定义高亮效果。 - iOS设备:如果点击后仍有残留边框,可添加`outline: none;`作为补充: ```css div { outline: none; /* 移除iOS的焦点边框 */ } ``` - 测试建议:在真机(Android和iOS)上测试,确保覆盖不同系统版本。 #### 完整代码示例 以下是一个完整的CSS示例,适用于H5页面中的div元素: ```html <style> /* 移除所有边框类型 */ .no-border-div { border: none !important; /* 去除静态边框 */ -webkit-tap-highlight-color: transparent; /* 去除点击高亮 */ outline: none; /* 辅助去除焦点边框 */ /* 可选:添加其他样式确保布局稳定 */ -webkit-user-select: none; /* 防止按菜单栏出现[^3] */ user-select: none; } </style> <div class="no-border-div">这个div元素无任何边框</div> ``` - **测试提示**:在移动设备上点击div,确认无灰色遮罩或边框出现。如果问题未解决,检查是否有父元素继承边框样式,或使用浏览器开发者工具(如Chrome DevTools)调试。 #### 注意事项 - **性能影响**:移除边框通常不会影响性能,但过度使用`!important`可能导致CSS维护困难。 - **跨平台一致性**:不同设备(如华为、小米、iPhone)可能有细微差异,建议使用真机测试工具(如BrowserStack)验证[^5]。 - **替代方案**:如果边框是图片或背景导致的,使用`background: none;`或`background-image: none;`。 通过以上步骤,您可以有效去除div元素的边框。如果问题复杂或涉及特定框架(如React Native),可提供更多上下文以便进一步解答。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值