diff --git a/site/index.html b/site/index.html
index 52267b6..3550719 100644
--- a/site/index.html
+++ b/site/index.html
@@ -42,10 +42,10 @@
-
- Features
- Get started
- Who's using it?
+
@@ -65,14 +65,14 @@
-
+
Get started
Get started
-
+
@@ -230,9 +230,9 @@
diff --git a/site/src/javascript/Scroll.js b/site/src/javascript/Scroll.js
new file mode 100644
index 0000000..831ef99
--- /dev/null
+++ b/site/src/javascript/Scroll.js
@@ -0,0 +1,81 @@
+export default class Scroll
+{
+ constructor()
+ {
+ this.parse()
+ }
+
+ /**
+ * Search and set js-scroll-item elements
+ * @param {Element} _$element Target element to parse
+ */
+ parse(_$element = null)
+ {
+ const $element = _$element || document
+ const $items = $element.querySelectorAll('.js-scroll-item:not(.scroll-item-set)')
+
+ for(const $item of $items)
+ {
+ this.setItem($item)
+ }
+ }
+
+ setItem($item)
+ {
+ $item.addEventListener('click', (event) =>
+ {
+ event.preventDefault()
+
+ const href = $item.getAttribute('href')
+ const $element = document.querySelector(href)
+
+ if($element)
+ {
+ this.scrollTo($element.offsetTop)
+ }
+ })
+ }
+
+ /**
+ * Scroll to value with transition
+ * @param {Number} scrollTargetY Scroll value
+ * @param {Number} speed Speed
+ */
+ scrollTo(scrollTargetY = 0, speed = 2000)
+ {
+ // Set up
+ const scrollY = window.scrollY || document.documentElement.scrollTop
+ let currentTime = 0
+ const time = Math.max(.1, Math.min(Math.abs(scrollY - scrollTargetY) / speed, .8))
+
+ // EaseInOutQuint
+ const easeInOutQuint = (pos) =>
+ {
+ if ((pos /= 0.5) < 1) {
+ return 0.5 * Math.pow(pos, 5);
+ }
+ return 0.5 * (Math.pow((pos - 2), 5) + 2);
+ }
+
+ // Tick
+ const tick = () =>
+ {
+ currentTime += 1 / 60
+
+ const p = currentTime / time
+ const t = easeInOutQuint(p)
+
+ if(p < 1)
+ {
+ window.requestAnimationFrame(tick)
+ window.scrollTo(0, scrollY + ((scrollTargetY - scrollY) * t))
+ }
+ else
+ {
+ window.scrollTo(0, scrollTargetY)
+ }
+ }
+
+ tick()
+ }
+}
\ No newline at end of file
diff --git a/site/src/javascript/index.js b/site/src/javascript/index.js
index 351acd1..8446f07 100644
--- a/site/src/javascript/index.js
+++ b/site/src/javascript/index.js
@@ -1,9 +1,11 @@
import Demo from './Demo.js'
+import Scroll from './Scroll.js'
export default class Site
{
constructor()
{
this.demo = new Demo()
+ this.scroll = new Scroll()
}
}
\ No newline at end of file