Demo
Use one of these scroll-to links to see the fuzzyScroll() function in action. Their scroll-to target is the heading, but the desired effect is for the window to scroll-to a position where the blue border above the heading is still visible on the page.
Scroll to:
- Favorites
- Messages
- Settings
Favorites
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aspernatur at cupiditate est et, fugiat illum modi quisquam quo rerum voluptatum! Architecto consequuntur culpa delectus numquam quisquam? Alias consectetur libero sed?Aspernatur eligendi error facere inventore iste reiciendis. Autem id iure, porro quisquam quos tenetur totam? Amet consequuntur deleniti, distinctio molestiae necessitatibus obcaecati pariatur quo repudiandae sapiente totam veniam vero vitae!Accusantium adipisci aliquid animi assumenda culpa dolores doloribus fuga fugit ipsa nulla odio officiis pariatur praesentium provident, quam qui quos rerum sit suscipit, tempora tempore, unde velit voluptates! Neque, vel.Ab cum nisi nulla ratione rem tenetur? Consequuntur cupiditate deleniti eaque eveniet ex in placeat porro quibusdam quo quod? Accusamus fuga ipsa quia! Accusantium eligendi laboriosam minus neque repudiandae voluptas?
Return to top of demo
Messages
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium aspernatur autem beatae consequatur debitis dolore, eaque facere harum incidunt labore maxime minus modi mollitia natus odio provident quibusdam veniam voluptatem!Ab aliquam animi cumque illo minus optio quis voluptates? At atque, eum exercitationem explicabo in nulla qui ullam unde. Explicabo inventore odit placeat quae rem suscipit veritatis! Aperiam, ratione, repellendus!Aliquid corporis culpa distinctio est, expedita explicabo hic ipsa ipsum nam necessitatibus nemo, nesciunt quidem quos rerum saepe tempore veritatis voluptatum! Distinctio dolor eaque enim ipsa quae similique ut vel.Accusantium ad asperiores blanditiis culpa ipsam provident sit, voluptatum. Alias aut cumque dicta dignissimos dolorum enim et exercitationem fuga ipsa nobis praesentium, quam recusandae, reprehenderit sint temporibus voluptatem, voluptatum? Commodi.
Return to top of demo
Settings
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiis iste nesciunt quasi sit! A eum inventore laudantium maiores omnis pariatur, repellat vero. Ad architecto doloremque eaque enim, labore officiis sint!Ad adipisci asperiores at deserunt, ipsa, minima, molestiae molestias nobis odit perferendis perspiciatis quasi repellat sint veritatis voluptatem! Blanditiis cum ea facilis impedit, incidunt pariatur tempora tempore ullam veritatis voluptatem?Necessitatibus omnis optio porro saepe temporibus. Accusantium alias aliquam animi asperiores at atque consectetur culpa cum cumque eveniet ipsa molestias odit, officia, optio, placeat quas repellat similique sunt totam vitae.Adipisci, culpa, obcaecati? Animi aperiam assumenda consequatur consequuntur cupiditate, dignissimos doloremque ducimus ea enim error, excepturi exercitationem ipsum iure labore laborum natus optio praesentium recusandae soluta veritatis. Amet, nisi, voluptates!
Return to top of demo
How to:
HTML, CSS, and Javascript
The following code samples are implemented on this site using Laravel Blade, Tailwind, Daisy UI, and Font Awesome.
Let's start with function to handle the scroll:
Javascript
/**
* Scroll the window to a specified (X, Y) location, where 'Y' is some number
* of pixels above a target element. Use a negative 'Y' to scroll below the element.
*
* @param {String} el CSS query selector for the target element to be scrolled to.
* @param {Number} fuzz Vertical padding for scrollTo().
* @param {Number} [x] Horizontal coordinate for scrollTo(). default is 0.
*
* @return {undefined}
*/
function fuzzyScroll(el, fuzz, x = 0)
{
// get the bounding box of the target element
const rect = document.querySelector(el).getBoundingClientRect();
// get the location of the target element on the page
const distanceToScrollY = rect.top + window.scrollY;
// scroll the window, above or below the target element
window.scrollTo(x, distanceToScrollY - fuzz);
}
If you are so inclined, you can add attach this function to the window object. Perhaps in your app.js file.
Javascript
document.addEventListener("DOMContentLoaded", () =>
{
window.fuzzyScroll = fuzzyScroll;
});
Then we need a button or some text for the user to click on:
HTML
<p>
<span class="link link-primary" onclick="window.fuzzyScroll('#targetHeading', 50)">Target Heading</span>
</p>
<div class="mt-12 py-12 border-t-2 border-sky-400>
<h3 id="targetHeading">Target Heading</h3>
<p>...</p>
</div>
In the example above we are using a value of 50 for the fuzz because Tailwind is providing 48px of top margin and a border that is 2px wide.
Project Galleries
Tool
Color Average
Blend two colors to get their linear and logarithmic mid-point.
Tool
Multi Tab Opener
Like bookmarks on steroids: time released links with options and storage.
App
Jitter Bug
Simulated page traffic and product sales for marketing.
App
Shopping Cart
Originally made for use on Unbounce with Checkout Champ.
Tool
Public Library
A nifty little reading lens for classic novels using the Spritz SDK.
Collapse & Reveal
Animated Component
Slide a content block's height up or down.
Move Elements
Animated Component
Change or restore the location of a content block.
Code Snippet
Animated Component
The source code for this website's custom code snippet component.
Tabbed Panes
Animated Component
Nav tabs with content panels that fade in and out.
Window Resize Observer
Utility
Manage and perform a list of actions when the browser is resized.
Console Formatter
Utility
Opinionated extensions for console messages.
Fuzzy Scroll
Utility
Improved scroll-to behavior.
Cube Node
Have fun building structures by joining nodes with chopsticks
Laptop Stand
Use 2 to hold a thin laptop upright. Great with a wireless keyboard
Little Buggy
A toy for kids. Requires 9V battery, small gray motor, and bouncy balls for feet
MicroSD Card Ring
Holds 16 MicroSD cards. Doubles as a paper weight