jQuery初始化顺序

时间:2010-02-20 13:58:57

标签: jquery jquery-ui jquery-ui-accordion galleria

我正在构建一个页面,我想使用Galleria脚本(http://devkick.com/lab/galleria/)和jQuery的Accordion小部件来隐藏不同类别的图库缩略图。在我的初始化中,我写了两个脚本的手册:

<script type="text/javascript">
        jQuery(function($) { 
        $('ul.gallery').galleria({
         insert: "#image"
        });

         $("#thumbs").accordion();

        });
</script>

galleria()功能会创建缩略图并为其指定适当的尺寸。然后,accordion()函数指定其样式并折叠当前不可见的元素。使用上面的代码我遇到一些问题,一些缩略图由于零维度而变得不可见。

如果我在缩略图在galleria()函数中指定其大小之前发出警报,我可以看到,对于手风琴不可见页面内的图像,其容器在该点处的尺寸为零。这对我来说很奇怪,因为我认为这些函数是连续执行的,accordion()galleria()完成之前不会被调用。

更奇怪的是,如果我在手风琴功能之前发出警报,那么一切都按照正确的顺序处理。

很明显,我在这里面临着一场竞争。为什么会发生这种情况,我该怎么做以保证有序的初始化序列?

2 个答案:

答案 0 :(得分:2)

这只是猜测,但我猜它与下载图像之前运行的脚本有关。这似乎可以解释为什么手风琴功能之前的alert()会使事情发挥作用。它为图像提供了加载的机会。

如果这是正确的,您可能希望使用jQuery的load()事件处理程序来确保图像完全加载。

加载文档():http://api.jquery.com/load-event/

答案 1 :(得分:1)

我认为竞争条件可能是因为一旦galleria添加了它们,所有图像都可能无法下载。这将导致手风琴功能假设图像为零。

添加警报的原因是因为它需要并且当您关闭它时,图像已下载。

如果你想确定执行顺序,请查看firebug和console.log,而不是使用警报,警报不会阻止脚本执行,例如警报。

关于你的主要问题,我会研究一下galleria是否提供了一些回调功能,以确保在继续之前下载所有图像。