吸顶处理兼容iOS和Android

本文主要探讨了在前端开发中遇到的页面滑动时导航吸顶处理的问题。在Android上此功能正常工作,但在iOS上出现了样式问题。解决方案是利用iOS特有的absolute: sticky定位进行兼容性处理。文章详细解释了sticky定位的工作原理,并提供了针对不同设备的吸顶处理方法,包括在Android上使用div包裹并设置高度的策略,以及iOS的吸顶处理代码整合。
摘要由CSDN通过智能技术生成

问题抛出

当页面上滑时,顶部当导航需要进行吸顶处理。滑动过程使用scroll事件监听,当滚动的高度到底一定时,便设置样式 absolute:fixed;top:0px;以吸顶处理。

以上处理在安卓中时完全没有问题的,但是在iOS中缺会出现严重的样式问题:页面滚动过程中并不吸顶。

解决思路

针对iOS做兼容处理。iOS支持一个特殊的定位方式:absolute:sticky;//粘性定位。

sticky 定位

sticky 英文字面意思是粘,粘贴,所以可以把它称之为粘性定位。
position: sticky; 基于用户的滚动位置来定位。
粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。
它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position:fixed;,它会固定在目标位置。
元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。
这个特定阈值指的是 top, right, bottom 或 left 之一,换言之,指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。

div.sticky {
   
    position: -webkit-sticky; /* Safari */
    position: sticky;
    top: 0;
    background-color: green;
    border: 2px solid #4CAF50;
}

解决办法

判断设备类型

const judgeUserAgent = function () {
   
  if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
   
    return 'ios'
  } else if (/(Android)/i.test(navigator.userAgent)) {
   
    return 'android'
  } else {
   
    return 'pc'
  }
}

安卓的吸顶处理

positionSticky (el, top = 0, zIndex = 10) {
   
  const ot = el.offsetTop - top
  const fn = () => {
   
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中实现吸顶态,可以使用RecyclerView和LinearLayout来实现。首先,在activity_main.xml文件中,使用LinearLayout作为根布局,并在其中添加一个RecyclerView作为内容区域。\[1\]然后,创建一个item_title.xml文件,使用LinearLayout作为根布局,并在其中添加一个TextView作为标题显示区域。\[2\]接下来,你可以在MainActivity中编写代码,使用RecyclerView来展示数据,并在适当的位置添加吸顶效果的逻辑。具体的实现方式可以根据你的需求和设计来进行调整。\[3\]这样,你就可以实现Android Studio中的吸顶态效果了。 #### 引用[.reference_title] - *1* *2* [android RecyclerView多布局吸顶效果实现](https://blog.csdn.net/qq_29293605/article/details/121415025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android studio页面布局实现固定顶部和底部导航栏,中间可滑动](https://blog.csdn.net/hjjshua/article/details/124172951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值