Adinnet-Web Adinnet-Web
首页
  • 技术沉淀

    • 技术沉淀
  • 前端文章

    • JavaScript
  • 前端笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 实用技巧
收藏
  • 分类
  • 标签
  • 归档
首页
  • 技术沉淀

    • 技术沉淀
  • 前端文章

    • JavaScript
  • 前端笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 实用技巧
收藏
  • 分类
  • 标签
  • 归档
  • JavaScript文章

  • 学习笔记

  • 技术沉淀

    • CSS矩形绘制
    • 仿微信通讯录
    • 微信小程序订阅消息
    • 保存海报
    • 微信小程序页面弹框
    • 微信小程序在指定距离范围内签到
    • h5嵌套u3d,使用iframe进行交互
    • 前端主导文件处理方法
    • 图片压缩方法封装
    • 金额大写函数
    • 前端主导的小程序一键导航功能
    • uniapp富文本组件(只支持H5)
    • uniapp二次确认弹框组件(依赖于uview)
    • 无缝滚动插件(vue3)
    • H5与unity通信(只针对unity嵌套H5)
    • 辅助触控
    • 关系图
    • h5&svg点赞动效
    • iframe高精地图文件预览
    • 自适应横向瀑布流布局
    • 考试功能
    • 仿小说翻页
    • 富文本
    • h5唤醒App
    • vue3 Count-to数字翻动
    • 小程序图片转base64
    • 第三方应用跳转微信小程序
    • 圆角TabBar
    • 大屏Header
    • Echarts中国地图
    • 使用computed拦截v-model
    • 消息订阅与发布
    • Html相对路径页面跳转
    • Vite打包本地访问
    • H5主题切换
    • 移动端列表分页
    • 每次进入页面都触发的功能(v3)
    • 智能导诊
    • js中几个优雅的运算符使用技巧
    • 其他CSS伪元素
    • 微信浏览器保存canvas海报
    • uniappH5手动拖拽缩放自定义绘制海报
    • uniapp小程序盒子拖拽排序
    • 微信小程序地图的使用
    • css静态漏斗绘制
    • 微信小程序图片流处理
    • ios时间问题
    • 文字围绕效果
    • 表格树动态计算
    • React中useEffect用法
    • React Hooks 陷阱
    • Naive UI修改默认样式
    • vue 根据div id 滚动到指定view到可视视图中
    • js将[1,2,3]排列组合成[1.12.123]
    • 移动端如何加载vite导出dist包
    • TS探索接口、泛型和自定义类型
    • WebSocket中加入Token
    • 幂方程指数衰减
    • pageSpy
    • 表格多条件搜索
    • axios get 请求 url 转码 空格转成+,导致请求失败
    • NaiveUI使用Message组件遇到的问题记录
    • 小程序多盒子拖拽排序
    • 对象快速筛key方法
    • 倒计时
    • nuxt3中的useAsyncData使用详解
    • nuxt3文件式路由
    • 播放amr格式音频
    • echarts瀑布图
    • vue中使用vueuse进行文件导出
    • 分享一个数据整理方法
    • naiveui表格shift多选
    • 数组递归转tree
    • 自定义指令图片懒加载
    • 将数组里面的对象转换成我们需要的键值对
    • 亚马逊云s3上传
    • 上拉加载更多封装
    • JS设计模式总结笔记
    • 适配移动端页面顶部安全区域
      • 【CryptoJS】使用介绍
      • 微信小程序富文本图片点击放大
      • 微信小程序省市区级联选择
      • uniapp拖动排序插件
      • element ui 的树形结构懒加载,局部更新
      • 表单搜索过滤空值
      • 判断设备类型
      • tsconfig配置打包问题
      • vant-uploader上传组件添加长按保存图片
      • BroadcastChannel跨页面通信
      • pnpm安装问题
      • echart阶梯图形绘制
      • js根据对象拼接参数
      • 集成免密登录
      • 输入框输入数字限制
      • js控制全局css变量
      • 流程图
      • 修改npm包
      • tsx在vue3中的应用
      • 109video播放视频流
      • echart默认展示某个点的tooltip
      • 大屏适配几种方案
      • 表单低代码自定义列表页
      • 表单低代码列表页配置端代码
      • 低代码平台使用的一些好用的js方法
      • vue3cookie的使用
      • 原生js下载文件
      • stompjs 创建socket,断线重连机制
      • iframe作为内嵌网页cookie设置
      • 前端对文件内容解析生成特定算法哈希值方法
      • vue3中前端自定义命名文件名称下载文件的方法
      • 前端项目中权限判断的方法配合路由守卫使用
      • 原生table:表格table中thead固定,tbody超出高度出现滚动条
      • vue中使用原生的方法
      • vue3中amchart的初步使用
      • base64图片加水印
      • 手写签名
      • base64转doc文件
    • 前端
    • 技术沉淀
    胡秋
    2024-06-30
    目录

    适配移动端页面顶部安全区域

    适配移动端顶部安全区域。

    1. 使用vant 导航组件,开启刘海屏适配safe-area-inset-top 为true
     <van-nav-bar
          :title="props.title"
          left-arrow
          @click-left="goBack"
          :safe-area-inset-top="true"
          class="navbar"
        >
    
    1
    2
    3
    4
    5
    6
    7

    2,页面给一个顶部的高度padding,一般是导航栏高度44 + 刘海高度。

    .pt-nav {
      //使用vant导航高度变量 + 环境变量safe-area-inset-top iOS 使用 constant 安卓使用 env
      //env() 跟 constant() 需要同时存在,而且顺序不能换。
      padding-top: calc(var(--van-nav-bar-height) + constant(safe-area-inset-top));
      padding-top: calc(var(--van-nav-bar-height) + env(safe-area-inset-top));
      box-sizing: border-box;
    }
    
    1
    2
    3
    4
    5
    6
    7
    //还需要在index.html设置viewport,上面属性才能取到值
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover" />
    
    1
    2
    3

    # 注意:

    safe-area-inset-top 属性在个别的安卓手机上面是取不到高度值的,所以需要特殊适配,失效的情况:

    1. 给一个默认的 padding-top 40px 防止失效。 (测试下来,还是会有手机失效,比如部分oppo手机)
      padding-top: 40px;
      padding-top: constant(safe-area-inset-top);
      padding-top: env(safe-area-inset-top);
    
    1
    2
    3
    1. 使用js方法获取高度 首先我们向页面中插入一个看不见的 div,将 div 的高度设置为安全距离的高度,然后再通过 js 获取其高度,若高度为 0,则说明没有生效。 那么在已经设置了安全区域属性的地方,都需要额外执行下 supportSafeArea()方法:
    let status = 0; // 0:还没数据,-1:不支持,1:支持
    
    /**
     * 判断当前设置是否支持constant(safe-area-inset-top)或env(safe-area-inset-top);
     * 部分Android设备,可以认识safa-area-inset-top,但会将其识别为0
     * @returns {boolean} 当前设备是否支持安全距离
     */
    const supportSafeArea = (): boolean => {
      if (status !== 0) {
        // 缓存数据,只向 body 插入一次 dom 即可
        return status === 1;
      }
      const div = document.createElement('div');
      const id = 'test-check-safe-area';
      const styles = [
        'position: fixed',
        'z-index: -1',
        'height: constant(safe-area-inset-top)',
        'height: env(safe-area-inset-top)',
      ];
      div.style.cssText = styles.join(';');
      div.id = id;
      document.body.appendChild(div);
      const areaDiv = document.getElementById(id);
      if (areaDiv) {
        status = areaDiv.offsetHeight > 0 ? 1 : -1; // 该 div 的高度是否为 0
        areaDiv.parentNode?.removeChild(areaDiv);
      }
      return status === 1;
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30

    # 注意2

    除了safe-area-inset-top。
    还有:
    safe-area-inset-left:安全区域距离左边边界的距离
    safe-area-inset-right:安全区域距离右边边界的距离
    safe-area-inset-top:安全区域距离顶部边界的距离
    safe-area-inset-bottom:安全区域距离底部边界的距离
    使用方法参照上面即刻。

    上次更新: 2024/08/07, 18:05:11
    JS设计模式总结笔记
    【CryptoJS】使用介绍

    ← JS设计模式总结笔记 【CryptoJS】使用介绍→

    最近更新
    01
    base64转doc文件
    01-03
    02
    手写签名
    01-03
    03
    base64图片加水印
    01-03
    更多文章>
    Theme by Vdoing | Copyright © 2023-2025 Adinnet
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式