File "scroll-effect.js"
Full Path: /home/amervokv/ecomlive.net/wp-content/themes/oceanwp/assets/src/scroll-effect.js
File size: 5.26 KB
MIME-type: text/plain
Charset: utf-8
import { isSelectorValid, offset } from "../lib/utils";
class ScrollEffect {
#elements = {
body: document.body,
};
constructor() {
if (
!this.#elements.body.classList.contains("single-product") &&
!this.#elements.body.classList.contains("no-local-scroll")
) {
this.#setElements();
this.#setupEventListeners();
}
}
#setElements = () => {
this.#elements = {
...this.#elements,
html: document.querySelector("html"),
WPAdminbar: document.querySelector("#wpadminbar"),
topbarWrapper: document.querySelector("#top-bar-wrap"),
header: document.querySelector("#site-header"),
};
};
#setupEventListeners = () => {
document
.querySelectorAll(
'a[href*="#"]:not([href="#"]), a.local[href*="#"]:not([href="#"]), .local a[href*="#"]:not([href="#"]), a.menu-link[href*="#"]:not([href="#"])'
)
.forEach((scrollItem) => {
scrollItem.addEventListener("click", this.#onScrollItemClick);
});
document.addEventListener('sectionLoaded', () => {
// Close the full-screen menu
if (window.oceanwp.fullScreenMobileMenu) {
window.oceanwp.fullScreenMobileMenu.closeMainMenu();
}
if (window.oceanwp.sidebarMobileMenu) {
window.oceanwp.sidebarMobileMenu.closeSidr();
}
if (window.oceanwp.dropDownMobileMenu) {
window.oceanwp.dropDownMobileMenu.onMenuCloseClick();
}
});
};
#onScrollItemClick = (event) => {
const scrollItem = event.currentTarget;
if (
!scrollItem.classList.contains("omw-open-modal") &&
!scrollItem.closest(".omw-open-modal") &&
!scrollItem.classList.contains("oew-modal-button") &&
!scrollItem.closest(".oew-modal-button") &&
!scrollItem.classList.contains("opl-link") &&
!scrollItem.parentNode.classList.contains("opl-link") &&
!scrollItem.classList.contains("oew-off-canvas-button") &&
!scrollItem.parentNode.classList.contains("oew-off-canvas-button") &&
!scrollItem.classList.contains("oec-off-canvas-button") &&
!scrollItem.parentNode.classList.contains("oec-off-canvas-button")
) {
const href = scrollItem.getAttribute("href");
const id = href.substring(href.indexOf("#")).slice(1);
let targetElem = null;
if (isSelectorValid(`#${id}`)) {
targetElem = document.querySelector(`#${id}`);
}
if (id != "" && !!targetElem) {
event.preventDefault();
event.stopPropagation();
let scrollPosition =
offset(targetElem).top -
this.#getCustomOffsetValue() -
this.#getAdminBarHeight() -
this.#getTopbarHeight() -
this.#getStickyHeaderHeight();
this.#elements.html.scrollTo({
top: scrollPosition,
behavior: "smooth",
});
}
}
};
#getCustomOffsetValue = () =>
!!oceanwpLocalize.customScrollOffset ? oceanwpLocalize.customScrollOffset : 0;
#getAdminBarHeight = () => {
// Check if the window width is less than 600px
// const isMobile = window.innerWidth < 600;
// // If it's mobile, return 0
// if (isMobile) {
// return 0;
// }
// If not mobile, proceed with the original logic to get the admin bar height
return !!this.#elements.WPAdminbar ? this.#elements.WPAdminbar.offsetHeight : 0;
};
#getTopbarHeight = () =>
!!this.#elements.topbarWrapper &&
this.#elements.topbarWrapper.classList.contains("top-bar-sticky")
? this.#elements.topbarWrapper.offsetHeight
: 0;
#getStickyHeaderHeight = (startPosition = false) => {
const stickyHeader = document.querySelector("#site-header-sticky-wrapper");
if (!!stickyHeader) {
if (stickyHeader.classList.contains("is-sticky") && !startPosition) {
return this.#elements.header.offsetHeight;
}
if (this.#elements.header?.classList.contains("top-header")) {
return Number.parseInt(getComputedStyle(stickyHeader).height);
}
if (this.#elements.header?.classList.contains("medium-header")) {
let height = 0;
const menu = this.#elements.header.querySelector(".bottom-header-wrap");
if (menu.classList.contains("fixed-scroll")) {
height = menu.offsetHeight;
} else if (this.#elements.header.classList.contains("hidden-menu")) {
height = this.#elements.header.dataset.height;
} else {
height = this.#elements.header.offsetHeight;
}
return height;
}
if (this.#elements.header?.classList.contains("fixed-header")) {
return this.#elements.header.offsetHeight;
}
if (this.#elements.header?.classList.contains("up-effect")) {
return 0;
}
return this.#elements.header?.dataset.height ?? 54;
}
if (!!document.querySelector("#stick-anything-header")) {
return document.querySelector("#stick-anything-header").offsetHeight;
}
if (
!!document
.querySelector(".elementor-section-wrap")
?.firstElementChild.classList.contains("elementor-sticky")
) {
return document.querySelector(".elementor-section-wrap")
?.firstElementChild.offsetHeight;
}
return 0;
};
}
("use script");
window.oceanwp = window.oceanwp || {};
oceanwp.scrollEffect = new ScrollEffect();