300ms 延迟问题

300ms 延迟问题产生原因?

  • 早在 2007 年初,苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设备所设计的。于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点的问题;

  • 这当中最出名的,当属双击缩放( double tap to zoom ),这也是会有上述 300 毫秒延迟的主要原因;

  • 双击缩放,顾名思义,即用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例,那么这和 300 毫秒延迟有什么联系呢?

  • 假定这么一个场景: 用户在 iOS Safari 里边点击了一个链接。由于用户可以进行双击缩放或者双击滚动的操作,当用户一次点击屏幕之后,浏览器并不能立刻判断用户是确实要打开这个链接,还是想要进行双击操作;因此,iOS Safari 就等待 300 毫秒,以判断用户是否再次点击了屏幕;

  • 鉴于 iPhone 的成功,其他移动浏览器都复制了 iPhone Safari 浏览器的多数约定,包括双击缩放,几乎现在所有的移动端浏览器都有这个功能;

如何解决 300ms 延迟问题?

  1. 方法一:禁止缩放(在 meta 标签中设置)

    <meta name="viewport" content="user-scalable=no,initial-scale=1,maximun-scale=1"/>
    
    • 在 2014 年,从 Chrome32 开始 Google 已经解决这个 300ms 延迟问题,只要定义了 viewport 就不会有 300ms 延迟问题;
    • 页面不可缩放,这样双击缩放功能就没有意义了,此时浏览器可以禁用默认的双击缩放行为并且去掉 300ms 的点击延迟;
    • 缺点:必须完全禁用缩放来达到目的,但是通常情况下,我们还是希望能通过双指来进行缩放的;
  2. 方法二:使用移动端专属的触摸事件,使用触摸事件的能够提高页面响应速度,带来更好的用户体验;

点击穿透问题

点击穿透问题?

所谓事件穿透,是移动端上面一个非常有名的 Bug,其出现场景为:有两层重叠的元素,上面的元素有 touch 事件(点击后要消失),下面是一个默认会触发 click 事件的元素(a、表单元素、带 click 事件的元素),此时点击上一层的元素,下一层也同样会被点击;

如何解决点击穿透问题?

通过 e.preventDefault( ) 方法来阻止默认事件;

解决 1px 问题

什么是 1px 问题?

所谓 1px 问题,是因为设备像素和 CSS 像素并不是完全的 1:1 的关系,有可能能是 1:2 甚至是 1:3,因此我们按照以前在 PC 端的编程经验,书写 1px 可能会比实际的看着要粗一些;

1px 问题解决方案?

使用 JavaScript 计算 rem 基准值;

(function (doc, win, designWidth) {
  var html = doc.documentElement; // 获取 html 根元素,一会儿要设置根元素的字体大小

  function refreshRem() {
    var width = html.clientWidth; // 获取 CSS 像素(设备的宽度)
    if (width = designWidth) {
      // 说明设备宽度都已经大于设计稿,测量出来是多少就是多少
      html.style.fontSize = '100px';
    } else {
      // 计算比例
      // 拿 iPhone6(375px) 375px/750px = 0.5 - 1/DPR
      // 相当于现在每一列的宽度为 0.5px,相当于分成了 375px/0.5 = 750列
      // 但是现在我们设置 font-size 为 0.5px 浏览器不允许设置这么小的,因此乘以一个 100
      // 每一列的宽度就变为了 50px,375px/50 = 7.5列
      // 假设设计稿量出来的是 375px->设备像素187.5px->187.5/50(每一列的宽度)->3.75(所占列数)->3.75rem
      // 假设量出来是 100px -> 1列
      // 100px->50px/50px->1->1rem
      html.style.fontSize = 100 * (width / designWidth) + 'px';
    }
  }

  doc.addEventListener("DOMContentLoaded", refreshRem);
})(document, window, 750);

4. 移动端 APP 有哪些类型,区别是什么?

移动端应用细分为三大类:WebAppNativeAppHybridApp
WebApp、NativeApp 和 HybridApp 三类移动应用的特点:

  • Web App 指的是移动端的 Web 浏览器,其实和 PC 端的 Web 浏览器没有任何区别,只不过 Web 浏览器所依附的操作系统不再是 Windows 和 Linux 了,而是 iOS 和 Android,Web App 采用的技术主要是,传统的 HTML、JavaScript、CSS 等 Web 技术栈,当然现在 HTML5 也得到了广泛的应用。另外,Web App 所访问的页面内容都是放在服务器端的,本质上就是 Web 网页,所以天生就是跨平台的。不能在商店中下载,只能在移动设备浏览器中打开
  • Native App 指的是移动端的原生应用,对于 Android 是 apk,对于 iOS 就是 ipa。Native App 是一种基于手机操作系统(iOS 和 Android),并使用原生程序编写运行的第三方应用程序,Native App 的开发,Android 使用的语言通常是 Java,iOS 使用的语言是 Objective-C。通常来说,Native App 可以提供比较好的用户体验以及性能,而且可以方便地操作手机本地资源,可在应用商店内进行下载,以 app 的形式打包
  • Hybrid App,俗称混血应用,是介于 Web App 和 Native App 两者之间的一种 App 形式,Hybrid App 利用了 Web App 和 Native App 的优点,通过一个原生实现的 Native Container 展示 HTML5 的页面。更通俗的讲法可以归结为,在原生移动应用中嵌入了 Webview,然后通过该 Webview 来访问网页,HybridApp 具有维护更新简单,用户体验优异以及较好的跨平台特性,是目前主流的移动应用开发模式,可在应用商店内进行下载,以 app 的形式打开
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 300ms 延迟问题
    1. 1.1. 300ms 延迟问题产生原因?
    2. 1.2. 如何解决 300ms 延迟问题?
  2. 2. 点击穿透问题
    1. 2.1. 点击穿透问题?
    2. 2.2. 如何解决点击穿透问题?
  3. 3. 解决 1px 问题
    1. 3.1. 什么是 1px 问题?
    2. 3.2. 1px 问题解决方案?
  4. 4. 4. 移动端 APP 有哪些类型,区别是什么?