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

hashy-links

v2.0.1

Published

Hash link fix

Downloads

17

Readme

hashy.js

Smooth scroll to internal anchors when clicking "hash" links (e.g. href="#foobar").

Offset scroll amount by the height of a given element including on page load - useful for sticky headers.

Version 2

  • No longer requires jQuery
  • Dropped Bower support
  • Updated API
  • Removed UMD in favour of an ES2015 class
  • extra_offset has been inverted

Installation

npm install --save hashy-links

Basic Usage

Html

<nav id="fixedHeader">This is my fix position nav bar</nav>
<a href="#foo" class="smooth-scrolling-links">Click me</a>

JavaScript

import Hashy from 'hashy-links';

const hashy = new Hashy('.smooth-scroll-links', '#fixedHeader', 20);

window.addEventListener('load', () => {
  hashy.scrollToLocationHash();
});

Marvelous.

Parameters

const hashy = new Hashy(link_selector, offset_selector, extra_offset);

link_selector

This is a jQuery selector for links that you want to smooth scroll when clicked. So if you have something like this:

When something with this selector is clicked hashy will look on the current page for an element with the given ID. If this element is not found, the default link's action will be used. This should allow external (not same page) links to be selected without causing problems except...

Potential Issue - If you are on foo.html and have a link to bar.html#baz but #baz also exists on the current page then your link will effectively be broken. This is an issue that needs to be fixed. You can, and should, avoid this problem by being careful which links to pick with your selector. For example, you probably don't want to do hashy('a'). Instead you might do something like a[href*=#]:not([href=#]).

offset_selector

This optional selector is for use with fixed menus that normally cover content when using hash links. For single menus an id selector is recommended, e.g. hashy('#main-menu'). If you have multiple menus you can pass in a selector that matches multiple items. The scroll will then be offset by the combined height of these elements.

extra_offset

An optional number of pixels to offset the scroll by, in addition the distance calculated by offset_selector. Can be positive or negative. You could even make it really, really negative and it will just stop at the top of the page. I've got you covered, bud.

Advanced Usage

There are also a couple of helper methods you can use if you like.

scrollToHash

hashy.scrollToHash(hash, quick, callback, extra_offset)

Smooth scroll to the given hash and update the address bar.

Parameters

hash - The selector to scroll to. e.g. #somewhere

quick - (optional. Default: false) Don't transition - just go there!

callback - (optional) Function to call after scrolling has finished.

extra_offset - (optional) An additional pixel value to offset the scroll by

setHash

hashy.setHash(#whatever);

Update the address bar without scrolling the page.

Dynamically Sized Content

If your content resizes when the page loads, you're going to want to call hashy after that is done, otherwise the offset calculations may be incorrect. Something like this might help:

window.addEventListener('load', () => {
  Hashy.init('.smooth-scrolling-links', '#fixed-header');
});