【问题标题】: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 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多