ES Module that automatically updates nav element or list group based on scroll position to indicate which link is currently active in the viewport. Also, when nav elements or list groups are clicked smooth scroll is being applied plus history push state.
$ npm install @inhaltone/double-agent-scroll@1.0.16
"@inhaltone/double-agent-scroll": "1.0.16"
import ES module to your app
import { DoubleAgentScroll } from "@inhaltone/double-agent-scroll";
Initialize Double Agent Scroll with default constructor params
const doubleAgentScroll = new DoubleAgentScroll();
By default, the instance corresponds to the below HTML structure
<!-- Navigation container -->
<nav id="doubleScrollAgent">
<!-- href corresponds to IDs of children of scrollable container below -->
<a href="#sectionFirst">Section First</a>
<a href="#sectionSecond">Section Second</a>
<a href="#sectionThird">Section Third</a>
...
</nav>
<!-- Scroll Agent container -->
<!-- data-scroll-target for scrollable container corresponds to navigation container ID value -->
<div data-scroll-target="doubleScrollAgent">
<section id="sectionFirst">
<h3>Section First</h3>
<p>JS Module... </p>
</section>
<section id="sectionSecond">
<h3>Section First</h3>
<p>JS Module... </p>
</section>
<section id="sectionThird">
<h3>Section Third</h3>
<p>JS Module... </p>
</section>
...
</div>
The DoubleAgentScroll() constructor returns a newly created object representing the scroll HTML structure defined by the parameters.
new DoubleAgentScroll();
new DoubleAgentScroll(element, params);
A string or any other object with a stringifier
An object with predefined keys
let params: {
offsetTop: Number,
activeClassName: String
};
const doubleAgentScroll = new DoubleAgentScroll('myAgent', {
offsetTop: 100,
activeClassName: 'current-section'
});
// Get current index
const activeIndex = doubleAgentScroll.getActiveIndex();
// Get navigation element
const navElement = doubleAgentScroll.getScrollNavElement();
// Get children element from scrollable target container
const scrollableSections = doubleAgentScroll.getScrollTargetChildren();
// Get navigation link elements
const navLinks = doubleAgentScroll.getScrollNavChildren();
//Get current URL object with hash params
const currentUrl = doubleAgentScroll.getCurrentURL();
//Set scroll position programmaticaly
doubleAgentScroll.setScrollPosition(scrollableSection);