移动端和PC端开发中的区别及兼容性tips

1,620 阅读2分钟

分享下移动端和 PC 端开发中的区别, 希望对大家有所帮助~~

移动端和 PC 端的区别

1. 引入 fastClick

  • 移动端点击事件 300ms 延迟
import fastclick from "fastclick";
fastclick.attach(document.body);
  • fastclick 的原理: 监听 touchend 事件,取消原本 300ms 后真正的 click 事件,自己生成分发一个点击事件。

2. meta 标签

  <meta name="viewport"
    content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, viewport-fit=cover"/>

3. postcss-px-to-viewport

移动端直接使用 px 单位

// .postcssrc.js
module.exports = {
  plugins: {
    autoprefixer: {}, // 用来给不同的浏览器自动添加相应前缀,如-webkit-,-moz-等等
    "postcss-px-to-viewport": {
      unitToConvert: "px", // 要转化的单位
      viewportWidth: 375, // UI设计稿的宽度
      unitPrecision: 6, // 转换后的精度,即小数点位数
      propList: ["*"], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
      viewportUnit: "vw", // 指定需要转换成的视窗单位,默认vw
      fontViewportUnit: "vw", // 指定字体需要转换成的视窗单位,默认vw
      selectorBlackList: ["wrap"], // 指定不转换为视窗单位的类名,
      minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换
      mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认false
      replace: true, // 是否转换后直接更换属性值
      exclude: [/node_modules/], // 设置忽略文件,用正则做目录名匹配
      landscape: false // 是否处理横屏情况
    }
  }
};

  • 原理: 单位转化成了视窗单位 vw
  • 注意事项: 使用行内式的 px 单位无法被转化

4. v-console 移动端控制台, 查看报错及接口信息等

// 开发环境下面使用vConsole进行调试
if (process.env.NODE_ENV === "development") {
  const VConsole = require("vconsole");
  new VConsole();
}

移动端兼容性问题

1. 安卓: vue-draggable 插件的兼容性问题

  • 问题: 使用的是 draggable 插件, 点击删除时, 一定几率下同时触发拖拽事件
  • 解决方案:
// 使用类包裹拖拽div, 让删除事件和拖拽事件分开
:options="{ animation: 300, handle: '.img-wrapper' }"

2. ios: 底部栏无法下沉

  • 问题: iphoneX 以上机型, 取消了 HOME 键, 非安全区域需要重新配置
  • 解决方案:
在meta标签中, 添加viewport-fit=cover  // 底部栏下沉
在底部栏添加 padding-bottom: constant(safe-area-inset-bottom);
  padding-bottom: env(safe-area-inset-bottom) // 调整安全区域高度

PC 端兼容性问题

1.IE 上下载文件显示 400

不兼容版本

  const url = `${PRE}/gzw-api/notice/file/download.do?fileName=${file.name}&url=${file.outerUrl}`;
  window.open(url, "_self");

兼容版本

  const url = `${PRE}/gzw-api/notice/file/download.do?fileName=${encodeURI(file.name)}&url=${encodeURI(file.outerUrl)}`;
  window.open(url, "_self");

结论: 在 IE 上使用 window.open 直接下载文件时,需要对文件名,链接进行转义,原因是 IE 无法自动转义