专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
程序员的那些事  ·  OpenAI ... ·  18 小时前  
程序猿  ·  “未来 3 年内,Python 在 AI ... ·  3 天前  
程序员的那些事  ·  惊!小偷“零元购”后竟向 DeepSeek ... ·  2 天前  
程序员小灰  ·  DeepSeek做AI代写,彻底爆了! ·  4 天前  
51好读  ›  专栏  ›  SegmentFault思否

整理了几个经常在 H5 移动端开发遇到的东西!

SegmentFault思否  · 公众号  · 程序员  · 2019-10-13 11:45

正文

本文原载于 SegmentFault 社区

专栏:不为人知的前端技巧

作者:聪明的汤姆



1、弹出数字键盘



<input type="tel">


<input pattern="\d*">
安卓 IOS 的表现形式应该不一样,大家可以自己试试。当运用了正则 pattern 后,就不用关注 input 的类型了😂

2、调用系统的某些功能



<a href="tel:10086">打电话给: 10086a>


<a href="sms:10086">发短信给: 10086a>


<a href="mailto:[email protected]">发邮件给:[email protected]a>


<input type="file" accept="image/*">


<input type="file" accept="video/*">


<input type="file" multiple>

同上🤦‍♂️


3、打开原生应用


<a href="weixin://">打开微信a>
<a href="alipays://">打开支付宝a>
<a href="alipays://platformapi/startapp?saId=10000007">打开支付宝的扫一扫功能a>
<a href="alipays://platformapi/startapp?appId=60000002">打开支付宝的蚂蚁森林a>

这种方式叫做URL Scheme

是一种协议,一般用来访问APP或者APP中的某个功能/页面(如唤醒APP后打开指定页面或者使用某些功能)😒
URL Scheme 的基本格式如下:
行为(应用的某个功能/页面)
|
scheme://[path][?query]
| |
应用标识 功能需要的参数
一般是由 APP 开发者自己定义,比如规定一些 参数 或者 路径 让其他开发者来访问,就像上面的例子🍤
注意事项:
  • 唤醒 APP 的条件是你的手机已经安装了该 APP
  • 某些浏览器会禁用此协议,比如微信内部浏览器(除非开了白名单)



后面应该会专门写一篇文章用来探讨唤醒 APP 😒

4、解决 active 伪类失败


body 注册一个空事件即可😂
5、忽略自动识别


<meta  name="format-detection" content="telephone=no">


<meta name="format-detection" content="email=no">
当页面上的内容包含了 手机号/邮箱 等,会自动转换成可点击的链接😁
比如你有如下代码:
<p>13192733603P>
但是有些浏览器会识别为手机,并且可以点击拨号。
6、解决 input 失焦后页面没有会弹



一般出现在 IOS设备中的微信内部浏览器 ,出现的条件为:
  • 页面高度过小
  • 聚焦时,页面需要往上移动的时候
所以一般 input 在页面上方或者顶部都不会出现无法回弹🤣
解决办法为,在聚焦时,获取当前滚动条高度,然后失焦时,赋值之前获取的高度:
<template>
  <input type="text" @focus="focus" @blur="blur">
template>

<script>
  export default {
    data() {
      return {
        scrollTop0
      }
    },

    methods: {
      focus() {
        this.scrollTop = document.scrollingElement.scrollTop;
      },

      blur() {
        document.scrollingElement.scrollTo(0this.scrollTop);
      }
    }
  }
script>


7、禁止长按



以上行为可以总结成这几个 (每个手机以及浏览器的表现形式不一样) 长按图片保存 长按选择文字 长按链接/手机号/邮箱时呼出菜单
想要禁止这些浏览器的默认行为,可以使用以下 CSS
// 禁止长按图片保存
img {
  -webkit-touch-callout: none;
  pointer-events: none; // 像微信浏览器还是无法禁止,加上这行样式即可
}

// 禁止长按选择文字
div {
  -webkit-user-select: none;
}

// 禁止长按呼出菜单
div {
  -webkit-touch-callout: none;
}


8、滑动不顺畅,粘手
一般出现在 IOS 设备中,自定义盒子使用了 overflow: auto || scroll 后出现的情况。
优化代码:
div {
  -webkit-overflow-scrolling: touch;
}


9、屏幕旋转为横屏时,字体大小会变
具体出现的情况不明😒,有时候有有时候没有,欢迎指出。
优化代码:
* {
  -webkit-text-size-adjust100%;
}


10、最简单的 rem 自适应
大家都知道, rem 的值是根据 根元素的字体大小 相对计算的,但是我们每个设备的大小不一样,所以 根元素的字体大小 要动态设置😂
html {
 font-sizecalc(100vw / 3.75);
}

body {
  font-size: .14rem;
}
效果如下:
像我一般的话,直接搞 lib-flexible postcss-pxtorem 就完事啦!
11、滑动穿透






请到「今天看啥」查看全文