我有一个主题的功能,最多占用71%的成本(devtools分析器),因为函数是每次滚动事件都会执行,并且不会延迟或消除。尽管如此,这个函数在我使用主题的行为中似乎没用,所以我想通过覆盖它来移除它,但无法完成。如何从父主题main.js文件中删除一个带有子主题js文件的javascript函数
在main.js文件中的函数如下所示:
function fusionSideHeaderScroll() {
var $mediaQueryIpad = Modernizr.mq('only screen and (min-device-width: 768px) and (max-device-width: 1366px) and (orientation: portrait)') || Modernizr.mq('only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)'),
$documentHeight,
$windowPosition,
$windowHeight,
$bodyHeight,
$adminbarHeight,
$sideHeader,
$sideHeaderWrapper,
$sideHeaderHeight,
$boxedWrapperOffset,
$topOffset;
if (! $mediaQueryIpad) {
$documentHeight = jQuery(document).height();
$windowPosition = jQuery(window).scrollTop();
$windowHeight = jQuery(window).height();
$bodyHeight = jQuery('body').height();
$adminbarHeight = jQuery('#wpadminbar').height();
$sideHeader = jQuery('#side-header');
$sideHeaderWrapper = jQuery('.side-header-wrapper');
$sideHeaderHeight = $sideHeaderWrapper.outerHeight();
$boxedWrapperOffset = 0;
if (jQuery('body').hasClass('layout-boxed-mode') && jQuery('body').hasClass('side-header-right')) {
$sideHeader = jQuery('.side-header-wrapper');
$boxedWrapperOffset = jQuery('#boxed-wrapper').offset().top;
}
if (Modernizr.mq('only screen and (max-width:' + avadaVars.side_header_break_point + 'px)')) {
if (! $sideHeader.hasClass('fusion-is-sticky')) {
$sideHeader.css({
'bottom': '',
'position': ''
});
}
return;
}
if ($sideHeaderHeight + $adminbarHeight > $windowHeight) {
$sideHeader.css('height', 'auto');
if ($windowPosition > window.lastWindowPosition) {
if (window.avadaTop) {
window.avadaTop = false;
$topOffset = ($sideHeaderWrapper.offset().top > 0) ? $sideHeaderWrapper.offset().top - $boxedWrapperOffset : $adminbarHeight;
$sideHeader.attr('style', 'top: ' + $topOffset + 'px; height: auto;');
} else if (! window.avadaBottom && $windowPosition + $windowHeight > $sideHeaderHeight + $sideHeaderWrapper.offset().top && $sideHeaderHeight + $adminbarHeight < $bodyHeight) {
window.avadaBottom = true;
$sideHeader.attr('style', 'position: fixed; bottom: 0; top: auto; height: auto;');
}
} else if ($windowPosition < window.lastWindowPosition) {
if (window.avadaBottom) {
window.avadaBottom = false;
$topOffset = ($sideHeaderWrapper.offset().top > 0) ? $sideHeaderWrapper.offset().top - $boxedWrapperOffset : $adminbarHeight;
$sideHeader.attr('style', 'top: ' + $topOffset + 'px; height: auto;');
} else if (! window.avadaTop && $windowPosition + $adminbarHeight < $sideHeaderWrapper.offset().top) {
window.avadaTop = true;
$sideHeader.attr('style', 'position: fixed; height: auto;');
}
} else {
window.avadaTop = window.avadaBottom = false;
$topOffset = ($sideHeaderWrapper.offset().top > 0) ? $sideHeaderWrapper.offset().top - $boxedWrapperOffset : $adminbarHeight;
if ($windowHeight > window.lastWindowHeight && $bodyHeight > $sideHeaderWrapper.offset().top + $boxedWrapperOffset + $sideHeaderHeight && $windowPosition + $windowHeight > $sideHeaderWrapper.offset().top + $sideHeaderHeight) {
$topOffset += $windowHeight - window.lastWindowHeight;
}
$sideHeader.attr('style', 'top:' + $topOffset + 'px; height: auto;');
}
} else {
window.avadaTop = true;
$sideHeader.attr('style', 'position: fixed;');
}
window.lastWindowPosition = $windowPosition;
window.lastWindowHeight = $windowHeight;
}
}
功能与
// Make the side header scrolling happen
jQuery(window).on('scroll', fusionSideHeaderScroll);
jQuery(window).on('resize', fusionSideHeaderScroll);
定义它绑定到一个滚动事件之后,我已经试着写在我的孩子主题的js文件
function fusionSideHeaderScroll() {
//do nothing
}
在这种情况下,功能仍然有待执行,看起来似乎因为它被附加到每个滚动事件上,所以它是逻辑的。有没有办法使用javascript从滚动事件中分离函数?
代码粘贴在原函数内部'fusionSideHeaderScroll()'应该有东西在里面,你可以用它来解除绑定事件 –
你塞尔吉奥说,应该能够解除滚动事件。你不能只是替换函数的原因可能是由于范围问题。看到这个例子。 https://jsfiddle.net/3e03p5z6/1/ –
@SergioAlen,我已经为你编辑了我的帖子。梅比,你可以找到某事。解除功能! – DoUtDes