簡體   English   中英

jQuery代碼導致內存泄漏

[英]jQuery code causing memory leak

以下代碼導致內存泄漏(您將鼠標懸停在其中的次數越多,看到的越多)。 不幸的是,我無法在我的辦公室中下載javascript分析器(我可以,這將花費我幾天/幾周的時間)。

這是代碼,只是下拉菜單的一些簡單轉換:

$(document).ready(function(){
    breadcrumbOver = function () {
        $(this).stop().animate({ backgroundColor: "#3393b5", textIndent: 15 }, 250);
    }
    breadcrumbOut = function () {
        $(this).stop().animate({ backgroundColor: "#738793", textIndent: 0 }, 250);
    }
    $("nav ul li").hover(
      function () {
        $(this).children('ul.child').stop().slideDown('fast').children('li').hover(breadcrumbOver, breadcrumbOut);
      }, 
      function () {
        $(this).children('ul.child').stop().slideUp('fast').unbind(breadcrumbOver, breadcrumbOut);
      }
    );
});

誰能看到可能發生內存泄漏的地方?

編輯:活生生的例子在這里- http://rcnhca.org.uk/sandbox/ (在“健康,安全和保安”反復滾再滾了它的孩子看到效果發生,也動畫了slideDown並不有時如果火您可以足夠快地滾動進出)。

問題看起來可能在您的初始選擇器中。 它以navul下的所有li標簽為目標,其中包括所有子孫。

$("nav ul li") ...

這將導致它向nav下的所有li標簽添加一個hover回調,然后在您懸停時添加另一個hover回調。

您可能希望對其進行更具體的說明,例如專門針對直接孩子。

$("nav>ul>li")

如果您有子類,也可以使用:not(.child)定位所有:not(.child)類。 使用console.log (Chrome內置或使用Firebug)記錄這些選擇器要提取的內容,以確保您獲得了期望的結果。

我明白你在談論喬治。 打開盒子幾次后在元素之間快速滑動時,效果最為明顯。

也許這會影響您所看到的東西。 我在stop()上閱讀,覺得它可能會對您看到的內容產生影響。 您可以在stop()指定的第一個屬性是clearQueue。 第二個同樣有趣。 以下是文檔說明的內容:

clearQueue一個布爾值,指示是否也要刪除排隊的動畫。 默認為false。 jumpToEnd一個布爾值,指示是否立即完成當前動畫。 默認為false。

可能值得這樣傳遞:

$(this).children('ul.child').stop(true, true)...
// (or  you want the animation to unwind, I suppose)
$(this).children('ul.child').stop(true)...

另外,我也檢查了取消綁定 ,並且我認為您不能像您一樣傳遞兩個事件。 也許您可以通過這種方式使用它,而不會遇到自己的問題:

...unbind(breadcrumbOver).unbind(breadcrumbOut);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM