предисловие
Юный герой, пожалуйста, останься, это должно быть судьба встретиться друг с другом, я дам тебе копию "Тайной книги о прохождении ямы"
Замабу
Шаг 1
ios загрузка фото вертикального экрана, изображение повернуто
решение
// 几个步骤
// 1.通过第三方插件exif-js获取到图片的方向
// 2.new一个FileReader对象,加载读取上传的图片
// 3.在fileReader的onload函数中,得到的图片文件用一个Image对象接收
// 4.在image的onload函数中,利用步骤1中获取到的方向orientation,通过canvas旋转校正,重新绘制一张新图
// 注意iPhone有3个拍照方向需要处理,横屏拍摄,home键在左侧,竖屏拍摄,home建上下
// 5.将绘制的新图转成Blob对象,添加到FormData对象中,然后进行校正后的上传操作
// 代码有点杂,待整理后上传,网上应该是可以找到的
Шаг 2
ios: элементы DOM фиксируются с одной стороны и прокручиваются с другой стороны, и прокрутка сильно застревает
// (横向滚动用的多些)简单粗暴的办法,样式添加如下属性
-webkit-overflow-scrolling: touch;
Шаг третий
Некоторые сторонние методы ввода для мобильных телефонов могут привести к переполнению страницы в Интернете.
// 特定需求页面,比如评论页面,输入框在顶部之类的
const interval = setInterval(function() {
document.body.scrollTop = 0;
}, 100)
// 注意关闭页面或者销毁组件的时候记得清空定时器
clearInterval(interval);
Шаг 4
Адаптация iPhoneX
// 1.viewport meta 标签增加属性viewport-fit=cover
<meta name="viewport" content="width=device-width, viewport-fit=cover, xxxx">
// 2.body元素增加样式
body {
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
// 3.如有fixed底部的元素,也增加上面样式
xxx {
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
background-color: #fff; // 记得添加background-color,不然会出现透明镂空的情况
}
Шаг 5
Некоторые модели не поддерживают атрибут плаката тега видео, особенно Android.
用图片元素 <img />来代替poster
播放前显示<img />,隐藏 <video />
播放后显示<video />,隐藏 <img />
Шаг 6
Проблема с настройкой цвета прозрачности CSS
Android部分不支持 hex写法,推荐用rgba的写法
#0000009c --> rgba(0, 0, 0, 0.61)
Шаг 7
Поддержка Flex для более ранних версий ios и Android
使用postcss的autoprefixer插件,自动添加浏览器内核前缀,
并且增加更低浏览器版本的配置,自动添加flex老版本的属性和写法
autoprefixer({
browsers: [
'iOS >= 6', // 特殊处理支持低版本IOS
'Safari >= 6', // 特殊处理支持低版本Safari
],
}),
Шаг 8
Страница ios возвращается к длинному списку и имеет проблему с серой окклюзией.
демонстрационный снимок экрана
方案1:对列表数据进行缓存,比如redux之类的用法。
方案2:回退时,跳到页面顶部。
const timer = setTimeout(() => {
window.scrollTo(0, 1);
window.scrollTo(0, 0);
}, 0);
Шаг 9
Проблема NAN преобразования даты в iOS
将日期字符串的格式符号替换成'/'。
栗子:'yyyy-MM-dd'.replace(/-/g, '/')
Шаг 10 (Реакция)
Исключение из-за неизвестной ошибки, приводящее к сбою страницы, пустой
React 16.x 增加了componentDidCatch() 生命周期方法
捕获全局异常来进行页面的友好提示(具体用法网上有很多资料)
Завершенный набор
Требуется много практики, чтобы продвинуться
Передние осадные львы ② группа: 592688854. Добро пожаловать всем героям боевых искусств, которые хотят присоединиться.