当前位置: 首页 > news >正文

【杂谈】小记一个ios11的bug

  前段时间,除了apple发布了新的硬件之外,同步还发布了新的操作系统,IOS11,当大家都将注意力聚焦在那个奇怪的刘海该如何适配的时候,笔者的项目在适配IOS11却出现了其他的问题。

  众所周知,IOS在滚动的时候是不能执行js的,这虽然是它内部的实现导致的,也为了解决这一问题,它特地推出的position:sticky属性,来兼容一些对动态设置fixed的场景,不过,当笔者的测试机升级到了IOS11的时候,一切又不一样了:    

  在ios11上打开滚动以上的页面(如果看不到效果可以访问这个链接),会发现页面上的fixed的button如果滚动得过快则会消失,当滚动停止之后又会再次出现,一个非常奇怪的问题,经过笔者和团队的小伙伴的多方调试参考,发现主流的解决方案有两种:

  1、直接避免用浏览器的滚动事件,完全使用touch事件模拟滚动,也就是这篇文章所介绍的;

  2、另一种就比较有趣了,能够在改动比较小的情况下修复这个IOS11的这个bug,请看这个链接

  其实原理很简单,笔者经过一些调试发现,只要滚动的元素用的不是window的滚动条,且fixed的元素不在滚动元素内部,就能够比较方便的规避IOS11的这个缺陷:

overflow: auto;
-webkit-overflow-scrolling: touch;    
height: 100vh;

  核心代码就以上的3行,目的就是构造一个和body一样的容纳滚动条的容器,当然,由于这样设置之后,ios下的滚动体验比较差,还需要加上一个第二行的那句hack,相关文章可参考这里,这样,就在最小改动的基础上,保证了fixed的元素能够正常的显示。

  虽然大体上解决了滚动的问题,不过由于ios的一些特殊机制,笔者发现,实际使用上即使是第二种方案也有一定的缺陷(不使用window的滚动条会导致在容器滚动的时候会转移焦点,然后再一次滚动外层的时候焦点又会再一次转移,导致再想继续滚动内部滚动条的话会产生一些额外操作,使用上最好避免有内外都要触发滚动事件的情况)。

  简单总结一下,2017年即将过去,虽然大圈子内对于适配新机器刘海的情况给了很多的解决方案,但是当真正落实到具体问题的时候,笔者发现。。硕大的前端圈子竟然毫无声响,反而是native的同学已经碰到了很多类似的问题,并开展了热烈的讨论。。这也是值得人深思的问题。

转载于:https://www.cnblogs.com/mfoonirlee/p/7680646.html

相关文章:

  • libgdx游戏引擎教程
  • android用户界面之WebView教程实例汇总
  • [译] 为多个品牌和应用构建 React 组件
  • 高级软件工程第三次结对作业
  • Sequelize 中文文档 v4 - Getting started - 入门
  • crontab命令详解 含启动/重启/停止
  • ios开发学习--选项卡(Tab Bar) 效果源码分享--系列教程
  • MySQL几个简单SQL的优化
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • C++常用代码优化策略
  • 数据库的备份与恢复
  • mybatis的mapper的代理学习
  • R语言学习笔记(二)导入数据
  • Android RecyclerView下拉刷新、上拉加载更多、到底自动加载更多
  • linux三剑客之awk从入门到精通
  • 【node学习】协程
  • 【前端学习】-粗谈选择器
  • Meteor的表单提交:Form
  • Node + FFmpeg 实现Canvas动画导出视频
  • RxJS: 简单入门
  • Spring Boot MyBatis配置多种数据库
  • vue中实现单选
  • Web标准制定过程
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 想写好前端,先练好内功
  • const的用法,特别是用在函数前面与后面的区别
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​【已解决】npm install​卡主不动的情况
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $refs 、$nextTic、动态组件、name的使用
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (原)Matlab的svmtrain和svmclassify
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .bat批处理出现中文乱码的情况
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net Application的目录
  • @Repository 注解
  • []FET-430SIM508 研究日志 11.3.31
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [Android]使用Android打包Unity工程
  • [C++] Windows中字符串函数的种类
  • [C++基础]-初识模板
  • [Contest20180313]灵大会议
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)
  • [hive] 窗口函数 ROW_NUMBER()
  • [iOS]-UIKit
  • [J2ME]url请求返回参数非法(java.lang.illegalArgument)
  • [JavaWeb]——获取请求参数的方式(全面!!!)
  • [json]定义、读写