Javascript 延迟一个函数,直到$可用

Javascript 延迟一个函数,直到$可用,javascript,jquery,namespaces,deferred-execution,Javascript,Jquery,Namespaces,Deferred Execution,出于性能方面的原因,雅虎建议将其删除。我使用HTML5样板文件,这是遵守规则的 这种方法的问题是jQuery也是在底部加载的。如果出于某种原因,我需要编写包含jQuery代码的内联javascript,我不能,因为$在名称空间中还不可用 例如,galleria.js(jQuery图像库引擎)就需要这样的标记: <div id="gallery"> <img src="/media/img1.png" /> <img src="/media/img2.

出于性能方面的原因,雅虎建议将其删除。我使用HTML5样板文件,这是遵守规则的

这种方法的问题是jQuery也是在底部加载的。如果出于某种原因,我需要编写包含jQuery代码的内联javascript,我不能,因为
$
在名称空间中还不可用

例如,galleria.js(jQuery图像库引擎)就需要这样的标记:

<div id="gallery">
    <img src="/media/img1.png" />
    <img src="/media/img2.png" />
</div>

<script>
$('#gallery').css('height', '200px'); // this is required for galleria to work
Galleria.run('#gallery');
</script>

在命名空间中找到
$
符号之前,是否有任何提示将
块的执行后置?

您可以将脚本包装在函数中,并从加载jQuery后运行的脚本中调用它们。

您可以将脚本包装在函数中,并从加载jQuery后运行的脚本中调用它们jQuery已加载。

如果可以,只需将jQuery放在头部即可。这是可以接受的,因为它是一个非常常见的库。但是,除了明显地将脚本块移动到jquery脚本include之后之外,您几乎有一个选项——使用window.setTimeout(function(){…jquery code…},2000)。。。在我看来,上面提到的是一个创可贴…这不是最好的做法


请注意:这是完全不可靠的,因为我们“猜测”用户将在两秒钟内加载jQuery。。。当然,您可以延长超时时间。但是,用户的速度(/年龄)和带宽等因素都会影响定时。这是不可预测的。

如果可以,只需将jQuery放在头部即可。这是可以接受的,因为它是一个非常常见的库。但是,除了明显地将脚本块移动到jquery脚本include之后之外,您几乎有一个选项——使用window.setTimeout(function(){…jquery code…},2000)。。。在我看来,上面提到的是一个创可贴…这不是最好的做法

请注意:这是完全不可靠的,因为我们“猜测”用户将在两秒钟内加载jQuery。。。当然,您可以延长超时时间。但是,用户的速度(/年龄)和带宽等因素都会影响定时。这是不可预测的。

将jQuery
标签留在底部,然后将Galleria
移动到其下方

<script type="text/javascript" src="jquery.js"></script>
<script>
$('#gallery').css('height', '200px'); // this is required for galleria to work
Galleria.run('#gallery');
</script>

$('#gallery').css('height','200px');//这是galleria工作所必需的
Galleria.run(“#画廊”);
将jQuery
标签留在底部,然后将Galleria
移动到其下方

<script type="text/javascript" src="jquery.js"></script>
<script>
$('#gallery').css('height', '200px'); // this is required for galleria to work
Galleria.run('#gallery');
</script>

$('#gallery').css('height','200px');//这是galleria工作所必需的
Galleria.run(“#画廊”);

您可以创建自己的“就绪检查器”

 <script>
    var id = window.setInterval(function(){

         if(document.readyState != 'complete') return;

         //onload code here

         window.clearInterval(id);
    }, 10); 
 </script>

var id=window.setInterval(函数(){
if(document.readyState!=“complete”)返回;
//在这里加载代码
窗口。清除间隔(id);
}, 10); 

这样,即使jQuery位于文档底部,您也可以等待文档准备就绪并加载它。

您可以创建自己的“就绪检查器”

 <script>
    var id = window.setInterval(function(){

         if(document.readyState != 'complete') return;

         //onload code here

         window.clearInterval(id);
    }, 10); 
 </script>

var id=window.setInterval(函数(){
if(document.readyState!=“complete”)返回;
//在这里加载代码
窗口。清除间隔(id);
}, 10); 

这样,即使jQuery位于文档底部,您也可以等待文档准备就绪并加载jQuery。

首先我不会使用setTimeout。我不会依赖“完全不可靠”的东西。同意。。。但是,有时您没有选择(如果您没有编辑整个代码库的权限,尤其是在大型开发环境中)。再次,它的意思是作为一个创可贴…最后一个办法,我只是不想用setTimeout。我不会依赖“完全不可靠”的东西。同意。。。但是,有时您没有选择(如果您没有编辑整个代码库的权限,尤其是在大型开发环境中)。再次,它的意思是作为一个创可贴…最后一个办法。在顶部或中间有一个内联脚本,在底部等待某个东西加载,这是没有意义的。把内联脚本移到你包含jQuery的下面。如果我可以做一个概括的泛化,你不应该在页面中间需要内联脚本,除非它做了一些不能等待页面加载的事情(例如,<代码>文档>(或)>代码>没有必要在顶部或中间的内嵌脚本等待在底部加载的东西——将内联脚本移动到您包含jQuery的下面。如果我可以做一个概括的泛化,你不应该在页面的中间需要内联脚本,除非它做了一些不能等待页面加载的事情(例如,<代码>文档>)/>代码>。在一个函数中把“代码在这里”的代码放在一个函数中并从jQuery <代码($)(文档)> Read()调用这个函数不是更容易吗?在底部定义的处理程序?这不会抛出
非法令牌$
?如果jQuery没有加载yetOh,我明白了。将该调用放在jQuery引用的下面或同一脚本标记中。是的,那可能更容易。我知道jQuery可能会很慢。这个方法是“更快”还是jQuery会更快?是的,我明白了。我只是想征求您的意见。将“code here”代码放在函数中并从底部定义的jQuery
$(document).ready()
处理程序调用该函数不是更容易吗?这不会抛出一个
非法标记$
?如果jQuery没有加载yetOh,我明白了。将该调用放在jQuery引用的下面或同一脚本标记中。是的,那可能更容易。我知道jQuery可能会很慢。这个方法是“更快”还是jQuery会更快?是的,我明白了。我只是问你的意见。