DYU ebikes
Product categories
Product price
Product Max Speed
Product Motor
No products were found matching your selection.
(function () {
if (window.dyuMegaDropdownWheelLockV2) return;
window.dyuMegaDropdownWheelLockV2 = true;
var panelSelector = '#brxe-bd51ce.brx-dropdown-content, #brxe-c45a2e.brx-dropdown-content, #brxe-c04fc5.brx-dropdown-content';
var locked = false;
var lockedY = 0;
var syncTimer = 0;
var scrollTimer = 0;
function isDesktop() {
return window.matchMedia && window.matchMedia('(min-width: 992px)').matches;
}
function isVisible(element) {
if (!element || !isDesktop()) return false;
var style = window.getComputedStyle(element);
if (style.display === 'none' || style.visibility === 'hidden') return false;
if (Number(style.opacity || 1) <= 0.05) return false;
var rect = element.getBoundingClientRect();
return rect.width > 10 && rect.height > 10;
}
function visiblePanelFromTarget(target) {
var panel = target && target.closest ? target.closest(panelSelector) : null;
return isVisible(panel) ? panel : null;
}
function anyPanelOpen() {
if (!isDesktop()) return false;
var panels = document.querySelectorAll(panelSelector);
for (var index = 0; index < panels.length; index += 1) {
if (isVisible(panels[index])) return true;
}
return false;
}
function lock() {
if (locked) return;
locked = true;
lockedY = window.scrollY || document.documentElement.scrollTop || 0;
document.documentElement.classList.add('dyu-mega-dropdown-wheel-locked');
}
function unlock() {
if (!locked) return;
locked = false;
document.documentElement.classList.remove('dyu-mega-dropdown-wheel-locked');
}
function sync() {
window.clearTimeout(syncTimer);
syncTimer = window.setTimeout(function () {
if (anyPanelOpen()) {
lock();
} else {
unlock();
}
}, 60);
}
function canScrollPanel(panel, deltaY) {
if (!panel || panel.scrollHeight <= panel.clientHeight + 2) return false;
var atTop = panel.scrollTop <= 0 && deltaY < 0;
var atBottom = panel.scrollTop + panel.clientHeight >= panel.scrollHeight - 2 && deltaY > 0;
return !atTop && !atBottom;
}
document.addEventListener('wheel', function (event) {
if (!isDesktop()) return;
var panel = visiblePanelFromTarget(event.target);
if (!panel && !anyPanelOpen()) return;
lock();
if (panel && canScrollPanel(panel, event.deltaY)) {
event.stopPropagation();
return;
}
event.preventDefault();
event.stopPropagation();
}, { capture: true, passive: false });
document.addEventListener('touchmove', function (event) {
if (!isDesktop() || !anyPanelOpen()) return;
var panel = visiblePanelFromTarget(event.target);
if (!panel) {
event.preventDefault();
event.stopPropagation();
}
}, { capture: true, passive: false });
document.addEventListener('mouseover', sync, true);
document.addEventListener('mouseout', sync, true);
document.addEventListener('focusin', sync, true);
document.addEventListener('focusout', sync, true);
document.addEventListener('keydown', function (event) {
if (event.key === 'Escape') sync();
}, true);
window.addEventListener('scroll', function () {
if (!locked || !anyPanelOpen()) return;
window.clearTimeout(scrollTimer);
scrollTimer = window.setTimeout(function () {
if (Math.abs((window.scrollY || document.documentElement.scrollTop || 0) - lockedY) > 1) {
window.scrollTo(0, lockedY);
}
}, 0);
}, { passive: true });
window.addEventListener('resize', sync, { passive: true });
var observer = new MutationObserver(sync);
observer.observe(document.documentElement, {
subtree: true,
attributes: true,
attributeFilter: ['class', 'style', 'aria-expanded']
});
sync();
})();