移动端吸顶、动画、浏览器层模型以及相关总结

本文总结了移动端开发中遇到的吸顶效果、展开收缩动画的实现及其性能问题。探讨了浏览器的主线程与合并线程、渲染层模型以及硬件加速在提升动画性能中的作用。通过实例分析了`position: sticky`、监听`scroll`事件、`-webkit-overflow-scrolling: touch`以及`requestAnimateFrame`在不同平台的表现和优化策略,强调了优雅降级的重要性。
摘要由CSDN通过智能技术生成

总结

问题归纳

  1. 顶部通知公告条自动吸顶判断

  2. 点击自动展开动画,兼容Android与ios

  3. 页面中的图标与文字对齐(垂直居中对齐、水平居中对齐)

  4. 移动端居中、间距自适配

  5. h5页面自定义native顶部导航条

知识点归纳

  • 惯性滑动的事件触发机制

  • iscroll模拟滚动,滚动事件在安卓中未被触发

  • requestAnimateFrame(fn),优化动画性能

  • position:sticky; 滚动浮屏显示

  • transition:height 1s; 安卓卡顿

  • box、flexbox、flex布局,兼容性差异

  • rem移动端适配方案,font-size计算

  • JSBridge h5与原声native的通信

展开收缩

demo2.gif

在移动端要求实现点击后,展开或收缩内容区域,承载app在ios系统中使用的webkit 602.4.6内核,安卓中使用的U3 1.0.0.100内核。

尝试利用css3的动画效果,利用 transition:height .5s 进行高度过渡,但是该效果在安卓机上出现了明显的卡顿现象。

在硬件的配置上来说,用于测试的安卓机并不差,因此猜测出现卡顿现象的原因在于内核的渲染机制上,在网上恶补了下相关知识后终于有了发现。

主线程与合并线程

在浏览器中,包含这三个线程:

  1. JS引擎线程

  2. 事件触发线程

  3. GUI渲染线程

其中GUI渲染与JS执行引擎是互斥的,也就是存在js执行阻塞界面渲染的情况。

在这三个线程之上,浏览器拥有两个重要的执行线程来渲染页面:

  1. 主线程 (Main Thread)

  2. 合并线程 (Compositor Thread)

主线程(Main Thread)主要负责Js的执行、布局样式的计算以及绘制(paint,将图像层的内容绘制到位图中),故应包含JS引擎和事件触发线程。

合并线程(Compositor Thread)利用GPU来绘制位图到屏幕以及对位图的显示进行计算判断,故应包含GUI渲染线程。

一个简单的滑动例子便能说明其中的区别。

demo1.png

用户在滑动时,合并线程将直接利用GPU对之前的位图进行计算和展示,并不需要主线程的参与,而若是绑定了事件处理器,则会如下图所示。

demo2.png

主线程会参与执行对应的事件处理函数,合并线程会等待函数执行完成后再继续工作,显示设备刷新频率一般在50~60,那么60fps是能够得到最佳的动画显示,也就是说处理函数必须是在 1000 / 6

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值