javascript - window.innerWidth = 0?

标签 javascript jquery html canvas

我正在为动画制作 Canvas 网页。奇怪的是,每次我通过双击 html 文件启动网页时, Canvas 几乎总是大小不正确。我之前发过类似的问题:Canvas sizing incorrectly on loading但没有想要的答案。

经过大量调试后,我发现是 window.innerWidth 给我带来了这样的麻烦。 window.innerWidth 每次通过双击 html 文件启动页面并导致 Canvas 大小不正确时返回 0(有趣的是 Canvas 大小不完全为 0,而是一个非常小的对象以堆叠呈现),但在重新加载页面(Ctrl+R)后,问题不再发生。我正在使用 jQuery 加载页面,这是我的代码:

html:

    <body>
        <canvas id="main_canvas"></canvas>
    </body>

js:

    $(document).ready(function() {

        var SCREEN_WIDTH = window.innerWidth-10,
            SCREEN_HEIGHT = window.innerHeight-10;

        if (window.innerWidth === 0) { alert("wtf? width = 0?");}

        var canvas = $('canvas')[0],
            context;

        init(); // use $(window).load(init) does not fix the problem

        function init() {

            if (canvas.getContext) {

                context = canvas.getContext('2d');
        animate(); // draw stuff
            }

            else {
                alert('Your browser does not support html5 canvas');
            }
        }
});

正如您在这里看到的,我已经在使用 $(docuemnt).ready(function()) 来确保加载内容,但是来自链接 http://4loc.wordpress.com/2009/04/28/documentready-vs-windowload/作者建议在加载 HTML 文档且 DOM 准备就绪时就已经执行文档就绪事件,即使所有图形尚未加载也是如此。

另一方面,$(window).load(function()) 在整个页面(包括所有框架、对象和图像)完全加载后执行。因此,涉及图像或其他页面内容的函数应该放在窗口或内容标签本身的加载事件中。但是即使我使用这个问题也没有解决。

也许 js 文件在加载之前要求窗口的宽度,但我找不到可行的解决方案。有人可以帮忙吗?

最佳答案

使用在窗口调整大小时触发的事件监听器。这样一来,您就不必费力地寻找窗口何时完全初始化。它还会让你减少对状态的依赖,这是一个很好的奖励。

window.addEventListener( 'resize', onWindowResize, false ); 
function onWindowResize() {
    windowX = window.innerWidth;
    windowY = window.innerHeight;
}

关于javascript - window.innerWidth = 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11721064/

相关文章:

javascript - 如何调试 LG Webos Chromium 浏览器? (模拟器)

jquery - 定位除一个之外的所有元素(jquery)

javascript - 当焦点不在或在 div 外部单击时隐藏 div

javascript - 如何在 DOM 事件调用的方法中更改 Vue.js 数据值?

javascript - 无法清除 Google Map API 3 中的方向服务的路线

javascript - 如何检测 Safari 上的页面是否是从跳板打开的?

javascript - iframe中的脚本能否与主页中的脚本交互

jquery - 无限滚动 - twitter facebook "hide"额外数据如何

html - 彼此相邻的两个 div - 将左侧扩展到全宽

javascript - 确定本地 iframe 是否已加载的 chalice