我的代码是很久以前的提示。
var tm
var tn;
var rot = true;
var rot2 = true;
var th = 482;
var tmh = 0;
var $paneTarget = $('#lyr1');
var slideshow = {
delay: 5000,
actions:[],
run: function() {
if (slideshow.actions.length) {
var current = slideshow.actions.shift();
current();
slideshow.actions.push( current );
tm = setTimeout(slideshow.run, slideshow.delay);
}
},
play: function(n) {
if (n!=true)
$(document).clearQueue();
if (slideshow.actions.length) {
tm = setTimeout(slideshow.run, slideshow.delay);
}
},
pause: function() {
clearTimeout(tm);
$(document).clearQueue();
}
};
$(".sideimg").each(function(){
var that = this;
slideshow.actions.push(function(){
if (tn != "") {
out(tn);
**}**
over($(that).attr("id"));
n = $(that).attr("id").substring($(that).attr("id").indexOf("img")+3,$(that).attr("id").length)
info("image.asp?id="+n+"","info");
var $target = $paneTarget.find('#'+$(that).attr("id"));
var timg = document.getElementById($(that).attr("id"));
if (timg.offsetTop>th||timg.offsetTop+timg.height>th||timg.offsetTop<tmh) {
$paneTarget.stop().scrollTo( $target , 800 );
tmh = timg.offsetTop;
}
$("#rimg").fadeOut("slow",function () {
slideshow.pause;
$("#rimg").attr("src",$(that).attr("bsrc")).load(function(){
$("#rimg").attr("alt",$(that).attr("alt"));
$("#rimg").fadeIn("normal");
slideshow.play;
});
});
tn = $(that).attr("id");
});
});
错误是:“行内存不足:37”
该行是粗体}(粗体不起作用,因为它在代码行内,所以寻找**}**
)
它不是在第一次循环后甚至是第二次循环时出现 - 它需要很长时间才能显示出来......可能是20分钟?
我让它在IE中运行得到了消息...在Chrome中使用它并且似乎没问题...在FF中使用firebug来查看DOM但在一小时后没有错误
我真的不知道该怎么做......
答案 0 :(得分:0)
理想情况下,代码分配的所有对象都应该由JS垃圾收集器正确释放。但是,不同浏览器上的垃圾收集实现之间存在差异,这可以解释为什么您只在IE中看到此错误。
特别是,我知道早期版本的IE中至少有一个错误(6及以下,不知道它是否在7+中),其中没有正确收集带有循环引用的对象,从而泄漏内存。我怀疑你遇到了这个特殊的bug,或类似的东西。
不幸的是,我没有一个简单的解决方案;您可能需要考虑重构代码以避免内存泄漏。
答案 1 :(得分:0)
我看到的问题:
slideshow.pause;
slideshow.play;
应该是
slideshow.pause();
slideshow.play();
n未定义:无论您想要什么,都可以在正确的范围内定义它。
最后我不知道over()
和out();
是什么