Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
@studio-freight/locomotive-scroll
Advanced tools
Detection of elements in viewport & smooth scrolling with parallax effects.
Detection of elements in viewport & smooth scrolling with parallax effects.
Locomotive Scroll seems to not be maintained anymore.
This package includes:
npm install @studio-freight/locomotive-scroll
With simple detection.
<h1 data-scroll>Hey</h1>
<p data-scroll>👋</p>
Add the base styles to your CSS file.
import LocomotiveScroll from '@studio-freight/locomotive-scroll';
const scroll = new LocomotiveScroll();
<script src="locomotive-scroll.min.js"></script>
<script>
(function () {
var scroll = new LocomotiveScroll();
})();
</script>
Get the JS file.
With smooth scrolling and parallax.
<div data-scroll-container>
<div data-scroll-section>
<h1 data-scroll>Hey</h1>
<p data-scroll>👋</p>
</div>
<div data-scroll-section>
<h2 data-scroll data-scroll-speed="1">What's up?</h2>
<p data-scroll data-scroll-speed="2">😬</p>
</div>
</div>
import LocomotiveScroll from '@studio-freight/locomotive-scroll';
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true
});
Note: scroll-sections are optional but recommended to improve performance, particularly in long pages.
Make it do what you want.
<section id="js-target">Come here please.</section>
import LocomotiveScroll from '@studio-freight/locomotive-scroll';
const scroll = new LocomotiveScroll();
const target = document.querySelector('#js-target');
scroll.scrollTo(target);
<!-- Using modularJS -->
<div data-scroll data-scroll-call="function, module">Trigger</div>
<!-- Using jQuery events -->
<div data-scroll data-scroll-call="EVENT_NAME">Trigger</div>
<!-- Or do it your own way 😎 -->
<div data-scroll data-scroll-call="{y,o,l,o}">Trigger</div>
import LocomotiveScroll from '@studio-freight/locomotive-scroll';
const scroll = new LocomotiveScroll();
scroll.on('call', (func) => {
// Using modularJS
this.call(...func);
// Using jQuery events
$(document).trigger(func);
// Or do it your own way 😎
});
Option | Type | Default | Description |
---|---|---|---|
el | object | document | Scroll container element. |
name | string | 'scroll' | Data attribute prefix (data-scroll-xxxx ). |
offset | array(2) | [0,0] | Global in-view trigger offset : [bottom,top] Use a string with % to use a percentage of the viewport height.Use a numeric value for absolute pixels unit. E.g. ["30%",0] , [100,0] , ["30%", 100] |
repeat | boolean | false | Repeat in-view detection. |
smooth | boolean | false | Smooth scrolling. |
initPosition | object | { x: 0, y: 0 } | An object defining the initial scroll coordinates on a smooth instance. For example: { x: 0, y: 1000 } |
direction | string | vertical | Scroll direction: vertical or horizontal |
lerp | number | 0.1 | Linear interpolation (lerp) intensity. Float between 0 and 1 .This defines the "smoothness" intensity. The closer to 0 , the smoother. |
getDirection | boolean | false | Add direction to scroll event. |
getSpeed | boolean | false | Add speed to scroll event. |
class | string | is-inview | Element in-view class. |
initClass | string | has-scroll-init | Initialize class. |
scrollingClass | string | has-scroll-scrolling | Is scrolling class. |
draggingClass | string | has-scroll-dragging | Is dragging class. |
smoothClass | string | has-scroll-smooth | Has smooth scrolling class. |
scrollbarContainer | object | false | Specifies the container element for the scrollbar to be appended in. If false, scrollbar will be appended to the body. |
scrollbarClass | string | c-scrollbar | Scrollbar element class. |
multiplier | number | 1 | Factor applied to the scroll delta, allowing to boost/reduce scrolling speed (regardless of the platform). |
firefoxMultiplier | number | 50 | Boost scrolling speed of Firefox on Windows. |
touchMultiplier | number | 2 | Multiply touch action to scroll faster than finger movement. |
scrollFromAnywhere | boolean | false | By default locomotive-scroll listens for scroll events only on the scroll container ( el option). With this option set to true, it listens on the whole document instead. |
gestureDirection | string | vertical | Defines which gesture direction(s) scrolls in your instance. You can use :
|
tablet & smartphone | object | Object allowing to override some options for a particular context. You can specify:
tablet context you can also define breakpoint (integer, defaults to 1024) to set the max-width breakpoint for tablets. | |
reloadOnContextChange | boolean | false | Allows to reload the page when switching between desktop , tablet and smartphone contexts. It can be useful if your page changes a lot between contexts and you want to reset everything. |
resetNativeScroll | boolean | true | Sets history.scrollRestoration = 'manual' and calls window.scrollTo(0, 0) on locomotive-scroll init in Native Class. Useful if you use transitions with native scrolling, otherwise we advise to set it to false if you don't want to break History API's scroll restoration feature. |
autoRaf | boolean | true | Defines if locomotive-scroll should use its own raf or a custom one. If true you have to trigger .raf() manually. |
Attribute | Values | Description |
---|---|---|
data-scroll | Detect if in-view. | |
data-scroll-id | string | (Optional) Useful if you want to scope your element and get the progress of your element in the viewport for example. |
data-scroll-container | Defines the scroll container. Required for basic styling. | |
data-scroll-section | Defines a scrollable section. Splitting your page into sections may improve performance. | |
data-scroll-class | string | Element in-view class. |
data-scroll-offset | string | Element in-view trigger offset : bottom,top First value is bottom offset, second (optional) is top offset.Percent is relative to viewport height, otherwise it's absolute pixels. E.g. "10" , "100,50%" , "25%, 15%" |
data-scroll-repeat | boolean | Element in-view detection repeat. |
data-scroll-call | string | Element in-view trigger call event. |
data-scroll-position | string | top , bottom , left or right Window position of in-view trigger. |
data-scroll-speed | number | Element parallax speed. A negative value will reverse the direction. |
data-scroll-delay | number | Element's parallax lerp delay. |
data-scroll-direction | string | Element's parallax direction. vertical or horizontal |
data-scroll-sticky | Sticky element. Starts and stops at data-scroll-target position. | |
data-scroll-target | string | Target element's in-view position. |
Method | Description | Arguments |
---|---|---|
init() | Reinitializes the scroll. | |
on(eventName, function) | Listen instance events ⬇. | |
update() | Updates all element positions. | |
destroy() | Destroys the scroll events. | |
start() | Restarts the scroll events. | |
stop() | Stops the scroll events. | |
scrollTo(target, options) | Scroll to a target. | target : Defines where you want to scroll. Available values types are :
options (optional, object) : Settings object. Available values are:
|
Event | Arguments | Description |
---|---|---|
scroll | obj | Returns scroll instance (position, limit, speed, direction and current in-view elements). |
call | func | Trigger if in-view. Returns your string or array if contains , . |
All data-scroll
elements have a progress value.
In the on scroll event you can get all current in-view elements.
<h1 data-scroll data-scroll-id="hey">Hey</h1>
scroll.on('scroll', (args) => {
// Get all current elements : args.currentElements
if(typeof args.currentElements['hey'] === 'object') {
let progress = args.currentElements['hey'].progress;
console.log(progress);
// ouput log example: 0.34
// gsap example : myGsapAnimation.progress(progress);
}
}
Name | Description |
---|---|
Virtual Scroll | Custom scroll event with inertia/momentum. |
modularScroll | Elements in viewport detection. Forked from it, not a dependency. |
bezier-easing | Allows to define an easing to scrollTo movement |
Works on most modern browsers. Chrome, Firefox, Safari, Edge...
To get IE 11 support, you need polyfills. You can use your own or include these before our script.
<script
nomodule
src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.6.0/polyfill.min.js"
crossorigin="anonymous"
></script>
<script
nomodule
src="https://polyfill.io/v3/polyfill.min.js?features=Object.assign%2CElement.prototype.append%2CNodeList.prototype.forEach%2CCustomEvent%2Csmoothscroll"
crossorigin="anonymous"
></script>
FAQs
Detection of elements in viewport & smooth scrolling with parallax effects.
The npm package @studio-freight/locomotive-scroll receives a total of 9 weekly downloads. As such, @studio-freight/locomotive-scroll popularity was classified as not popular.
We found that @studio-freight/locomotive-scroll demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.