趁着2018年的最后一天尚未过去,就写篇文章吧,主要是来简单总结下移动端开发中存在的问题吧;固然移动端的问题确定不止下面的问题,未完待续。。。css
移动端h5展现通常经过设置meta的viewport
来规范页面的展现效果,常使用以下配置:html
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, maximum-scale=1.0 user-scalable=no">
上面的做用之一就是禁止用户缩放,大部分设备下是没有问题的,可是:前端
在IOS >= 10 系统的safari下,user-scalable=no已不起做用ios
既然缩放有兼容性问题,那么能够经过js来完成禁止缩放,好比下面:git
// 禁用双指缩放 document.documentElement.addEventListener('touchstart', function (event) { if (event.touches.length > 1) { event.preventDefault(); } }, false); // 禁止双击缩放 var lastTouch = 0; document.documentElement.addEventListener('touchend', function (event) { var now = Date.now(); if (now - lastTouch <= 300) { event.preventDefault(); } lastTouch = now; }, false);
input输入框在ios下会默认有顶部内阴影的问题,在Android平台下没有这个问题,ios下的内阴影以下图所示:github
解决办法为input添加以下样式便可:web
input[type="text"] { -webkit-appearance: none; }
所谓弹框滚动穿透问题,是指移动端弹出fixed弹窗后,在弹窗上滑动会致使下层的页面跟着滚动,这个叫 “滚动穿透”。npm
具体能够参考这篇文章移动端滚动穿透问题,本人项目采用跟文章中的终极解决方案相似方式解决。app
在实现图片上传的功能时,由于如今手机照片动不动就上兆的大小可能致使上传比较慢,因此前端使用FileReader
来快速预览本地上传的图片;可是最近遇到一个问题,客户使用上传图片预览时,图片出现了不一样程度的旋转,相似以下右图所示出现了90度的旋转。
.net
这是什么状况,经过查阅相关资料发现这跟图片的Exif信息有关。Exif
的全称是 Exchangeable image file format,的确是用于保存照片的一些元数据信息,如照片的拍摄设备,拍摄时间,是否使用闪光灯等。其中有一项就是 Orientation (rotation),很明显应该就是它了。
因此,想要获取图片的旋转角度,就须要获取图片Exif元数据信息;正好有一个exif-js
的npm包,能够获取这些信息。获取Orientation信息后就能够对图片进行旋转了。例如:
上面代码在图片支持exif信息的状况下能够解决,可是对于一些图片不支持exif的状况,这篇文章 笔记:使用 JavaScript 读取 JPEG 文件 EXIF 信息中的 Orientation 值提供了比较详细的解决方案;其中有一个比较hack的方法,即在 html 中建立一个 iframe,再从中引用这张 img,图片会以正确的方向显示