2016-12-14 50 views
0

我有一个主题的功能,最多占用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从滚动事件中分离函数?

+1

代码粘贴在原函数内部'fusionSideHeaderScroll()'应该有东西在里面,你可以用它来解除绑定事件 –

+0

你塞尔吉奥说,应该能够解除滚动事件。你不能只是替换函数的原因可能是由于范围问题。看到这个例子。 https://jsfiddle.net/3e03p5z6/1/ –

+0

@SergioAlen,我已经为你编辑了我的帖子。梅比,你可以找到某事。解除功能! – DoUtDes

回答

1

尝试解除绑定滚动和调整使用.off()事件,像这样:

jQuery(window).off('scroll', fusionSideHeaderScroll); 
jQuery(window).off('resize', fusionSideHeaderScroll); 
+0

感谢sergio的建议,可悲的是,它似乎没有解决我的问题,我收到一条错误消息,说fusionSideHeaderScroll没有定义,当我试图将这个代码放入子主题js文件。 – DoUtDes

+0

好的,所以我刚刚尝试将您的建议粘贴到main.js文件中,只是为了看看发生了什么。然后发生期望的效果并且滚动事件被分离。所以问题是我如何从另一个外部文件中实现这一点,以及为什么它现在不能运行。这是因为这个函数不是全局函数吗? – DoUtDes

+0

您的网站是否存在?你能分享一个链接,这样我们可以看看吗?这很可能是范围问题。 –

相关问题