npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@formfunfunction/inner-height

v2.0.0

Published

Retrieve a consistent, accurate `window.innerHeight` measurement from iOS and Android

Downloads

13

Readme

@formfunfunction/inner-height

Retrieve a consistent, accurate window.innerHeight measurement from iOS and Andriod

This is a fork of ios-inner-height. We've just added Android to the user-agent detection as some android devices also suffer from the same expanding and contracting menu. We've also added the ability to turn off the user-agent detection all-together.

var innerHeight = require('@formfunfunction/inner-height');

innerHeight(true); // bypasses UAString detection

iOS Safari has a neat feature that results in window.innerHeight providing different values based on whether or not the URL control and menu bar are expanded. This is the case when a page initially loads - or if the page content is shorter than the screen. As a user scrolls, the menu bar retracts beneath the perceivable screen and the URL control shrinks to increase the amount of the page now visible to the user.

For a better explanation, read "The iOS Safari menu bar is hostile to web apps: discuss".

This can get super annoying super quick when one wants to know the scrolled viewport height sans expanded URL and menu bar for, say, measuring an element's percentage in view. It seems the most reliable way to determine the window's inner height regardless of Safari's current scroll state is to inject an element into the DOM, set its height to 100vh, measure it, and destroy it.

This module provides a consistent pixel measurement for the state of iOS Safari having no menu bar and a collapsed URL control, independent of its actual state.

Example output

From an iOS device, load the example page. This page reports the current height returned by this module and by calling window.innerHeight.

| reporter | page load | after scroll | orientation change | |----------------------|-------------|--------------|----------------------| | ios-inner-height | 628px | 628px | 375px | | window.innerHeight | 559px | 628px | 375px <= => 331px |

alt text alt text

Measurements upon initial load and after scroll.

alt text alt text

Measurements upon initial load and after scroll (landscape).

Installation

Install via npm:

$ npm i --save @formfunfunction/inner-height

Usage as a module

The module exposes a getter that can be called as often as you like. It will automatically account for the window's current orientation. And all measurements are done upon instantiation, so future calls should introduce zero DOM overhead.

var innerHeight = require('@formfunfunction/inner-height');

// now anytime you need it, get a reliable window height
console.log(innerHeight());

Built file usage

A built file and its minififed version are included in the dist folder. This is a standard browserify standalone file. This file will work with other module systems and sets iosInnerHeight as a global method if no module system is found.

<!doctype html>
<html>
<head>
  <title>iOS Inner Height</title>
</head>
<body>
  <p>iosInnerHeight measurement: <span id="measurement"></span></p>
  <script src="some-path/ios-inner-height.js"></script>
  <script>
    var el = document.getElementById('measurement');
    setInterval(function () {
      el.textContent = iosInnerHeight() + 'px';
    }, 100);
  </script>
</body>
</html>

Known issues

Tests are pretty horrible. Searching for a headless version of iOS Safari.

Resources