summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/sticky_tabs.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/sticky_tabs.js')
-rw-r--r--app/assets/javascripts/sticky_tabs.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/app/assets/javascripts/sticky_tabs.js b/app/assets/javascripts/sticky_tabs.js
new file mode 100644
index 00000000000..ec81cfbae0d
--- /dev/null
+++ b/app/assets/javascripts/sticky_tabs.js
@@ -0,0 +1,32 @@
+class StickyTabs {
+ constructor(stickyTabs, unstickyTabs) {
+ this.stickyTabs = stickyTabs;
+ this.unstickyTabs = unstickyTabs;
+
+ this.unstickyTabsHeight = this.unstickyTabs.offsetHeight;
+
+ this.eventListeners = {};
+ }
+
+ bindEvents() {
+ this.eventListeners.handleStickyTabs = this.handleStickyTabs.bind(this);
+
+ document.addEventListener('scroll', this.eventListeners.handleStickyTabs);
+ }
+
+ unbindEvents() {
+ document.removeEventListener('scroll', this.eventListeners.handleStickyTabs);
+ }
+
+ handleStickyTabs() {
+ if (this.unstickyTabs.getBoundingClientRect().top <= this.unstickyTabsHeight) {
+ this.unstickyTabs.classList.add('invisible');
+ this.stickyTabs.classList.remove('hide');
+ } else {
+ this.unstickyTabs.classList.remove('invisible');
+ this.stickyTabs.classList.add('hide');
+ }
+ }
+}
+
+export default StickyTabs;