Gathering detailed insights and metrics for normalize-scroll-left
Gathering detailed insights and metrics for normalize-scroll-left
Gathering detailed insights and metrics for normalize-scroll-left
Gathering detailed insights and metrics for normalize-scroll-left
Small utility to determine and normalize the Element.scrollLeft property's behavior
npm install normalize-scroll-left
Typescript
Module System
Node Version
NPM Version
TypeScript (100%)
Total Downloads
115,041,374
Last Day
11,687
Last Week
231,729
Last Month
926,461
Last Year
10,225,138
MIT License
19 Stars
15 Commits
4 Forks
1 Watchers
8 Branches
4 Contributors
Updated on Feb 15, 2024
Latest Version
0.2.1
Package Id
normalize-scroll-left@0.2.1
Size
3.73 kB
NPM Version
6.13.3
Node Version
12.11.0
Published on
Sep 07, 2020
Cumulative downloads
Total Downloads
Last Day
55%
11,687
Compared to previous day
Last Week
28.2%
231,729
Compared to previous week
Last Month
14.2%
926,461
Compared to previous month
Last Year
11.6%
10,225,138
Compared to previous year
This library normalizes the Element.scrollLeft
property when direction is rtl
.
All the hardwork are based on this juqery plugin and this stackoverflow answer.
Since Element.scrollLeft
's behavior with dir="rtl"
is not defined in any spec we use
a feature detection logic to determine the behavior of the current browser.
Types of scrollLeft
(scrollWidth
= 100) (Copied from
here)
Browser | Type | Most Left | Most Right | Initial |
---|---|---|---|---|
WebKit | default | 0 | 100 | 100 |
Firefox/Opera | negative | -100 | 0 | 0 |
IE/Edge | reverse | 100 | 0 | 0 |
You can install this package with the following command:
1npm install normalize-scroll-left
This library exposes these methods:
detectScrollType
1type ScrollType = 'indeterminate' | 'default' | 'negative' | 'reverse'; 2function detectScrollType(): ScrollType;
This function returns the scroll type detected, Keep in mind, this function caches the result as it should render a dummy on the DOM (which is expensive). Make sure the first invocation of this function happens after the body is loaded.
note: To support server-side-rendering, it will output indeterminate
if
it detects a non-browser environment.
1import { detectScrollType } from 'normalize-scroll-left'; 2 3const type = detectScrollType();
The output is not based on the browser, but feature detection:
Browser | Type |
---|---|
WebKit | default |
Firefox/Opera | negative |
IE/Edge | reverse |
Other/Server | indeterminate |
getNormalizedScrollLeft
1function getNormalizedScrollLeft(element: HTMLElement, direction: 'rtl' | 'ltr'): number;
You can use this method to get the normalized scrollLeft
property of an element.
You should explicitly pass the direction for the following reasons:
getComputedStyle
is expensive and might cause a reflow.ltr
.The output is NaN
on the server. Otherwise, it will mimic the behavior of
WebKit
as it's the esiest to work with.
1import { getNormalizedScrollLeft } from 'normalize-scroll-left'; 2 3const element = document.getElementById('my-scrollable-container'); 4 5// element.scrollWidth = 100; 6 7const scrollLeft = getNormalizedScrollLeft(element, 'rtl'); 8 9// scrollLeft will always be from 0 (Most Left) to 100 (Most Right). 10// It will initially be 100, That means the most right.
setNormalizedScrollLeft
1function setNormalizedScrollLeft(
2 element: HTMLElement,
3 scrollLeft: number,
4 direction: 'rtl' | 'ltr',
5): void;
You can use this method to set the scrollLeft
property of an element as normalized.
You should explicitly pass the direction for the same reasons as getNormalizedScrollLeft
:
For scrollWidth = 100
the argument scrollLeft
must be between 0
and 100
. This
function will automatically convert it into something the current browser understands.
1import { setNormalizedScrollLeft } from 'normalize-scroll-left'; 2 3const element = document.getElementById('my-scrollable-container'); 4 5// element.scrollWidth = 100, element.clientWidth = 20; 6 7setNormalizedScrollLeft(element, 20, 'rtl'); 8 9// Will set element.scrollLeft to ... 10// 20 in WebKit (chrome) 11// -60 in Firefox/Opera 12// 60 in IE/Edge 13// Does nothing on the server
The typescript type definitions are also available and are installed via npm.
This project is licensed under the MIT license.
No vulnerabilities found.