窗口.内部宽度 = 0
window.innerWidth = 0?
我正在为动画制作一个画布网页。奇怪的是,每次我通过双击html文件启动网页时,画布几乎总是大小不正确。我之前发布过类似的问题:加载时画布大小不正确,但没有想要的答案。
经过广泛的调试,我发现是window.innerWidth
给我带来了这样的麻烦。每次通过双击 html 文件启动页面时,window.innerWidth
都会返回 0,并导致不正确的画布大小(有趣的是,画布大小并不完全是 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;
}
我对window.outerWidth
有一个类似的问题,当从ready((方法调用时,它在某些浏览器上返回0,我改用screen.width
解决了它。我没有测试它,但我认为screen.availWidth
可以解决您的问题。
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 检查iframe内部的窗口是否已关闭
- 如何使用AngularJS在点击身体内部任何位置时显示弹出窗口
- 如何使用 php 代码内部显示引导模式弹出窗口
- 如果通过字符串变量发送,HTML内部的子窗口将显示为文本
- 窗口.内部宽度 = 0
- 为什么jQuery可以从内部调用窗口,却要将窗口发送给自己
- 获取占x滚动条高度的窗口内部高度
- 如何调整浏览器窗口的大小,使内部宽度为特定值
- 重定向至与窗口宽度相关的内部页面
- 单击链接按钮时,无法从更新面板内部打开新窗口
- 调整窗口大小时更新窗口内部高度
- "FB没有定义为“FB”;内部窗口.fbSyncInit
- 如何防止firefox内部的javascript关闭窗口/选项卡
- 窗口内部宽度大小更改
- Wordpress定制预览脚本在初始页面加载时执行实时预览,而不是在我从预览窗口导航内部页面时执行实时预览
- 日期picker内部引导弹出窗口
- 如何禁用一个JavaScript,与内部窗口宽度
- 是否可以使用"var"将函数绑定到窗口?从函数内部
- Firefox什么时候创建一个新的内部窗口?