【问题标题】:Revealing module pattern and document onready显示模块模式和文档准备就绪
【发布时间】:2013-06-19 21:28:43
【问题描述】:
我正在尝试使用显示模块模式来实现 Canvas 游戏。因此,我必须获取 Canvas DOM 元素及其上下文。这意味着在 DOM 完全加载之前不应执行该函数。因为我使用的是 jQuery,所以我只想将所有内容都放在 document.ready() 中,但这会弄乱范围。从这个例子可以看出:
var game = function ()
{
var canvas = document.getElementById("canvas");
var init = function ()
{
}
return
{
init: init
}
}();
该函数必须是自动执行的,才能使返回正常工作。但是,由于它引用了画布,我不希望它立即加载。将自执行功能放在 document.ready() 中会阻止我这样做
game.init();
我该怎么办?
【问题讨论】:
标签:
javascript
jquery
dom
document-ready
revealing-module-pattern
【解决方案1】:
如果您需要确保在运行特定的 javascript 之前加载 DOM 元素,只需将 javascript 放在页面上该特定 DOM 元素之后:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="~/Scripts/jquery-1.9.1.js"></script>
<script>
$(function () {
game.init();
});
</script>
</head>
<body>
<div>
<canvas id="canvas"></canvas>
</div>
<script>
var game = function () {
var canvas = document.getElementById("canvas");
var init = function () {
alert(canvas.id);
};
return {
init: init
}
}();
</script>
</body>
</html>
页面是从上到下解析的,所以在 javascript 代码执行之前,canvas 元素将被加载到 DOM 中。
将您的 javascript 放在页面底部,就在结束正文标记之前的另一个好处是,这可以改善您页面的感知加载时间。例如,如果您在页面的 head 部分中有复杂的 javascript,则必须先加载和解析该 javascript,然后才能呈现 body 部分中的任何 HTML 元素,因为该页面是自上而下执行的。如果 javascript 很复杂,页面可能会显得加载缓慢。通过将它放在底部,您的 HTML 会被渲染,然后您的 javascript 会被加载和解析,这可以使您的页面的视觉部分显示得更快。 See here 了解更多信息。