聊一聊兼容移动端的那些的事情

629 阅读3分钟

最近在做移动端的项目,踩了许多坑,下面就是一些总结

2019 年 11 月 21 日

px 适配

关于适配网上有很多文章总结了,这里就不做概括了,简单来说如果为了兼容低版本一些的可以用 rem 布局,如果对兼容没有太多要求可以尝试一下vw、vh适配。

1px

出现的问题跟设备像素比有关,设计稿一般为 750,那么 375 的屏幕 1px 就是 0.5px,安卓对 0.5px 的写法并不支持,解决的方法下面这篇文章概括很全面 移动端 1px 解决方案

click 点击延迟事件

一般而言这个问题只有比较老的浏览器才会出现,很不幸我就遇到了,出现的原因跟事件的执行有关,当你点击的时候浏览器需要判断后面会不会继续跟一个点击,如果是就执行双击缩放的功能,下面说一下常见的解决方法

浮层滚动

浮层弹出对话框之类的都是很常见的需求,我们一般而言会用fixed来实现,不过在移动端上依然是可以滚动的,下面就分享一种方法

var bodyEl = document.body;
var top = 0;

function stopBodyScroll(isFixed) {
  if (isFixed) {
    top = window.scrollY;
    bodyEl.style.position = "fixed";
    bodyEl.style.top = -top + "px";
  } else {
    bodyEl.style.position = "";
    bodyEl.style.top = "";
    // 回到原先的top
    window.scrollTo(0, top);
  }
}

其他文章推荐

ios 底部安全区

出现原因是因为 ios 取消了物理按键改用虚拟按钮

安卓 fixed 定位输入框输入出现错位

不要脸推荐一下自己之前写的文章,这个是安卓上才有,ios 不存在,建议的话就是不要使用fixed定位改用absolute;

position:fixed/absolute 随屏幕滚动

可以在fixed/absolute样式内添加

overflow-y: auto;
-webkit-transform: translateZ(0);

ios 点击失效

简单一些可以直接在点击的元素上设置

cursor: pointer;

前进后退事件(暂时没找到实现方法)

最近在有一个需求就是从 A 文件 跳转到 B 文件,在 B 执行了一些请求之类的操作,但是 A 也要刷新,当然是不同的页面不是 SAP 的单页面,当时想了一下直接通过监听popstate事件不就可以获取么

<!-- 缩减代码 -->
<a href="help.html">子页面</a>
<script>
  window.onpopstate = function(event) {
    // 执行一些操作
  };
</script>

不过很遗憾这种方法是不行的,因为popstate事件针对的是 history对象发生变化时,另外,该事件只针对同一个文档,如果浏览历史的切换,导致加载不同的文档,该事件也不会触发,类似的还有popstate也不会触发,暂时没找到解决方法,如果有找到解决方法的小伙伴分享一下下。

最后

如果为内联样式动态辅助的时候注意兼容性的写法,常见的浏览器前缀如下

["Moz", "Webkit", "O", "ms", "Khtml"];

推荐一篇文章,觉得写得十分不错 前端认知:PPI、DPI、设备像素等概念