npm 包 ios-inner-height 使用教程

在移动端前端开发中,我们经常会遇到 iOS 系统下 Safari 浏览器的“奇怪”行为。其中之一就是 iOS Safari 的 innerHeight 属性,它返回的是整个文档的高度,而不是视窗的高度。这就导致了在 iOS 设备上开发的网站,在浏览器向下滚动时,布局会错乱。为了解决这个问题,有一位前辈开发了一个 npm 包,名为 ios-inner-height,来提供更加精确的 innerHeight 属性。

安装

在使用 ios-inner-height 包之前,我们需要先安装它。使用以下命令:

--- ------- ----------------

如果你使用 Yarn,则使用以下命令:

---- --- ----------------

使用

安装成功后,我们就可以在项目中使用 ios-inner-height 来获取视窗高度,而不是文档高度。使用方式很简单,只需要在需要使用 innerHeight 的地方导入并调用即可。

------ -------------- ---- -------------------

----- -------------- - -----------------

对于需要实时获取视窗高度的场景,我们可以将 iOSInnerHeight 函数传入 requestAnimationFrame 或者 resize 事件中,来实时更新视窗高度值。

--------------------------------- -- -- -
  ------------------------ -- -
    ----- -------------- - -----------------
    ----------------------------
    -- -- -------------
  ---
---

实现原理

默认情况下,我们获取 innerHeight 属性得到的是整个文档的高度,而不是视窗的高度。这是因为 iOS Safari 浏览器在浏览器地址栏和底部工具栏的显示和隐藏上有一些不同的行为。当这两个栏目显示时,浏览器会将工具栏的高度计算在 innerHeight 中;当这两个栏目隐藏时,浏览器则会将工具栏的高度从 innerHeight 中减去。

因此,要精确的获得视窗的高度,需要先判断地址栏和底部工具栏是否隐藏,然后根据这个状态来计算出视窗的高度。如下所示:

------ ------- -------- ---------------- -
  ----- ----- -
    -------------------------------------------- --
    -----------------

  -- -------- -
    ------ -------------------
  -

  ----- ----------- - ------------------
  ----- ------------ - -------------------

  -- --------------
  -- -
    ------------------- --- -- -- ----------- --- --- -- ------------ --- ---- --
    ------------------- --- --- -- ----------- --- --- -- ------------ --- ---- --
    ------------------- --- - -- ----------- --- --- -- ------------ --- ---- --
    ------------------- --- --- -- ----------- --- --- -- ------------ --- ----
  - -
    ------ ---- -- ------ - ------
  -

  -- --------------
  -- -
    ------------------- --- -- -- ----------- --- --- -- ------------ --- ---- --
    ------------------- --- --- -- ----------- --- --- -- ------------ --- ---- --
    ------------------- --- - -- ----------- --- --- -- ------------ --- ---- --
    ------------------- --- --- -- ----------- --- --- -- ------------ --- ----
  - -
    ------ ---- -- ------ - -----------------
  -

  ------ -------------
-

总结

在 iOS Safari 浏览器中,获取 innerHeight 属性会返回整个文档的高度,为了精确的获取视窗的高度,我们可以使用 ios-inner-height 这个 npm 包。它的实现原理是根据当前设备的状态判断地址栏和底部工具栏是否隐藏,然后根据这个状态来计算出视窗的高度。这个包可以在解决 iOS 设备上网页布局错误的问题中起到很好的作用。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6006735c890c4f7277583fa6


猜你喜欢

  • npm包 Tinyformatter使用教程

    介绍 为了使前端开发更加高效、便捷和规范化,代码格式化成为了重要的一环。Tinyformatter是一个基于JavaScript实现的代码格式化工具,可以帮助前端开发人员快速、简单地将代码以规范化的形...

    4 年前
  • npm包x-router使用教程

    引言 前端开发人员在进行开发的过程中,经常会用到路由(routing)管理工具,以辅助其构建出合理的交互体验。今天,本文将对 npm 包 x-router 进行详细介绍,并提供 usage 以及示例代...

    4 年前
  • npm 包 ffmpeg-respawn 使用教程

    ffmpeg-respawn 是一个优秀的用于管理 FFmpeg 进程的 npm 包。它提供了一个简单的 API,让前端开发者可以更加容易地启动和停止 FFmpeg 进程,并监控它们的状态。

    4 年前
  • npm 包 entoli 使用教程

    在前端开发中,npm 是一个必不可少的工具。通过使用 npm 可以更加方便地管理项目中使用到的各种包。在众多的 npm 包中,entoli 是一个非常实用的工具包,其提供了一种应用场景下的智能数据缺失...

    4 年前
  • npm 包 webmodules 使用教程

    npm 是现代 JavaScript 程序员最经常使用的包管理器,可以将开发者从日常繁琐的库维护中解放出来。如果你是一个前端开发者,那么你一定会常常使用 npm 包。

    4 年前
  • npm 包 x-router-modal 使用教程

    简介 x-router-modal 是一个轻量级的 npm 包,它可以帮助开发者更方便地在前端项目中实现模态框。该包基于 React 和 React Router 构建,其中包含一个高阶组件(HOC)...

    4 年前
  • npm 包 exo-sync 使用教程

    简介 exo-sync 是一个基于 WebSocket 通信协议的实时数据同步工具,它可以在不同的客户端之间实现实时数据的双向同步。它适用于前端以及 Node.js 环境下的开发,可用于实现多人协同编...

    4 年前
  • npm 包 @building-block/track-progress 使用教程

    前言 在开发前端项目的过程中,我们通常会遇到需要对某些操作的进度进行追踪的情况。例如:上传文件时需要知道上传进度,加载静态资源时需要知道加载进度等等。本文将介绍通过使用 npm 包 @building...

    4 年前
  • npm 包 ember-component-lifecycle-hooks 使用教程

    在 Ember.js 应用中,组件通常是应用的构建块。过去,Ember 组件中的生命周期方法只能声明为 actions,而随着 Ember 版本的更新和迭代,引入了生命周期钩子来代替 actions。

    4 年前
  • npm 包 exo-add 使用教程

    介绍 Exo-add 是一个可以帮助前端开发者快速实现简单加减乘除运算的 npm 包。在日常开发中,常常需要对某些数据进行加减乘除运算,而这些运算需要编写多行代码进行计算,十分繁琐且容易出错。

    4 年前
  • npm 包 kyrsten-sass-utils 使用教程

    介绍 kyrsten-sass-utils 是一个基于 Sass 的 npm 包,提供了一些方便的 Sass 工具函数和 mixin。这些工具函数和 mixin 可以帮助我们快速地开发和维护复杂的样式...

    4 年前
  • npm 包 @sbynh/ckeditor5-build-markdown-lite 使用教程

    简介 @sbnyh/ckeditor5-build-markdown-lite 是一个轻量级的 Markdown 编辑器,基于 CKEditor5 构建而成。他实现了精简版的 Markdown 编辑器...

    4 年前
  • npm包react-sticky-element-watcher使用教程

    简介 react-sticky-element-watcher是一个npm包,用于React应用程序中的侦听固定元素的位置和状态,使得用户操作更加流畅和自然。 使用 安装 使用npm安装react-s...

    4 年前
  • npm 包 exo-test 使用教程

    概述 exo-test 是一个基于 Node.js 的 npm 包,用于前端界面测试的自动化工具。它可以帮助前端开发者在编写代码或修改代码时,自动运行一系列端到端的测试用例,以确保代码的正确性和稳定性...

    4 年前
  • npm 包 resource-factory 使用教程

    简介 resource-factory 是一个 Node.js 的 npm 包,它提供了一种简单的方式来创建 RESTful APIs,并且支持自动化地生成文档、参数验证、权限验证等功能。

    4 年前
  • npm 包 exo-create 使用教程

    什么是 exo-create exo-create 是一个 npm 包,它是一个用于快速创建基础 react 项目的命令行工具。它可以帮助前端开发者快速地搭建一个 react 项目的基础结构,省去了重...

    4 年前
  • npm 包 vue-resize-box 使用教程

    在前端开发中,经常需要处理元素的大小变化。使用 vue-resize-box 这个 npm 包可以让调整元素大小的过程更加简便。本文将介绍如何使用 vue-resize-box,以及其在实际开发中的应...

    4 年前
  • npm 包 walnutjs 使用教程

    简介 Walnutjs 是一个轻量级的前端工具库,能帮助开发者快速构建优雅的 Web 应用。它提供了丰富的功能,包括 UI 组件、请求方法、数据处理等,同时还支持自定义插件,可以方便地扩展功能。

    4 年前
  • npm 包 qqjfdjkfdsjkfkdsjfksjpickr 使用教程

    前言 在前端开发中,我们经常需要用到选择颜色的功能。而选择颜色的方式多种多样,比如直接使用 input 标签的 type="color" 属性,或者使用第三方的颜色选择器插件等。

    4 年前
  • npm 包 @epicfaace/expression-parser 使用教程

    npm 包 @epicfaace/expression-parser 使用教程 什么是表达式解析器? 表达式解析器是一个功能强大的工具,能够解析并计算任何数学表达式。

    4 年前

相关推荐

    暂无文章