是否有使用Prototype javascript框架在 dom:loaded 和 load 之间处理的事件?
我使用原型实现了一个预加载器,看起来像这样:
Event.observe(window,"load",preload);
function preload(){
if($('wrapper'))
$('wrapper').setStyle({"display":"block"});
if($('loading'))
setTimeout('$("loading").fade({duration: 5.0});',4000);
}
然后我有一个另一个处理程序用于列高度fixatioan:
Event.observe(window,"load",function(){
var bottomExtraOffset = (Prototype.Browser.IE) ? 100 : 130;
if(parseInt($$('.col1')[0].getStyle('height')) > parseInt($$('.col2')[0].getStyle('height')))
$('wrapper').setStyle({'height' : parseInt($$('.col1')[0].getStyle('height'))+bottomExtraOffset+'px'});
else
$('wrapper').setStyle({'height' : parseInt($$('.col2')[0].getStyle('height'))+bottomExtraOffset+'px'});
});//observe
它在任何浏览器中工作都相当不错,但是IE!似乎IE没有将第二个处理程序附加到onload处理程序列表,所以当第一个处理器尝试获取任何列的高度时它返回0因为它仍然显示为无。
除了加载&之外还有其他事件吗? dom:loaded 要处理并让我离开这个!?
答案 0 :(得分:0)
你可以在完成preload()之后调用第二个函数吗?
或者,如果您不想在preload()之后直接调用它,那么您可以执行类似设置标志的操作,然后在section函数中设置超时以等待第一个执行完毕。
如果订单很重要,您需要在各个功能之间进行沟通。
答案 1 :(得分:0)
没有这样的事件AFAIK,甚至 dom:loaded 事件都是由Prototype开发人员实现的,而且这不是JS中的默认事件。您可能希望使用帮助程序延迟执行第二个处理程序,因此第一个将首先执行:
function foo(){
var bottomExtraOffset = (Prototype.Browser.IE) ? 100 : 130;
if (parseInt($$('.col1')[0].getStyle('height')) > parseInt($$('.col2')[0].getStyle('height'))) {
$('wrapper').setStyle({'height' : parseInt($$('.col1')[0].getStyle('height')) + bottomExtraOffset + 'px'});
}
else {
$('wrapper').setStyle({'height' : parseInt($$('.col2')[0].getStyle('height')) + bottomExtraOffset + 'px'});
}
}
function bar() {
// One msec delay.
setTimeout(foo, 1);
}
Event.observe(window, "load", bar); // or window.observe("load",bar);
此外,您可以检查用户代理是否像IE一样,然后使用此方法和您说的方法。