导致内存泄漏的 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/(反复滚动"健康,安全和保障"然后滚动到它的孩子以查看效果发生,如果您滚入和滚出足够快,动画幻灯片有时不会触发)。
问题似乎出在您的初始选择器中。它针对nav
下ul
下的所有li
标签,其中包括所有子项和孙项。
$("nav ul li") ...
这会导致它向 nav
下的所有li
标签添加一个hover
回调,然后在您悬停时它会添加另一个hover
回调。
您可能希望更具体地使用它,例如专门针对直接子项。
$("nav>ul>li")
如果您有儿童课程,您还可以使用:not(.child)
来定位所有不属于儿童的内容。使用console.log
(内置于 Chrome 或使用 Firebug)记录这些选择器正在提取的内容,以确保您得到期望的内容。
我知道你在说什么乔治; 在打开盒子几次后,在元素之间快速滑动时,效果最明显。
也许这将影响你所看到的。我读了stop()
,觉得它可能会对你所看到的产生影响。您可以在stop()
中指定的第一个属性是 clearQueue。第二个同样有趣。以下是文档对此的说明:
clearQueue 一个布尔值,指示是否同时删除排队的动画。默认为 false。 跳转结束一个布尔值,指示是否立即完成当前动画。默认为 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);
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 将 jQuery 代码添加到 Index.aspx 页面
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- Jquery:代码在rails中的页面加载时未执行
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- 我的jquery代码不起作用.为什么?
- 将javascript代码转换为jquery代码时出错
- 在CodeIgniter视图中将Javascript或jQuery代码作为PHP文件编写可以吗
- 按键时停止jquery代码
- 在Grails中的gsp中执行jquery代码
- 这个jquery代码是如何工作的
- 如何在加载角度函数后运行jQuery代码
- 如何使用Javascript或jQuery代码调用mousemove
- 如何使用我的Jquery代码创建委托事件侦听器
- 为什么jQuery代码段在没有IFrame的情况下可以工作,而在有IFrame时却不能工作
- 将JQuery代码转换为等效的JavaScript代码
- JQuery代码语法问题?(“不允许内联控制结构”)
- 使用一个 jquery 代码关闭多个模态
- 如何简化动画jQuery代码